天天看點

Oracle 12c遠端克隆PDB的問題及修複(r12筆記第78天)

Oracle 12c遠端克隆PDB的問題及修複(r12筆記第78天)
Oracle 12c遠端克隆PDB的問題及修複(r12筆記第78天)

 Oracle 12c裡面的PDB遷移還是有很多花樣的,玩法很多,如果想達到一種平滑方式的遷移,克隆遠端PDB也是一種方法,保證網絡暢通,即可遠端克隆PDB到指定的目标容器資料庫中,當然這種方式還是推薦資料量不大的PDB。

  要實作遠端克隆,主要就是建立DB link,然後使用create pluggable database語句指定db link複制的路徑即可。當然這個過程中還是可能出現一大堆的問題。我就抛磚引玉,提一個比較有代表性的。

首先在目标端容器資料庫建立DB link,指向源端的PDB

create public database link tcymob1_new12c connect to pdb_mgr identified by oracle using 'tcymob1';

接着在目标端容器資料庫遠端克隆PDB

CREATE PLUGGABLE DATABASE pdb4 FROM test_pdb ? FILE_NAME_CONVERT =

file_name_convert=('/U01/app/oracle/oradata/dbcadb','/U01/app/oracle/oradata/dbcadb/pdb4');

當然很不幸,抛出了下面的錯誤,這個錯誤如果在12.2中測試很可能不會碰到,但是在12.1和12.2之間切換,那還是很可能有的,因為其中的一個重要原因就是undo了。

ORA-17628: Oracle error 65035 returned by remote Oracle server

ORA-65035: unable to create pluggable database from我們看看錯誤分析:

$ oerr ora 65035

65035, 00000, "unable to create pluggable database from %s"

// *Cause:  An attempt was made to clone a pluggable database that did not have

//          local undo enabled.

// *Action: Enable local undo for the PDB and and retry the operation.

為了進一步驗證,我們到源端,檢視源容器資料庫的資訊  

SQL> show pdbs;

    CON_ID CON_NAME            OPEN MODE  RESTRICTED

---------- ------------------------------ ---------- ----------

         2 PDB$SEED                       READ ONLY  NO

         3 PDB2_PROXY                     MOUNTED

         5 TCYMOB0                        READ WRITE NO

         6 TCYMOB1                        READ WRITE NO

檢視database_properties,或者檢視dba_data_files都可以,源庫中的undo是共享模式的,接下來的問題就會變為如果把share undo改為local undo

修複share undo為local undo核心的指令就是alter database undo local,但是要實作這樣一個目标還是需要花些功夫的。

我們先啟動源資料庫到upgrade模式。

SQL> shutdown immediate

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> startup upgrade然後在root容器下執行undo的切換指令。

SQL> show con_name

CON_NAME

------------------------------

CDB$ROOT

SQL> alter database local undo on;

Database altered.然後啟動源容器資料庫即可。

SQL> startup

ORACLE instance started.再次檢視,對應的undo檔案已經是PDB級别,即local模式了。

CON_ID CON_NAME                  OPEN MODE  RESTRICTED

         5 TCYMOB0                        MOUNTED

         6 TCYMOB1                        MOUNTED

SQL> alter session set container=tcymob1;

Session altered.

SQL> select name from v$datafile where name like '%undo%';

NAME

---------------------------------------------------------------

/U01/app/oracle/oradata/new12c/NEW12C/datafile/o1_mf_undotbs1_dkbv7dro_.dbf再次嘗試就可以看到,問題引刃而解。

Oracle 12c遠端克隆PDB的問題及修複(r12筆記第78天)