Oracle 21c:如何以不同的DB名称将模式和行克隆到同一服务器?

7fhtutme  于 2023-03-17  发布在  Oracle
关注(0)|答案(1)|浏览(98)

我很难理解如何去做这样的事情:

  • 假设我有一个名为EXAMPLE的Oracle数据库,其中包含表USERSFOOBAR
  • 我想将EXAMPLE数据库克隆到NEW_DB中,同时保留模式和数据
  • 所以我得到了NEW_DBUSERSNEW_DBFOOBAR

看起来expdbimpdb可能可以用于此目的,但网上很少有资源/教程显示它们的用途。
以MySQL为例,这可以使用mysqldump并将其传输到mysql中来完成,如下所示:

  • mysqldump <connection params for DB1> | mysql <connection params for DB2>

如果有人碰巧知道,Oracle的一组等效命令可能是什么?

wz3gfoph

wz3gfoph1#

这里有一个答案,以防将来有人遇到这个问题。
这里我们创建一个新的db $cloneName,它最终包含chinook模式的内容。
正如我的同事所发现的,诀窍似乎是使用schemaremap_schema

#!/usr/bin/env bash

echo 'CREATE USER "$cloneName" IDENTIFIED BY p4ssw0rd DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp QUOTA 10M ON users;' | sqlplus sys/p4ssw0rd@localhost:1535 as sysdba

echo 'GRANT connect TO "$cloneName";' | sqlplus sys/p4ssw0rd@localhost:1535 as sysdba
echo 'GRANT resource TO "$cloneName";' | sqlplus sys/p4ssw0rd@localhost:1535 as sysdba
echo 'GRANT create session TO "$cloneName";' | sqlplus sys/p4ssw0rd@localhost:1535 as sysdba
echo 'GRANT create table TO "$cloneName";' | sqlplus sys/p4ssw0rd@localhost:1535 as sysdba
echo 'GRANT create view TO "$cloneName";' | sqlplus sys/p4ssw0rd@localhost:1535 as sysdba
echo 'GRANT read, write on directory chinook TO "$cloneName";' | sqlplus sys/p4ssw0rd@localhost:1535 as sysdba

expdp \'chinook/p4ssw0rd@localhost:1535\' schemas=chinook directory=chinook dumpfile=chinook.dmp exclude=statistics
impdp \'\"$cloneName\"/p4ssw0rd@localhost:1535\' remap_schema=chinook:\"$cloneName\" directory=chinook dumpfile=chinook.dmp transform=disable_archive_logging:y

相关问题