1.多租户(multi-tenant)介绍
多租户是Oracle 12c版本中推出的一个新特性,按官方的说法是基于云的理念,我们不去讨论云的概念。简单来讲,多租户架构就是数据库中一个容器database(CDB)中包含多个可插拔DB(Pluggable Database)。简单来说,就是在一个大的容器中,包含有多个数据库。
2.Oracle中的CDB和PDB
一个CDB中含有3种类型的容器:
root容器,包含元数据的信息
seed容器,主要是创建一个新的pdb时,提供一个初始化的模版
pdb,即可插拔的数据库。包含有用户数据,用户的数据都建立在这些数据库中,对于用户来说,他们并不知道访问的是一个pdb还是一个独立的instance数据库
3.CDB和PDB中的日常维护管理命令
1)查看数据库是否为cdb
简单的方法就是查询v$datbase.cdb。CDB是Oracle 12c中新提出的特性,在12c 版本v$database视图中新增加了相应的cdb的字段。
SQL> select cdb from v$database;
CDB
---
YES
2)创建PDB数据库
创建PDB可以通过以下几种方式:
a.通过seed新建一个PDB数据库
CREATE PLUGGABLE DATABASE salespdb ADMIN USER salesadm IDENTIFIED BY password
STORAGE (MAXSIZE 2G MAX_SHARED_TEMP_SIZE 100M)
DEFAULT TABLESPACE sales
DATAFILE '/disk1/oracle/dbs/salespdb/sales01.dbf' SIZE 250M AUTOEXTEND ON
PATH_PREFIX = '/disk1/oracle/dbs/salespdb/'
FILE_NAME_CONVERT = ('/disk1/oracle/dbs/pdbseed/', '/disk1/oracle/dbs/salespdb/');
也可以用下面的语句来创建:
CREATE PLUGGABLE DATABASE salespdb ADMIN USER salesadm IDENTIFIED BY password FILE_NAME_CONVERT = ('/disk1/oracle/dbs/pdbseed/', '/disk1/oracle/dbs/salespdb/');
b.通过克隆一个现有的PDB数据库或非CDB数据库(non-CDB)来创建一个新的PDB
通过一个现有的pdb1创建新的pdb2
CREATE PLUGGABLE DATABASE pdb2 FROM pdb1
FILE_NAME_CONVERT = ('/disk1/oracle/pdb1/', '/disk2/oracle/pdb2/‘);
通过non-cdb创建pdb
(1)首先需要将non-cdb置为只读
(2)创建连接指向non-cdb的dblink
(3)创建pdb
CREATE PLUGGABLE DATABASE pdb2 FROM mydb@mydb_link FILE_NAME_CONVERT = ('/disk1/oracle/non-cdb1/', '/disk2/oracle/pdb2/‘);
CREATE PLUGGABLE DATABASE pdb2 FROM NON$CDB@mydb_link FILE_NAME_CONVERT = ('/disk1/oracle/non-cdb1/', '/disk2/oracle/pdb2/‘);
上面这两个语句是等效的。
(4)在pdb上运行@$ORACLE_HOME/rdbms/admin/noncdb_to_pdb.sql脚本
c.使用XML元数据描述文件将数据库插入到CDB中
生成XML描述文件
exec dbms_pdb.DESCRIBE('/home/oracle/pdbprod3_describe.xml','PDBPROD3');
DROP PDB
drop pluggable database PDBPROD3 keep datafiles;
DECLARE
compatible CONSTANT VARCHAR2(3) :=
CASE DBMS_PDB.CHECK_PLUG_COMPATIBILITY(
pdb_descr_file => '/home/oracle/pdbprod3_describe.xml',
pdb_name => 'PDBPROD3')
WHEN TRUE THEN 'YES'
ELSE 'NO'
END;
BEGIN
DBMS_OUTPUT.PUT_LINE(compatible);
END;
/
将PDBPROD3中的数据文件目录MOVE为PDBTEST01(数据文件中存在PDBPROD3也改为PDBTEST01);
将数据库改名插入到CDB中,使用NOCOPY的方式:
CREATE PLUGGABLE DATABASE PDBTEST01 USING '/home/oracle/pdbprod3_describe_new.xml'
SOURCE_FILE_NAME_CONVERT = ('PDBPROD3', 'PDBTEST01')
NOCOPY;
d.使用DBMS_PDB方式
将Non-CDB迁移到PDB数据库有几种方式
(1).通过克隆的方式进行迁移,即第二种方式中使用dblink方式进行创建,这种方式需要PDB和Non-CDB数据库的版本都要高于12.1.0.2,如果没有12.1.0.2,则需要将数据库升级到12.1.0.2之后的版本
(2).通过DBMS_PDB的方式生成XML元数据文件进行迁移。这种方式要求Non-CDB数据库的版本高于12c。该节我们主要介绍这种方法
(3).使用数据泵EXPDP/IMPDP的方式。这种方式要求Non-CDB数据库的版本高于11.2.0.3,在使用该方式的时候,expdp数据时,需要添加VERSION参数version=12。如果Non-CDB数据库版本低于11.2.0.3,则可以使用传输表空间的方式进行迁移
(4)使用GoldenGate的方式进行迁移
我们主要看一下使用DBMS_PDB的方式将Non-CDB转化为PDB对方式:
(1)将Non-CDB数据库置为只读
(2)生成XML描述文件。exec dbms_pdb.describe('/home/oracle/prod4_describe.xml');
(3)关闭Non-CDB数据库
(4)在CDB数据库中创建PDB。
CREATE PLUGGABLE DATABASE ncdb USING '/home/oracle/prod4_describe.xml' COPY FILE_NAME_CONVERT = ('/u01/app/oracle/oradata/PROD4','/u01/app/oracle/oradata/PRODCDB/ncdb');
创建完成之后不要立即打开PDB,还需要执行noncdb_to_pdb.sql脚本
(5)执行@$ORACLE_HOME/rdbms/admin/noncdb_to_pdb.sql脚本
alter session set container=NCDB;
@$ORACLE_HOME/rdbms/admin/noncdb_to_pdb.sql
(6) 确认没有问题后,打开数据库
alter pluggable database NCDB open;
3)删除PDB
不保留数据文件:
drop pluggable database pdb_name including datafiles;
保留数据文件:首先将数据库unplug,然后drop keep datafiles
alter pluggable database PDBPROD2 unplug into '/home/oracle/pdbprod2_describe.xml';
drop pluggable database pdb_name keep datafiles;
4)查看PDB
show pdbs
或查看dba_pdbs视图
5)切换pdb
alter session set container=pdb_name; —切换到某个PDB
alter session set container=cdb$root; —切换到cdb root
如果需要创建全局用户,角色时,在cdb root下执行创建语句
admin user 这个用户是做什么用的?可以删除,赋予的权限是pdb_dba
多租户是Oracle 12c版本中推出的一个新特性,按官方的说法是基于云的理念,我们不去讨论云的概念。简单来讲,多租户架构就是数据库中一个容器database(CDB)中包含多个可插拔DB(Pluggable Database)。简单来说,就是在一个大的容器中,包含有多个数据库。
2.Oracle中的CDB和PDB
一个CDB中含有3种类型的容器:
root容器,包含元数据的信息
seed容器,主要是创建一个新的pdb时,提供一个初始化的模版
pdb,即可插拔的数据库。包含有用户数据,用户的数据都建立在这些数据库中,对于用户来说,他们并不知道访问的是一个pdb还是一个独立的instance数据库
3.CDB和PDB中的日常维护管理命令
1)查看数据库是否为cdb
简单的方法就是查询v$datbase.cdb。CDB是Oracle 12c中新提出的特性,在12c 版本v$database视图中新增加了相应的cdb的字段。
SQL> select cdb from v$database;
CDB
---
YES
2)创建PDB数据库
创建PDB可以通过以下几种方式:
a.通过seed新建一个PDB数据库
CREATE PLUGGABLE DATABASE salespdb ADMIN USER salesadm IDENTIFIED BY password
STORAGE (MAXSIZE 2G MAX_SHARED_TEMP_SIZE 100M)
DEFAULT TABLESPACE sales
DATAFILE '/disk1/oracle/dbs/salespdb/sales01.dbf' SIZE 250M AUTOEXTEND ON
PATH_PREFIX = '/disk1/oracle/dbs/salespdb/'
FILE_NAME_CONVERT = ('/disk1/oracle/dbs/pdbseed/', '/disk1/oracle/dbs/salespdb/');
也可以用下面的语句来创建:
CREATE PLUGGABLE DATABASE salespdb ADMIN USER salesadm IDENTIFIED BY password FILE_NAME_CONVERT = ('/disk1/oracle/dbs/pdbseed/', '/disk1/oracle/dbs/salespdb/');
b.通过克隆一个现有的PDB数据库或非CDB数据库(non-CDB)来创建一个新的PDB
通过一个现有的pdb1创建新的pdb2
CREATE PLUGGABLE DATABASE pdb2 FROM pdb1
FILE_NAME_CONVERT = ('/disk1/oracle/pdb1/', '/disk2/oracle/pdb2/‘);
通过non-cdb创建pdb
(1)首先需要将non-cdb置为只读
(2)创建连接指向non-cdb的dblink
(3)创建pdb
CREATE PLUGGABLE DATABASE pdb2 FROM mydb@mydb_link FILE_NAME_CONVERT = ('/disk1/oracle/non-cdb1/', '/disk2/oracle/pdb2/‘);
CREATE PLUGGABLE DATABASE pdb2 FROM NON$CDB@mydb_link FILE_NAME_CONVERT = ('/disk1/oracle/non-cdb1/', '/disk2/oracle/pdb2/‘);
上面这两个语句是等效的。
(4)在pdb上运行@$ORACLE_HOME/rdbms/admin/noncdb_to_pdb.sql脚本
c.使用XML元数据描述文件将数据库插入到CDB中
生成XML描述文件
exec dbms_pdb.DESCRIBE('/home/oracle/pdbprod3_describe.xml','PDBPROD3');
DROP PDB
drop pluggable database PDBPROD3 keep datafiles;
DECLARE
compatible CONSTANT VARCHAR2(3) :=
CASE DBMS_PDB.CHECK_PLUG_COMPATIBILITY(
pdb_descr_file => '/home/oracle/pdbprod3_describe.xml',
pdb_name => 'PDBPROD3')
WHEN TRUE THEN 'YES'
ELSE 'NO'
END;
BEGIN
DBMS_OUTPUT.PUT_LINE(compatible);
END;
/
将PDBPROD3中的数据文件目录MOVE为PDBTEST01(数据文件中存在PDBPROD3也改为PDBTEST01);
将数据库改名插入到CDB中,使用NOCOPY的方式:
CREATE PLUGGABLE DATABASE PDBTEST01 USING '/home/oracle/pdbprod3_describe_new.xml'
SOURCE_FILE_NAME_CONVERT = ('PDBPROD3', 'PDBTEST01')
NOCOPY;
d.使用DBMS_PDB方式
将Non-CDB迁移到PDB数据库有几种方式
(1).通过克隆的方式进行迁移,即第二种方式中使用dblink方式进行创建,这种方式需要PDB和Non-CDB数据库的版本都要高于12.1.0.2,如果没有12.1.0.2,则需要将数据库升级到12.1.0.2之后的版本
(2).通过DBMS_PDB的方式生成XML元数据文件进行迁移。这种方式要求Non-CDB数据库的版本高于12c。该节我们主要介绍这种方法
(3).使用数据泵EXPDP/IMPDP的方式。这种方式要求Non-CDB数据库的版本高于11.2.0.3,在使用该方式的时候,expdp数据时,需要添加VERSION参数version=12。如果Non-CDB数据库版本低于11.2.0.3,则可以使用传输表空间的方式进行迁移
(4)使用GoldenGate的方式进行迁移
我们主要看一下使用DBMS_PDB的方式将Non-CDB转化为PDB对方式:
(1)将Non-CDB数据库置为只读
(2)生成XML描述文件。exec dbms_pdb.describe('/home/oracle/prod4_describe.xml');
(3)关闭Non-CDB数据库
(4)在CDB数据库中创建PDB。
CREATE PLUGGABLE DATABASE ncdb USING '/home/oracle/prod4_describe.xml' COPY FILE_NAME_CONVERT = ('/u01/app/oracle/oradata/PROD4','/u01/app/oracle/oradata/PRODCDB/ncdb');
创建完成之后不要立即打开PDB,还需要执行noncdb_to_pdb.sql脚本
(5)执行@$ORACLE_HOME/rdbms/admin/noncdb_to_pdb.sql脚本
alter session set container=NCDB;
@$ORACLE_HOME/rdbms/admin/noncdb_to_pdb.sql
(6) 确认没有问题后,打开数据库
alter pluggable database NCDB open;
3)删除PDB
不保留数据文件:
drop pluggable database pdb_name including datafiles;
保留数据文件:首先将数据库unplug,然后drop keep datafiles
alter pluggable database PDBPROD2 unplug into '/home/oracle/pdbprod2_describe.xml';
drop pluggable database pdb_name keep datafiles;
4)查看PDB
show pdbs
或查看dba_pdbs视图
5)切换pdb
alter session set container=pdb_name; —切换到某个PDB
alter session set container=cdb$root; —切换到cdb root
如果需要创建全局用户,角色时,在cdb root下执行创建语句
admin user 这个用户是做什么用的?可以删除,赋予的权限是pdb_dba
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/23850820/viewspace-2079301/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/23850820/viewspace-2079301/