Oracle 12c 使用Non-CDB來建立PDB

eric0435發表於2017-09-12

可以移動Non-CDB來變為一個PDB。可以使用以下方式來完成這個任務:
.透過克隆Non-CDB來建立PDB。從Oracle 12.1.0.2開始,可以透過克隆Non-CDB來建立PDB。這種方法是建立PDB最簡單的一種方法,但它需要從Non-CDB中把檔案複製到新目錄中。

.使用dbms_pdb包來生成XML後設資料檔案,XML後設資料檔案用來描述Non-CDB的資料檔案可以用來將其附加到CDB中。這種方法比克隆Non-CDB要執行更多的步驟,但它能讓你不用移動Non-CDB的檔案來建立PDB。為了使用這種技術 ,Non-CDB必須是Oracle 12C的Non-CDB。如果當前的Non-CDB使用Oracle 12C之前的版本,那麼你必須將Non-CDB升級到Oracle 12C。

.使用Oracle Data Pump匯出/匯入
可以使用Data Pump從Non-CDB中匯出資料然後匯入到PDB中。當你執行匯入時,在使用者名稱後要指定PDB的連線識別符號。例如,如果PDB的連線識別符號為hrpdb,那麼在執行匯入進執行以下命令:
imdp username@hrpdb ....如果Non-CDB的版本為11.2.0.3或之後的版本,那麼可以使用完全傳輸匯出/匯入來移動資料。當將版本為11.2.0.3或之後的11g版本的Non-CDB遷移到Oracle 12C,那麼在匯出時需要將version引數設定為12.0.0.0.0或更高版本。如果Non-CDB的版本為11.2.0.3之前的版本,那麼可以使用傳輸表空間來移動資料或者執行完全資料庫匯出\匯入。

.使用goldengate複製
可以使用goldengate從Non-CDB中複製資料到PDB中。

對Non-CDB執行dbms_pdb包
可以使用dbms_pdb包來為Non-CDB生成XML後設資料檔案來將其附加到CDB中。使用dbms_pdb包移動Non-CDB為PDB的操作如下:
1.如果CDB不存在先建立CDB

2.確保Non-CDB處於事務一致狀態並將它置於只讀狀態

[oracle@jytest1 ~]$ export ORACLE_SID=orcl1
[oracle@jytest1 ~]$ sqlplus / as sysdba

SQL*Plus: Release 12.2.0.1.0 Production on Thu Sep 7 00:38:31 2017

Copyright (c) 1982, 2016, Oracle.  All rights reserved.

Connected to an idle instance.

SQL> startup mount
ORACLE instance started.

Total System Global Area 4294967296 bytes
Fixed Size                  8628936 bytes
Variable Size            2583692600 bytes
Database Buffers         1694498816 bytes
Redo Buffers                8146944 bytes
Database mounted.
SQL> alter database open read only;

Database altered.


[oracle@jytest2 ~]$ export ORACLE_SID=orcl2
[oracle@jytest2 ~]$ sqlplus / as sysdba

SQL*Plus: Release 12.2.0.1.0 Production on Thu Sep 7 00:38:31 2017

Copyright (c) 1982, 2016, Oracle.  All rights reserved.

Connected to an idle instance.

SQL> startup mount
ORACLE instance started.

Total System Global Area 4294967296 bytes
Fixed Size                  8628936 bytes
Variable Size            2583692600 bytes
Database Buffers         1694498816 bytes
Redo Buffers                8146944 bytes
Database mounted.
SQL> alter database open read only;

Database altered.

3.連線到Non-CDB,並執行dbms_pdb.describe過程來建立描述Non-CDB的XML後設資料檔案。執行該過程的使用者必須有sysdba許可權。

SQL> exec dbms_pdb.describe(pdb_descr_file=>'/cdb_pdb/orcl.xml');

PL/SQL procedure successfully completed.


[oracle@jytest2 cdb_pdb]$ ls -lrt
total 8
-rw-r--r-- 1 oracle asmadmin 6963 Sep  7 00:18 orcl.xml

4.執行dbms_pdb.check_plug_compatibility過程來判斷是否Non-CDB與目標CDB相容。當執行這個過程時設定以下引數:
-pdb_descr_file:設定XML後設資料檔案的完整路徑。
-pdb_name:指定新PDB名字,如果這個引數被忽略,那麼將使用XML後設資料檔案中的PDB名字。

