发布网友 发布时间:2022-04-22 09:39
共2个回答
懂视网 时间:2022-05-02 07:25
ROOT又叫CDB$ROOT, 存储着ORACLE提供的元数据和Common User,元数据的一个例子是ORACLE提供的PL/SQL包的源代码,Common User 是指在每个容器中都存在的用户。
SEED组件
Seed又叫PDB$SEED,这个是你创建PDBS数据库的模板,你不能在Seed中添加或修改一个对象。一个CDB中有且只能有一个Seed. 这个感念,个人感觉非常类似SQL SERVER中的model数据库。
PDBS
CDB中可以有一个或多个PDBS,PDBS向后兼容,可以像以前在数据库中那样操作PDBS,这里指大多数常规操作。
这些组件中的每一个都可以被称为一个容器。因此,ROOT(根)是一个容器,Seed(种子)是一个容器,每个PDB是一个容器。每个容器在CDB中都有一个独一无二的的ID和名称。
注意:
①:一个CDB可以包含253个PDB(去掉一个是seed还能创建252个PDB)。
②:Root,seed以及每一个PDB的数据文件是的。
③:一个单实例的CDB有一个redo log;RAC环境中每个实例有一个redo log。
④:只有一组后台进程,它们被ROOT和所有PDB共享。
⑤:Root的全局数据库名就是CDB的全局数据库名;PDB的全局数据库名是由PDB name和DB_DOMAIN参数共同定义的。
⑥:一个CDB使用一个SPFILE或者一个PFILE,其中为ROOT设置的参数的值可以被PDB继承。另外,也可以使用ALTER SYSTEM语句来设置PDB的参数。对参数文件执行 操作时,必须使用common user并且使用AS SYSDBA, ASSYSOPER, AS SYSBACKUP来连接数据库。要创建CDB,必须要将初始化参数ENABLE_PLUGGABLE_DATABASE的 值设置为TRUE。
⑦:所有PDB的字符集都使用CDB的字符集。
可以设置所有PDB的时区与CDB相同,也可以单独为PDB设置时区。
块大小被应用于整个CDB。
一个CDB也仅有一个控制文件(可以多路复用)。
⑧:Root与每一个PDB都有自己的SYSAUX表空间和SYSTEM表空间。可以为root和每一个PDB设置默认表空间。而默认的临时表空间对于整个CDB只有一个,但是可以为 每个PDB创建临时表空间。
⑨:撤销表空间对于CDB是唯一的。在CDB中,初始化参数UNDO_MANAGEMENT必须被设置为AUTO。当前容器为PDB时,无法通过数据字典视图查看撤销表空间,只能通 过动态性能视图。
2、PDB简介
2.1、PDB新特点的优势
》可以把多个PDB集成进一个平台。
》可以快速提供一个新的PDB或一个已有PDB的克隆。
》通过拔插技术,可以快速把存在的数据库重新部署到一个新平台上。
》多个PDB数据库补丁或升级一次完成。
》通过把单个PDB拔插到较高版本的不同CDB,可以补丁或升级一个PDB。
》从同一个CDB中众多PDB中分离出某个PDB的内容。
》分离这些PDB应用管理员的责任。
2.2、PDB新特点的功能
》在一个CDB中,你可以拥有很多PDB。
》PDB和12.1之前版本的普通数据库是向后兼容的。
》PDB对应用是透明的——你不需要改变客户端代码或数据库对象。
》RAC中每个实例作为一个整体打开CDB(因此CDB和其中的PDB数据库版本都是相同的)。
》会话仅仅看到它自己连接的那个PDB。
》你可以从一个CDB拔出一个PDB,然后插入另一个CDB。
》你可以在同一个CDB或不同CDB间克隆PDB。
》资源管理器随着PDB的功能得以扩展。
》通过SQL语句实现了实体PDB的操作(创建,拔出,插入,克隆,清除,设置打开模式)。
》当连接到所谓的“根”(root)时,CDB管理员来执行这些操作。
》所有的PDB能被一次备份,但可以分别单独恢复。
2.3、PDB的详解
》每个PDB有自己的私有数据字典用于用户创建的数据库对象;另一方面,CDB作为一个整体也包含Oracle提供系统的数据字典,其中,每个数据字典定义自己的命名空间。换句话说,有全局数据字典(CDB级)和本地数据字典(PDB级)。
》有新的分开的数据字典架构,该架构允许一个PDB被快速从一个CDB拔出并插入一个不同的CDB。
》每个PDB只能看到oracle提供系统的只读定义。
》有全局数据库参数,也有本地数据库参数。PDB参数仅仅属于特定的PDB,并且拔出后,PDB参数也将保持不变。
》数据库用户可以是全局的(CDB)或本地的(PDB)。SYS和SYSTEM用户一开始就在两级DB中存在。如果你在CDB中创建了一个新用户,那么你在PDB中也能看到这个用户。在PDB中创建的用户只能在该PDB中使用。
》临时表空间可以是全局或本地的。
》Redo日志和Undo表空间都是全局的(CDB级)。
》Data Guard在CDB级作为一个整体发挥作用;RMAN调度的备份也作为一个整体在CDB级完成;任何时候,你可以只备份一个PDB。
》应用连接PDB时,不需做代码修改;系统管理员可以连接CDB;连接串中的服务名确定目标PDB。
》PDB允许更加清晰的声明定义一个应用;一个PDB对同一个CDB里的其他PDB一无所知;每个PDB是个密闭的容器。这保证了新层面DB的和安全。
3、日常操作:
3.1、查看当前的容器
SQL> show con_name;
CON_NAME
------------------------------
CDB$ROOT
------或:
SQL> select Sys_Context(‘Userenv‘, ‘Con_Name‘) "current Container" from dual;
current Container
--------------------------------------------------------------------------------
CDB$ROOT
3.2、查看CDB中的PDB信息:
SQL> select con_id, dbid, guid, name , open_mode from v$pdbs;
CON_ID DBID GUID NAME OPEN_MODE
---------- ---------- -------------------------------- ------------------------------ ----------
2 427872663 439BFCB2A2EE1BE7E055000000000001 PDB$SEED READ ONLY
3 11424478 439C5B1174C121B7E055000000000001 FEIGE READ WRITE ---feige就是一个PDB
3.3、创建一个新的PDB:
SQL> create pluggable database test_pdb admin user admin identified by admin;
SQL> alter pluggable database test_pdb open; ----将test_pdb 打开
SQL> select con_id,dbid,con_uid,guid,name,open_mode,create_scn,total_size,block_size from v$pdbs; ---查看pdb的状态
CON_ID DBID CON_UID GUID NAME OPEN_MODE CREATE_SCN TOTAL_SIZE BLOCK_SIZE
---------- ---------- ---------- -------------------------------- ------------------------------ ---------- ---------- ---------- ----------
2 427872663 427872663 439BFCB2A2EE1BE7E055000000000001 PDB$SEED READ ONLY 1594401 838860800 8192
3 11424478 11424478 439C5B1174C121B7E055000000000001 FEIGE READ WRITE 1753608 865075200 8192
4 29985099 29985099 53F376E8715628BCE055000000000001 TEST_PDB READ WRITE 1757024 859832320 8192
(“admin user”子句是必须的,在扩展格式,给新用户赋予了权限和角色,该用户仅在admin内可以创建新会话。在创建完可插拔数据库后,新的PDB处于MOUNTED模式)
3.4、克隆一个pdb
SQL> create pluggable database test2_pdb from test_pdb; ---test_pdb必须是打开的,才可以被打开
SQL> alter pluggable database test2_pdb open; ---然后打开这个pdb
3.5、切换到PDB,或切换到CDB
SQL> alter session set container=test_pdb; ---切换到pdb中
SQL> alter session set container=cdb$root; ---切换到CDB中
3.6、关闭一个pdb和关闭所有的pdb
SQL> alter pluggable database test_pdb close; ---关闭test_pdb这个pdb数据库
SQL> alter pluggable database all close; ---关闭数据库中所有的pdb
3.7、插拔一个pdb数据库
SQL> alter pluggable database feige close; ---先将feige这个pdb关闭
SQL> alter pluggable database feige unplug into ‘/opt/oracle/oradata/feige.xml‘;
(feige.xml:文件确定数据文件的名字和全路径等信息。这些信息在插入操作时会用到。注意:PDB还是其从中拔出的CDB的一部分,只是现在状态变为了拔出(UNPLUGGED)而已。)
SQL> drop pluggable database feige keep datafiles; ----在当前的容器中删除这个pdb
----如果在这个服务器上,有两个容器,则进入另一个容器,插入这个pdb
exec DBMS_PDB.Check_Plug_Compatibility(PDB_Descr_File=>‘/opt/oracle/oradata/feige.xml‘); --查看pdb和这个容器是否兼容,如果报错说明不兼容
----开始插入pdb,(using关键字后必须跟上PDB描述的绝对路径,即,先前拔出操作时产生的.XML文件)
create pluggable database feige using ‘/opt/oracle/oradata/feige.xml‘ move file_name_convert = (‘/cdb1/‘, ‘/cdb2/‘);
----最后打开这个pdb
alter pluggable database feige open;
3.8、连接pdb数据库:
连接pdb其实和连接正常的单实例数据库是一样的,连接注册的服务名即可,可以通过下面的方式:
①:使用监听注册的服务名连接,如下:
[oracle@localhost ~]$ lsnrctl status ---通过这个命令查找注册的服务名
[oracle@localhost ~]$ sqlplus system/oracle@192.168.2.100:1521/feige ---这样连接到PDB数据库
②:通过tnsnames配置文件连接,如下:
feige =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = feige)
)
)
[oracle@localhost admin]$ sqlplus system/oracle@feige ----使用这种方式连接
---至此,cdb与pdb就先总结到这里,一些基础的知识和操作都有介绍
本文出自 “笨小孩的dba之路” 博客,请务必保留此出处http://fengfeng688.blog.51cto.com/46812/1946278
Oracle12C新特性——cdb与pdb
标签:oracle12c pdb和cdb
热心网友 时间:2022-05-02 04:33
需要的
pdb测试:创建、开关、删除
-----------------------
ORACLE12C中提出来CDB和PDB的概念
他们可以分别理解为容器和插件(PDB插入在CDB中)
CDB的管理和传统数据库区别不大
--确认当前cdb
SQL> select name,cdb from v$database;
NAME CDB
--------- ---
ZARADB YES
--查询当前pdb基本信息
col pdb_name for a30
select pdb_id,pdb_name,dbid,status,creation_scn from dba_pdbs;
select con_id,dbid,NAME,OPEN_MODE from v$pdbs;
PDB_ID PDB_NAME DBID STATUS CREATION_SCN
---------- ------------------------------ ---------- ------------- ------------
3 PDB1 3337485269 NORMAL 1909544
2 PDB$SEED 4072348290 NORMAL 1720741
SQL>
CON_ID DBID NAME OPEN_MODE
---------- ---------- ------------------------------ ----------
2 4072348290 PDB$SEED READ ONLY
3 3337485269 PDB1 READ WRITE
--创建pdb
--1直接创建
CREATE PLUGGABLE DATABASE pdb2
ADMIN USER pdb2dba IDENTIFIED BY ansheng
STORAGE (MAXSIZE 2G MAX_SHARED_TEMP_SIZE 100M)
DEFAULT TABLESPACE tbs_pdb2 DATAFILE '/opt/oracle/oradata/ZARADB/datafile/pdb2_001.dbf' SIZE 25M AUTOEXTEND ON;
--2以现有pdb为模板创建
--现有pdb必须在read only模式下才能被创建,否则报错
--以pdb1为模板创建pdb2
drop pluggable database pdb2 including datafiles;
alter pluggable database pdb1 close;
alter pluggable database pdb1 open read only;
create pluggable database pdb2
from pdb1
file_name_convert =('/opt/oracle/oradata/ZARADB/E98BEB85B1A80C56E0439A02A8C05841/datafile/','/opt/oracle/oradata/ZARADB/datafile/pdb2');
--打开关闭pdb
alter pluggable database pdb2 close;
alter pluggable database all close;
alter pluggable database pdb2 close immediate;
alter pluggable database pdb2 open;
alter pluggable database all open;
--删除pdb
--与删除表空间类似,可以级联删除数据文件
drop pluggable database pdb2;
drop pluggable database pdb2 including datafiles;
--unplug
--unplug后pdb只能mount不能open
alter pluggable database pdb2 unplug into '/tmp/pdb2.xml';
--unplug后删除pdb,再使用xml文件加回pdb
drop pluggable database pdb2;
create pluggable database pdb2 using '/tmp/pdb2.xml' nocopy;