我想在同一数据库上创建完整的架构副本。最佳技术是什么?
我有几个想法:
- 通过 Db 链路进行数据泵
- 在网络链接上执行 IMPDP
- 使用 EXPDP,然后使用 IMPDP
每种技术的优点和/或缺点是什么?
我想在同一数据库上创建完整的架构副本。最佳技术是什么?
我有几个想法:
每种技术的优点和/或缺点是什么?
你不需要任何高级的网络连接或者其他设备,只需要使用expdp/impdp命令。 首先导出你想要的模式:
expdp fromUser/fromPword schemas=sourceSchema directory=DUMPDIR dumpfile=dump.dmp logfile=explog.txt
提示:确保该用户具有写入DUMPDIR或其他目录的权限
然后使用remap_schema
参数重新导入模式:
impdp toUser/toPword directory=DUMPDIR dumpfile=dump.dmp logfile=implog.txt remap_schema=fromUser:toUser
如果你真的想要使用 network_link 参数(因为某些原因不想创建 dumpfile),那么我建议阅读这篇文章或者这篇文章。你还可以在这里找到有关你问题的很好的信息。如果您创建了一个重新映射表空间的.par文件,则可以重用它。当然要进行一些搜索和替换。
还有,不要忘记在.par文件中放置转换:
TRANSFORM=oid:n
以下是我在Oracle中将模式user_a
的内容复制到模式user_b
所执行的步骤:
假设这些模式定义如下:
create user user_a identified by user_a_pass default tablespace tablespace_a;
grant
create materialized view,
create procedure,
create sequence,
create session,
create table,
create type,
create trigger,
create view to user_a;
create user user_b identified by user_b_pass default tablespace tablespace_a;
grant
create materialized view,
create procedure,
create sequence,
create session,
create table,
create type,
create trigger,
create view to user_b;
select tp.grantee, tp.table_name from all_tab_privs tp where tp.privilege = 'WRITE' and tp.type = 'DIRECTORY';
请检查目录的物理路径是否存在,并且组dba
可以访问该目录。
如果目录未分配给模式用户,请执行以下操作:
create or replace directory user_dir as '/opt/oracle/product/19c/dbhome_1/user_dir_name';
grant read, write on directory user_dir to user_a;
grant read, write on directory user_dir to user_b;
运行导出命令:
expdp user_a/user_a_pass@host/database schemas=user_a directory=user_dir dumpfile=user_a.dmp logfile=schema_exp.log
运行导入操作:
impdp user_b/user_b_pass@host/database directory=user_dir dumpfile=user_a.dmp logfile=schema_imp.log remap_schema=user_a:user_b