首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

12c pdb的几种创建方法介绍

鉴于12c 那么好玩,打算玩一下12c 的PDB各种克隆,完全按照官方文档操作。

创建PDB 有几种不同的方式,

1,使用种子

2,从其他PDB中以及一般数据库中(也就是非容器数据库)克隆

3,从其他容器中重分配

4,加载或者卸载pdb

5,创建代理PDB

6,从非容器数据库中创建。

注:图为官方文档介绍。

注:实际上创建程序容器(application container)只需要在创建pdb 的语句中加一句as application container。for example:create pluggable database sales as application container from seed;

语法很长,我尽量一一介绍。

总语法:

CREATE PLUGGABLE DATABASE 支持的参数:

1,storage limits : 使用 storage 限定pdb的能使用多少存储。

file location of the new pdbs: 为新pdb指定文件存储位置。

restrictions on pdb file locations: 使用 path_prefix 限定该pdb 所有文件都在该路径,包括oracle xml 目录,pfile 路径。已经导出oracle wallet 的路径。

source file location when plugging an unplugged pdb: 使用 create pluggable database ....using 以加载或者卸载pdb。

renaming a service: 使用service_name_convert 为新pdb 修改服务名。

temp file reuse: 使用tempfile reuse 当临时文件存在在目录的时候,重用临时文件。

default tablespace:使用default tablespace 为pdb 指定默认使用表空间。

pdb tablespace logging: logging 表示打开日志记录,nologging 表示不记录(一般意义上的不记录),filesystem_like_logging 只对securefiles lob segments有效。

pdb inclusion in standby cdbs: 使用standbys指定新的pdb 是否在备用cdb也创建中。

excluding data when cloning a pdb:使用 no data 选项表示只克隆数据模型定义不复制数据。

parallelize pdb creation: 使用parallel 选项表示在pdb 创建过程中使用多少个并行。

pdb refresh: 使用 refresh mode 选项表示pdb 从克隆中创建后可以进行刷新,每次刷新都会从源pdb中传播更改到新pdb。

application container and application seed :使用as application container 可以创建新的应用容器和应用容器种子。

pdb listener host name and port number:只用在代理pdb(proxy pdb)将引用pdb时使用port 选项指定端口,host 选择指定pdbs 的名字才重要。

OK! here we go!

1,从种子中创建pdb

如果从种子中创建pdb,则会拷贝种子pdb的数据文件到pdb中,从root CDB或者application container中。也就是说在application container 下使用种子pdb 创建pdb 则会复制application下的种子pdb数据文件。

1) 首先确认是在cdb 中

SQL> show con_name

CON_NAME

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

CDB$ROOT

或者

你是在application container 中。

如果不加任何其他参数,那么最简单的创建语句为:

create pluggable database pdb_f_seed admin user flyme identified by oracle role=(pdb_dba);

注:从种子数据库中创建pdb时候,必须有admin user user_name identified by password 语句。此处同时建议授权pdb_role。也就是 admin user flyme identified by oracle role=(pdb_dba)。

创建pdb后,pdb的状态应该为mount 状态。可通过v$pdbs 查看open_mode,通过cdb_pdbs和dba_pdbs 视图查看status。

SQL> select CON_ID,NAME,OPEN_MODE from v$pdbs;

CON_ID NAME OPEN_MODE

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

5 PDB_F_SEED READ WRITE

pdb 支持以下几种open_mode

open read write

>alter pluggable database open read write [restricted] [force] --read write 为默认选项,restricted 为限制模式,只有授予了restriceted session 权限的用户才能连接。force 则会强制关闭然后启动,或者从read only 模式切换为read write.(实际操作,感觉在read write 模式下 force 很快,都怀疑他有没有force)

open read only

>alter pluggable database open read only [restricted] [force] --以只读模式打开pdb

open migrate

>alter pluggable database open upgrade [restricted] --以迁移模式打开pdb,

mounted

>alter pluggable database close [immediate|abort] --如果没有immediate或者abort 则以normal 模式关闭数据库。对于abort 的介质恢复,有点晕。需要shutdown abort 集群则需要最后一个实例shutdown abort

注:当使用alter pluggable database 支持列出pdb 名字,以进行批量操作,也支持 all, all except,同时支持services =,instances= 选项按需操作。在RAC中还支持norelocate,relocate to ,relocate 选项,可使pdb在其他实例打开。

pdb的备份

