1.在线方式迁移
通过 dblink 的方式远程克隆。帮我们做了很多工作,这个也是简单的迁移方式。该方式对于相同版本的 pdb
之间的迁移没问题。如果是跨版本的,比如从 12.1 到 19c 也可以使用。在 19c 上 clone 完之后,需要运行
dbupgrade 脚本。
2.离线方式迁移
将原库离线或只读方式打开,将文件复制到目标库,然后再创建 PDB。如果使用了 ASM(默认使用了 OMF 这
个特性,OMF 这个特性贼棒),会变得比较复杂。
在线方式迁移
在新的容器数据库上执行以下操作
1.在目标库上创建到源库的 dblink
create database link clone_link connect to system identified by oracle using
'(description=(address=(protocol=tcp)(host=192.168.10.21)(port=1521))
(connect_data=(service_name=pdb1)))';
2.执行远程创建
create pluggable database pdb1 from pdb1@clone_link
下面是在通过 dblink 远程克隆时 alert 日志对应的输出
如果源端和目标端对应的 patch 不一致或者出现一些无效的组件等,PDB 会处以 restricted 模式。
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 PDB1 READ WRITE YES
常用的用来检查补丁或冲突的 SQL 语句
select patch_id, patch_uid, version, status, description from
dba_registry_sqlpatch;
select inst_id,name,open_mode,restricted from gv$pdbs order by 1,2;
select name,con_id,con_uid,open_mode,restricted,guid from v$pdbs order by 1,2;
select status, message, action from pdb_plug_in_violations where status !
='RESOLVED';
如果是补丁不一致,通过 datapatch 一般能解决大部分问题
[oracle@xd08dbadm01 OPatch]$ ./datapatch -verbose -pdbs PDB1
如果 datapatch 成功执行后,数据库还处于 restricted 模式,那么大部分情况下,是因为一些无效对象
导致的。在这个模式下,数据库时不正常的,千万不要切换和运行业务。
查询无效对象
select owner,object_name,object_type,status from dba_objects where
status='INVALID' and OWNER IN ('PUBLIC','SYS','SYSTEM','XDB','ORDSYS',
'ORDPLUGINS' ,'ORDDATA','MDSYS','CTXSYS');
查询组件状态
select substr(comp_name,1,30) comp_name, substr(comp_id,1,10)
comp_id,substr(version,1,12) version,status from dba_registry;
查询后会发现,一些组件可能也是无效的
通过 dba_errors 去下钻出现问题的根本原因
select text from dba_errors where name='DBMS_XDBUTIL_INT' and owner='XDB';
select text from dba_errors where name='DBMS_XDBT' and owner='XDB';
select text from dba_errors where name='DRILOAD' and owner='CTXSYS';
select text from dba_errors where name='DRVDOC' and owner='CTXSYS';
select text from dba_errors where name='SDO_OLS' and owner='MDSYS';
通过以上,可以发现这些无效对象是因为权限的问题,导致无法正常编译。
SQL> grant execute on dbms_sql to XDB,CTXSYS;
评论