SQL> set serveroutput on
  1  declare
  2  compatible constant varchar2(3) :=
  3  case dbms_pdb.check_plug_compatibility(
  4  pdb_descr_file => '/cdb_pdb/orcl.xml',
  5  pdb_name => 'orclpdb')
  6  when true then 'yes'
  7  else 'no'
  8  end;
  9  begin
 10  dbms_output.put_line(compatible);
 11  end;
 12  /
yes

PL/SQL procedure successfully completed.

如果輸出為yes,那麼Non-CDB是相容的,並且可以繼續下一步操作。如果輸出為no,那麼Non-CDB與目標CDB不相容,並且可以檢查pdb_plug_in_violations檢視來檢查為什麼不相容。所有的違反條目在繼續操作之前必須被修復。例如,任何版本或補丁不匹配可以透過執行升級或打補丁來解決。在修復這個違反條目後,再次執行dbms_pdb.check_plug_compatibility來確保Non-CDB與目標CDB相容。

5.關閉Non-CDB

[grid@jytest1 ~]$ srvctl stop database -db orcl

6.插入Non-CDB

SQL> create pluggable database orclpdb using '/cdb_pdb/orcl.xml'
  2  copy
  3  file_name_convert = ('+DATA/orcl/datafile/', '+data/jy/orclpdb/','+DATA/orcl/tempfile/','+data/jy/orclpdb/');

Pluggable database created.


SQL> select name,open_mode from v$pdbs;

NAME                                                                                                                             OPEN_MODE
-------------------------------------------------------------------------------------------------------------------------------- ----------
PDB$SEED                                                                                                                         READ ONLY
JYPDB                                                                                                                            READ WRITE
ORCLPDB                                                                                                                          MOUNTED

ASMCMD [+data/jy/orclpdb] > ls -lt
Type      Redund  Striped  Time             Sys  Name
DATAFILE  UNPROT  COARSE   SEP 07 00:00:00  N    usertbs01.dbf => +DATA/jy/4D913A1436E25EE2E053AB828A0AF7B8/DATAFILE/USERTBS.278.954031319
DATAFILE  UNPROT  COARSE   SEP 07 00:00:00  N    users01.dbf => +DATA/jy/4D913A1436E25EE2E053AB828A0AF7B8/DATAFILE/USERS.302.954031321
DATAFILE  UNPROT  COARSE   SEP 07 00:00:00  N    undotbs01.dbf => +DATA/jy/4D913A1436E25EE2E053AB828A0AF7B8/DATAFILE/UNDOTBS1.273.954031321
TEMPFILE  UNPROT  COARSE   SEP 07 00:00:00  N    temp01.dbf => +DATA/jy/4D913A1436E25EE2E053AB828A0AF7B8/TEMPFILE/TEMPTS1.315.954031465
DATAFILE  UNPROT  COARSE   SEP 07 00:00:00  N    system01.dbf => +DATA/jy/4D913A1436E25EE2E053AB828A0AF7B8/DATAFILE/SYSTEM.303.954031321
DATAFILE  UNPROT  COARSE   SEP 07 00:00:00  N    sysaux01.dbf => +DATA/jy/4D913A1436E25EE2E053AB828A0AF7B8/DATAFILE/SYSAUX.295.954031321

如果這裡沒有任何錯誤,那麼現在不開啟新PDB。

7.執行$ORACLE_HOME/rdbms/admin/noncdb_to_pdb.sql指令碼,這個指令碼必須在第一次開啟新PDB之前執行。如果PDB不是由Non-CDB建立而來,那麼就不需要執行這個指令碼。為了執行noncdb_to_pdb.sql指令碼,完成以下操作:
a.訪問PDB,當前使用者必須有sysdba許可權,並且許可權必須是公共或本地授予給PDB。最好使用as sysdba進行連線。

b.執行noncdb_to_pdb.sql指令碼:

SQL>@$ORACLE_HOME/rdbms/admin/noncdb_to_pdb.sql

8.以讀寫模式開啟新PDB

SQL> alter pluggable database orclpdb open read write;

Pluggable database altered.

SQL> select name,open_mode from v$pdbs;

NAME                                                                                                                             OPEN_MODE
-------------------------------------------------------------------------------------------------------------------------------- ----------
PDB$SEED                                                                                                                         READ ONLY
JYPDB                                                                                                                            READ WRITE
ORCLPDB                                                                                                                          READ WRITE

9.備份PDB
到此使用Non-CDB來建立PDB的操作就完成了。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26015009/viewspace-2144842/,如需轉載,請註明出處,否則將追究法律責任。

相關文章