oracle使用种子创建pdb,Oracle 12c 基于PDB种子数据库创建PDB

在Oracle中基于PDB种子复制数据库的方式,这个与SQLServert中直接创建数据库比较类似。在SQLServer中有一个model数据库,这个库的功能就和PDB种子数据库一样,就是一个模板数据库。从某种程度上来说,Oracle的多租户数据库几乎借鉴了80%的SQLserver的一些设计架构和理念。也即是通过从pdb数据库复制数据文件来达到快速建库的目的。下文是基于PDB种子建库的步骤及演示。

一、基于PDB$SEED创建PDB示意图及步骤

示意图

c41c724e5419c712c569fc9f18a6d69b.png

主要完成以下步骤(create pluggable database方式)

1、从PDB种子数据库复制数据文件

2、创建系统表空间system,sysaux

3、创建指向Oracle系统提供对象的元数据链接目录

4、创建公共用户,如sys,system等

5、创建本地系统管理员,并授予PDB_DBA角色

6、创建一个新的缺省服务

二、创建语法及简单示例

CREATE PLUGGABLE DATABASE { { pdb_name [ AS APPLICATION CONTAINER ] } | { AS SEED } } { create_pdb_from_seed | create_pdb_clone | create_pdb_from_xml } ;

简单创建示例

CREATE PLUGGABLE DATABASE PDB_NAME ADMIN USER PDBA IDENTIFIED BY PASS ROLES=(CONNECT) FILE_NAME_CONVERT=('/path/pdbseed','/path/pdb_name');

说明:

FILE_NAME_CONVERT:主要用于种子数据库文件与目标数据库文件位置转换

如上示例,FILE_NAME_CONVERT=('/path/pdbseed','/path/pdb_name') 表示新创建的PDB数据库数据文件位于/path/pdb_name

对于以下两种情形,可以不需要FILE_NAME_CONVERT子句

1、启用OMF功能(参数DB_CREATE_FILE_DEST)

DB_CREATE_FILE_DEST='/u01/app/oradata/cdb1/pdb1'

2、设定初始化参数PDB_FILE_NAME_CONVERT

PDB_FILE_NAME_CONVERT='/u01/app/oradata/cdb1/seed','/u01/app/oradata/cdb1/pdb'

对于不需要FILE_NAME_CONVERT子句,使用如下方式创建:

CREATE PLUGGABLE DATABASE PDB_NAME ADMIN USER PDBA IDENTIFIED BY PASS ROLES=(CONNECT);

三、基于PDB$SEED演示创建PDB

--当前的数据库版本及环境

SQL> SELECT name,

2 DECODE (cdb,

3 'YES', 'Multitenant Option enabled',

4 'Regular 12c Database: ')

5 "Multitenant Option",

6 open_mode,

7 con_id

8 FROM v$database;

NAME Multitenant Option OPEN_MODE CON_ID

------------------------------ -------------------------- -------------------- ----------

CDB1 Multitenant Option enabled READ WRITE 0

SQL> select 'Leshami' Author,'http://blog.csdn.net/leshami' Blog,

2 '645746311' QQ from dual;

AUTHOR BLOG QQ

------- ---------------------------- ---------

Leshami http://blog.csdn.net/leshami 645746311

--查看当前数据库pdb容器,如下一个种子数据库,一个cdb1pdb1数据库

SQL> select con_id,name,open_mode from v$pdbs;

CON_ID NAME OPEN_MODE

---------- ------------------------------ ----------

2 PDB$SEED READ ONLY

3 CDB1PDB1 READ WRITE

--创建pdb数据库

SQL> create pluggable database cdb1pdb2

2 admin user pdb2admin identified by pass roles=(connect)

3 file_name_convert=('/app/oracle/ora12c/oradata/cdb1/pdbseed',

4 '/app/oracle/ora12c/oradata/cdb1/cdb1pdb2');

Pluggable database created.

--查看创建后的状态,刚刚创建的pdb status列为NEW

SQL> select pdb_id,pdb_name,status,creation_time from cdb_pdbs where pdb_name='CDB1PDB2';

PDB_ID PDB_NAME STATUS CREATION_

---------- ------------------------------ ---------- ---------

4 CDB1PDB2 NEW 13-JUN-17

--如下查询,当前的数据库处于mount状态

SQL> select con_id,name,open_mode from v$pdbs where name='CDB1PDB2';

CON_ID NAME OPEN_MODE

---------- ------------------------------ ----------

4 CDB1PDB2 MOUNTED

--将pdb数据库切换到open状态

SQL> alter pluggable database cdb1pdb2 open;

Pluggable database altered.

--使用公共用户sys连接到刚刚创建的pdb数据库

SQL> conn sys/pass@192.168.1.244:1521/cdb1pdb2 as sysdba

Connected.

--使用pdb本地管理员账户连接到pdb数据库

SQL> conn pdb2admin/pass@192.168.1.244:1521/cdb1pdb2

Connected.

SQL> show user;

USER is "PDB2ADMIN"

--查看当前用户的角色

SQL> select * from user_role_privs;

USERNAME GRANTED_ROLE ADM DEL DEF OS_ COM INH

---------------- ------------------ --- --- --- --- --- ---

PDB2ADMIN PDB_DBA YES NO YES NO NO NO

--查看当前用户的权限

SQL> select * from session_privs;

PRIVILEGE

----------------------------------------

CREATE SESSION

CREATE PLUGGABLE DATABASE

SET CONTAINER

--查看自动添加的服务名

SQL> ho lsnrctl status |grep cdb1pdb2 -B1

Instance "cdb1", status READY, has 1 handler(s) for this service...

Service "cdb1pdb2" has 1 instance(s).

a0f609b288c7de88131b6f6ba37c81b3.png

1493001734_6055.jpg

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值