我想在同一个数据库上创建架构的完整副本。实现此目的的最佳技术是什么?我脑子里有几个想法:1.通过数据库链路的数据泵1.网络链路上的IMPDP
zengzsys1#
您不需要一个花哨的网络链接或任何东西,只需要使用expdp/impdp命令。
expdp fromUser/fromPword schemas=sourceSchema directory=DUMPDIR dumpfile=dump.dmp logfile=explog.txt
提示:确保该用户能够写入DUMPDIR或任何您称之为它的内容然后使用remap_schema参数重新导入架构:
remap_schema
impdp toUser/toPword directory=DUMPDIR dumpfile=dump.dmp logfile=implog.txt remap_schema=fromUser:toUser
如果你真的想使用network_link参数(这样你就不会因为某些原因而创建一个转储文件),那么我建议你阅读this或this。关于您的问题的大量信息也可以在here中找到。
juud5qan2#
试试看:Copy schema into same database我测试了一下,它工作了。但是你必须像评论中提到的那样创建一个公共链接。如果你创建了一个.par文件来重新Map你的表空间,你可以重用它。O并且不要忘记将transaform放在.par文件中:
TRANSFORM=oid:n
否则可能会出现错误。
w7t8yxp53#
我在Oracle中将模式内容从模式user_a复制到模式user_b所执行的步骤如下:DBMS位于Oracle Linux服务器容器内。让我们假设模式是这样定义的:
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是否可以访问该路径。如果未将目录分配给方案用户,请执行以下操作:
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
3条答案
按热度按时间zengzsys1#
您不需要一个花哨的网络链接或任何东西,只需要使用expdp/impdp命令。
提示:确保该用户能够写入DUMPDIR或任何您称之为它的内容
然后使用
remap_schema
参数重新导入架构:如果你真的想使用network_link参数(这样你就不会因为某些原因而创建一个转储文件),那么我建议你阅读this或this。
关于您的问题的大量信息也可以在here中找到。
juud5qan2#
试试看:
Copy schema into same database
我测试了一下,它工作了。但是你必须像评论中提到的那样创建一个公共链接。
如果你创建了一个.par文件来重新Map你的表空间,你可以重用它。
O并且不要忘记将transaform放在.par文件中:
否则可能会出现错误。
w7t8yxp53#
我在Oracle中将模式内容从模式
user_a
复制到模式user_b
所执行的步骤如下:DBMS位于Oracle Linux服务器容器内。让我们假设模式是这样定义的:
这里重要的一点是:这些模式可以访问同一个表空间并具有创建会话的权限。
要进行复制,需要数据模式的目录:检查授权目录:
检查目录的路径是否物理存在,以及组
dba
是否可以访问该路径。如果未将目录分配给方案用户,请执行以下操作:
运行导出:
运行导入: