天天看點

Oracle 12c、18c、19c CDB、PDB常用指令

一、CDB、PDB常用管理指令

  • 檢視PDB資訊(在CDB模式下)
show pdbs  --檢視所有pdb
select name,open_mode from v$pdbs為PDB資訊視圖
select con_id, dbid, guid, name , open_mode from v$pdbs;      
  • 切換容器
alter session set container=orcl1  --切換到PDBorcl1容器
alter session set container=CDB$ROOT    --切換到CDB容器      
  • 檢視目前屬于哪個容器
select sys_context('USERENV','CON_NAME') from dual; --使用sys_context檢視屬于哪個容器
show con_name  --用show檢視目前屬于哪個容器      
  • 啟動PDB
alter pluggable database orcl1 open;    --開啟指定PDB
alter pluggable database all open;  --開啟所有PDB
alter session set container=orcl1;  --切換到PDB進去開啟資料庫
startup      
  • 關閉PDB
alter pluggable database orcl1 close;      --關閉指定的PDB
alter pluggable database all close;    --關閉所有PDB
alter session set container=orcl1;  --切換到PDB進去關閉資料庫
shutdown immediate      
  • 建立或克隆前要指定檔案映射的位置(需要CBD下sysdba權限)
alter system set db_create_file_dest='/u01/app/oracle/oradata/orcl/orcl2';      
  • 建立一個新的PDB:(需要CBD下sysdba權限)
create pluggable database test admin user admin identified by admin;    
alter pluggable database test_pdb open;    --将test_pdb 打開      
  • 克隆PDB(需要CBD下sysdba權限)
create pluggable database orcl2 from orcl1;  --test_pdb必須是打開的,才可以被打開
alter pluggable database orcl2 open;  --然後打開這個pdb      
  • 删除PDB(需要CBD下sysdba權限)
alter pluggable database  orcl2 close;  --關閉之後才能删除
drop pluggable database orcl2 including datafiles;  --删除PDB orcl2      
  • 設定CDB啟動PDB自動啟動(在這裡使用的是觸發器)
CREATE OR REPLACE TRIGGER open_pdbs
AFTER STARTUP ON DATABASE
BEGIN
EXECUTE IMMEDIATE 'ALTER PLUGGABLE DATABASE ALL OPEN';
END open_pdbs;
/      

二、Oracle 從PDBSEED建立PDB

  • 要确認PDBSEED的檔案位置
select name from v$datafile;      
  • 建立一個目錄,這個目錄是新建立的PDB的名字
mkdir -p /u01/app/oracle/oradata/ora12cdb/ora_pdb3      
  • 從PDBSEED建立PDB
create pluggable database ora_pdb3 admin user hu identified by hu roles=(connect) default tablespace users datafile '/u01/app/oracle/oradata/ora12cdb/ora_pdb3/users01.dbf' size 20M autoextend on file_name_convert=('/u01/app/oracle/oradata/ora12cdb/pdbseed/','/u01/app/oracle/oradata/ora12cdb/ora_pdb3/');      
  • 檢視PDB
show pdbs;      
  • 打開PDB
alter pluggable database ora_pdb3 open;      
  • 關閉PDB
alter pluggable database ora_pdb3 colse immediate;
show pdbs;      

三、通過已有PDB在本地克隆出新的PDB

實驗步驟:

  • 檢視PDB
show pdbs      
  • 關閉需要被克隆的PDB,并打開為隻讀狀态
alter pluggable database ora_pdb1 close immediate;
alter pluggable database ora_pdb1 open read only;      
  • 建立一個目錄,這個目錄是新建立的PDB的名字
mkdir -p /u01/app/oracle/oradata/ora12cdb/ora_pdb4      
  • 克隆PDB
create pluggable database ora_pdb4 from ora_pdb1 file_name_convert=('/u01/app/oracle/oradata/ora12cdb/ora_pdb1/','/u01/app/oracle/oradata/ora12cdb/ora_pdb4/');
show pdbs      
  • 打開PDB
alter pluggable database ora_pdb4 open;
show pdbs      

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

現有一個非CDB的資料庫ora12cdb,計劃将其作為PDB,裝入CDB中。

  • 進入ORCL,将其設定為隻讀模式
startup mount
alter database open read only;
select OPEN_MODE from v$database;      
  • 連接配接到Non-CDB,并執行dbms_pdb.describe過程來建立描述Non-CDB的XML中繼資料檔案。執行該過程的使用者必須有sysdba權限。
BEGIN
DBMS_PDB.DESCRIBE
( pdb_descr_file => '/home/oracle/ncdb.xml');
END;
/      
  • 關閉Non-CDB
shutdown immediate
srvctl stop database -db ora12cdb(叢集)      
  • 插入Non-CDB
CREATE PLUGGABLE DATABASE old12c_pdb USING '/home/oracle/ncdb.xml' source_file_name_convert = ('/u01/app/oracle/oradata/ora12cdb/', '/u01/app/oracle/oradata/ora12cdb/old12c_pdb/') nocopy tempfile reuse;
select name,open_mode from v$pdbs;      
  • 執行$ORACLE_HOME/rdbms/admin/noncdb_to_pdb.sql腳本

這個腳本必須在第一次打開新PDB之前執行。如果PDB不是由Non-CDB建立而來,那麼就不需要執行這個腳本。為了執行noncdb_to_pdb.sql腳本,完成以下操作:

a.通路PDB,目前使用者必須有sysdba權限,并且權限必須是公共或本地授予給PDB。最好使用as sysdba進行連接配接。

alter session set container=old12c_pdb;      

b.執行noncdb_to_pdb.sql腳本:

SQL>@$ORACLE_HOME/rdbms/admin/noncdb_to_pdb.sql      
  • 以讀寫模式打開新PDB
alter pluggable database old12c_pdb open read write; -- 預設啟動就是read/write模式 
select name,open_mode from v$pdbs;      
  • 備份PDB