Oracle数据库管理每周一例(12.2,18c,19c) 2020-06-01
作者说明:
Heaven Yin(胖头鱼),网思科技股份有限公司Oracle高级工程师,拥有OCP 11g/12c,OCM 11g/12c。现在于四川移动网管中心担任驻场DBA,负责云数据库资源池,Exadata等数据库管理与维护。
第一期 容器数据库概览
1.容器数据库概念
从Oracle Database 12cR1开始,Oracle在数据库层面引入了容器库(container database)的概念,允许一个容器数据库(CDB)承载多个可插拔数据库(PDB)。其中CDB的全称为Container Database(CDB$ROOT),PDB的全称为Pluggable Database。实际数据存放在PDB之中;每个PDB相互独立,相当于一套单数的数据库,拥有自己的诸如system,sysaux,undo(12.2开始)等和数据表空间。
从12.2开始引入了应用容器(Application Container)的概念,类似于在CDB中再嵌套一个类似于CDB$ROOT的应用根容器(Application Root),在这个应用根容器下在承载多个应用PDB(Application PDB)。
注:由于应用容器使用相对较少,本文不做详细讲解。
2.创建可插拔数据库
·在CDB中有一个比较特殊的PDB——种子库(Seed,PDB$SEED),这个PDB始终为READ ONLY状态,作为模板用于创建一个新的空PDB。开启OMF的状态下PDB简单创建语句如下:
CREATE PLUGGABLE DATABASE pdb_name
ADMIN USER admin_user_name IDENTIFIED BY password
DEFAULT TABLESPACE tablespace_name DATAFILE SIZE xx AUTOEXTEND ON NEXT xx MAXSIZE UNLIMITED
[STORAGE (MAXSIZE XX)]
/
·当然我们也可以通过现有PDB的方式创建新的PDB,开启OMF的状态下PDB简单k克隆语句如下:
ALTER PLUGGABLE DATABASE source_pdb CLOSE;
ALTER PLUGGABLE DATABASE souece_pdb OPEN READ ONLY;
CREATE PLUGGABLE DATABASE target_pdb FROM source_pdb;
ALTER PLUGGABLE DATABASE source_pdb CLOSE;
ALTER PLUGGABLE DATABASE source_pdb OPEN;
ALTER PLUGGABLE DATABASE target_pdb OPEN;
·也可以通过DBLINK从远程容器数据库克隆PDB和non-CDB,语句略。
·还可以通过Unplug和Plug的方式创建PDB
ALTER PLUGGABLE DATABASE source_pdb CLOSE IMMEDIATE;
ALTER PLUGGABLE DATABASE source_pdb UNPLUG INTO ‘/tmp/pdb.xml’;
[DROP PLUGGABLE DATABASE source_pdb KEEP DATAFILES;]
set serveroutput on
DECLARE
l_result BOOLEAN;
BEGIN
l_result := DBMS_PDB.check_plug_compatibility(pdb_descr_file => '/tmp/pdb.xml',pdb_name => 'target_pdb');
IF l_result THEN
DBMS_OUTPUT.PUT_LINE('Yes');
ELSE
DBMS_OUTPUT.PUT_LINE('No');
END IF;
END;
/
CREATE PLUGGABLE DATABASE target_pdb USING ‘/tmp/pdb.xml’ NOCOPY;
ALTER PLUGGABLE DATABASE target_pdb OPEN;
3.可插拔数据库状态
容器数据库中,PDB拥有以下几个状态:
状态 | 说明 |
---|---|
MOUNT | PDB closed状态 |
READ WRITE | PDB open读写状态 |
READ ONLY | PDB open只读状态 |
默认情况下,当CDB重启后,PDB会处于MOUNT状态,如果需要PDB随CDB启动open,可以在CDB创建触发器,也可以在PDB在OPEN状态下,使用ALTER PLUGGABLE DATABASE xx SAVE STATE;(保存PDB当前状态,CDB重启后恢复到该状态)。
下期预告:
容器数据库的用户管理。