> 用公用账号以sysbackup 或者sysdba 身份连接到root,使用backup pluggable database pdb_name; 其实这里一般rman target /

>用拥有sysdba的本地用户连接到pdb,使用backup database;进行备份。此处略坑爹,需要解析tnsnames.ora 以及必须授予pdb 本地用户sysdba 权限。rman target user_name/password@pdb_f_seed

2,从pdb或者非pdb 中克隆pdb

>可从本地pdb 中克隆

当cdb 为archivelog模式 以及local undo 模式,本地源pdb可以在操作期间以read/write模式打开,也就是支持热克隆。如果cdb 不是local undo 模式或者archivelog模式,那么源pdb需要以open read only模式打开。源pdb不能在mount 模式下。

如果创建为application container,那么在application container中的pdb必须和application container保持一样的字符集和国家字符集。application container 可以和CDB不一样的字符集和国家字符集。

example:

SQL> alter pluggable database PDB_F_SEED open;

插接式数据库已变更。

SQL> create pluggable database pdb_f_pdb_1 from pdb_f_seed;

插接式数据库已创建。

SQL> create pluggable database app_con_f_pdb as application container from pdb_f_seed;

插接式数据库已创建。

>从远程pdb以及非cdb中克隆。

当源pdb的cdb在远程端时,必须使用dblink 克隆pdb,dblink必须创建在新pdb的cdb中,dblink必须连接到远程cdb 的root下,或者远程源pdb中。主机平台需要有相同的字节顺序,目标数据库安装选项大于等于源pdb数据库。如果目标CDB 的字符集不是AL32UTF8 ,那么目标和源CDB必须具有兼容的字符集和国家字符集。如果目标为AL32UTF8,那么随便哪个字符集都可以。源pdb或者non-cdb数据库版本必须大于12.1.0.2。

当源为非CDB时,使用dblink 连接到该数据库即可。

example 1 cloning by remote pdb:

SQL> create database link pdb_link connect to c##pdb identified by oracle using '(DESCRIPTION=(CONNECT_DATA=(SERVICE_NAME=pdb_f_seed))(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.56.124)(PORT=1521)))';

数据库链接已创建。

SQL> create pluggable database pdb_f_rmpdb from pdb_f_seed@pdb_link;

插接式数据库已创建。

example 2 cloning by non-cdb:

SQL> create database link nonpdb_link connect to flyme identified by oracle using '(DESCRIPTION=(CONNECT_DATA=(SERVICE_NAME=single))(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.56.101)(PORT=1521)))';

数据库链接已创建。

use

SQL> create pluggable database pdb_f_rmnoncdb from single@nonpdb_link;

插接式数据库已创建。

注:当为non-cdb时,可以用non$cdb代替数据库名。

SQL> create pluggable database pdb_f_rmnoncdb2 from non$cdb@nonpdb_link;

插接式数据库已创建。

>克隆可刷新pdb

可以使用refresh mode 选项配置可刷新pdb, 但是源pdb和克隆pdb 必须在非同一个CDB下。源pdb 必须archivelog mode 和local undo mode。可刷新克隆pdb必须运行在readonly 模式下或者关闭。可以使用alter pluggable database xx refresh mode none 使可刷新pdb 转为普通pdb。该过程不可逆。另外,可刷新pdb 在open read only 模式下打开时,并不应用来自源pdb的更改,如果在刷新时间内,pdb 处于open read only模式,则刷新推迟到下个刷新时间点。刷新可在手动和自动刷新之间切换。手动刷新需要在当前pdb 下,关闭pdb,执行刷新:

alter pluggable database close;

alter pluggable database refresh;

example:

SQL> CREATE PLUGGABLE DATABASE repdb_f_pdb FROM pdb_f_seed@pdb_link REFRESH MODE EVERY 1 MINUTES;

插接式数据库已创建。

>快照pdb

当您使用SNAPSHOT COPY子句时,源PDB的所有数据文件都必须存储在相同的存储类型中。

当您使用SNAPSHOT COPY子句创建源PDB的克隆和CLONEDB初始化参数设置为FALSE,为底层文件系统源PDB的文件必须支持存储快照。 这些文件系统包括Oracle自动存储管理群集文件系统(Oracle ACFS)和直接NFS客户端存储。 Exadata支持配置了ASM的ASM上的快照复制功能稀疏的ASM网格磁盘。这个略复杂,暂时不研究。

就这样吧,不搞数据库了。近期打算搞一下语音识别。以后再说吧。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180409G1VG3I00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券