当前位置: 首页 > news >正文

Oracle-创建PDB

Oracle-创建PDB

创建PDB的方式

  • 从PDB$SEED新建PDB
  • 克隆已存在的PDB
    • 本地PDB克隆到同一个CDB中
    • 将远程PDB克隆到CDB中
  • 将非CDB插入或克隆到CDB中
  • 通过插拔的方式创建PDB

image-20210909100643634

sql 命令语法

条件

  • CDB必须open并且read write模式
  • 连接CDB$ROOT 用户并且具有CREATEPLUGGABLEDATABASE系统权限

具体实现

从PDB$SEED新建PDB

img

示例

CREATE PLUGGABLE DATABASE salespdbADMIN USER salesadm IDENTIFIED BY passwordROLES = (dba)DEFAULT TABLESPACE salesDATAFILE '/disk1/oracle/dbs/salespdb/sales01.dbf' SIZE 250M AUTOEXTEND ONFILE_NAME_CONVERT = ('/disk1/oracle/dbs/pdbseed/','/disk1/oracle/dbs/salespdb/')STORAGE (MAXSIZE 2G)PATH_PREFIX = '/disk1/oracle/dbs/salespdb/';
参数说明
关键字描述
ADMIN USER用于执行管理任务的本地用户
STORAGE (MAXSIZE 2G)指定了PDB可用的最大空间
DEFAULT TABLESPACE为PDB指定默认的Tablespace
PATH_PREFIX用来限制directory objects/Oracle XML/Create pfile/Oracle wallets所在的目录
FILE_NAME_CONVERT设置子容器和数据文件副本的位置

create pluggable database命令创建PDB2

-- 12.1
create pluggable database pdb2 admin user pdb2_admin identified by oracle roles=(connect) file_name_convert=('/u01/app/oracle/oradata/CDB3/pdbseed','/u01/app/oracle/oradata/CDB3/pdb2');-- 12.2
create pluggable database pdb2 admin user pdbadmin identified by "oracle" create_file_dest='+DATA';

打开PDB2

alter pluggable database pdb2 open instances=all;
alter pluggable database pdb2 save state instances=all;
show pdbs;set lines 168 pages 99
col name for a16
col open_mode for a16
col restricted for a12
select inst_id, con_id, name, open_mode, restricted from gv$containers;

克隆已存在的PDB

克隆本地PDB

img

在12.1版本中在创建PDB时,SOURCE PDB必须处于read only状态,在12.2版本中,因为undo local mode新特性的推出,在创建PDB时,SOURCE PDB在read write状态也可以创建。而且,在12.2版本中Oracle推出了refresh PDB特性,具有对SOURCE PDB进行增量同步的功能。

注意事项
  • 如果CDB为shared undo,PDB必须为READ-ONLY状态
  • 如果CDB不是归档模式,那么PDB必须为READ-ONLY状态
  • 如果是Oracle Database 版本为12.1,那么PDB只能为READ-ONLY状态,因在12.1中undo模式,还只能选择shared undo
  • 使用的用户必须拥有 CREATE PLUGGABLE DATABASE 的权限
示例
CREATE PLUGGABLE DATABASE newpdb FROM salespdbFILE_NAME_CONVERT = ('/disk1/oracle/dbs/salespdb/', '/disk1/oracle/dbs/newpdb/')PATH_PREFIX = '/disk1/oracle/dbs/newpdb';
检查undo模式
COL PROPERTY_NAME FOR A24
COL PROPERTY_VALUE FOR A16
SELECT property_name, property_value
FROM database_properties
WHERE property_name='LOCAL_UNDO_ENABLED';

image-20210909102708748

克隆方式创建PDB
create pluggable database pdb3 from pdb2 file_name_convert=('pdb2','pdb3');
打开PDB3
alter pluggable database pdb3 open instances=all;
alter pluggable database pdb3 save state instances=all;
show pdbs;set lines 168 pages 99
col name for a16
col open_mode for a16
col restricted for a12
select inst_id, con_id, name, open_mode, restricted from gv$containers;

克隆远程PDB或non-CDB

img

注意事项

  • 如果PDB被Clone到的CDB的字符集不是AL32UTF8,那么源与目标字符集必须兼容。
  • 源端与目标端的字节顺序必须相同.
  • 连接的用户在CDB中必须拥有'CREATE PLUGGABLE DATABASE'的权限
  • 源PDB不可以是关闭状态
  • 如果远端CDB为shared undo,源PDB必须为READ-ONLY状态
  • 如果远端CDB不是归档模式,源PDB必须为READ-ONLY状态

准备

查看源端与目标的字符集
col parameter for a30
col value for a30
select * from nls_database_parameters where parameter='NLS_CHARACTERSET'
or parameter='NLS_LANGUAGE' or parameter='NLS_NCHAR_CHARACTERSET';
检查字节序
col platform_name for a32
SELECT d.inst_id, t.platform_id, t.platform_name, t.endian_format, d.name FROM v$transportable_platform t, gv$database d
WHERE t.platform_name = d.platform_name;
检查undo模式
COL PROPERTY_NAME FOR A24
COL PROPERTY_VALUE FOR A16
SELECT property_name, property_value
FROM database_properties
WHERE property_name='LOCAL_UNDO_ENABLED';

源库启动只读模式

startup open read only;
select open_mode from v$database;

目标CDB中配置

配置tnsnames.ora文件
cd $ORACLE_HOME/network/admin
cat> tnsnames.ora <<EOF
ORCL =(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.181)(PORT = 1533))(LOAD_BALANCE = YES)(FAILOVER = ON)(CONNECT_DATA =(SERVER= DEDICATED)(SERVICE_NAME = ORCL)(FAILOVER_MODE =(TYPE = select)(METHOD = basic)(RETRIES = 180)(DELAY = 5))))
EOF
创建dblink
create database link dblink1 connect to sys identified by oracle using 'orcl';

使用的用户必须拥有 CREATE PLUGGABLE DATABASE 的权限

验证dblink连接
select sysdate from dual@dblink1;
克隆方式创建PDB
-- non-CDB
create pluggable database pdb4 from non$cdb@dblink1 file_name_convert=('/u01/app/oracle/oradata/ORCL','/u01/app/oracle/oradata/CDB3/pdb4');-- remote pdb
create pluggable database pdb4 from pdb1@dblink1 file_name_convert=('/u01/app/oracle/oradata/ORCL','/u01/app/oracle/oradata/CDB3/pdb4');
non-CDB转换pdb(可选)
alter session set container=pdb4;
show pdbs
@?/rdbms/admin/noncdb_to_pdb.sql
打开PDB
alter pluggable database pdb4 open instances=all;
alter pluggable database pdb4 save state instances=all;
show pdbs;set lines 168 pages 99
col name for a16
col open_mode for a16
col restricted for a12
select inst_id, con_id, name, open_mode, restricted from gv$containers;

拔插PDB

拔出PDB

img

关闭PDB
alter pluggable database pdb1 close immediate instances=all;
拔出PDB
alter pluggable database pdb1 unplug into '/tmp/pdb1.xml';
删除PDB
drop pluggable database pdb1 keep datafiles;

keep datafiles:保留数据文件,不删除数据文件

将拔插的PDB插入CDB

img

检查兼容性

使用DBMS_PDB.CHECK_PLUG_COMPATIBILITY函数检查拔出的pdb1与cdb1是否兼容

SET SERVEROUTPUT ON
DECLAREcompatible CONSTANT VARCHAR2(3) :=CASE DBMS_PDB.CHECK_PLUG_COMPATIBILITY(pdb_descr_file => '/tmp/pdb1.xml',pdb_name => 'PDB1')WHEN TRUE THEN 'YES'ELSE 'NO'
END;
BEGINDBMS_OUTPUT.PUT_LINE(compatible);
END;
/
示例
CREATE PLUGGABLE DATABASE salespdbUSING '/disk1/usr/salespdb.xml'SOURCE_FILE_NAME_CONVERT =('/disk1/oracle/dbs/salespdb/', '/disk2/oracle/dbs/salespdb/')NOCOPYSTORAGE (MAXSIZE 2G)TEMPFILE REUSE;
插入CDB1
create pluggable database pdb1 using '/tmp/pdb1.xml' nocopy;
  • COPY - Copy the tablespace files to the new location.
  • MOVE - Move the tablespace files to the new location.
  • NOCOPY - Do not copy or move the tablespace files to the new location.
打开PDB
alter pluggable database pdb1 open instances=all;
alter pluggable database pdb1 save state instances=all;
show pdbs;set lines 168 pages 99
col name for a16
col open_mode for a16
col restricted for a12
select inst_id, con_id, name, open_mode, restricted from gv$containers;
http://www.lryc.cn/news/117714.html

相关文章:

  • 【TypeScript】交叉类型联合类型(四)
  • 数组和字符串-字符串
  • MySQL-索引基础
  • CentOS中自动加载802.1q模块
  • CSP-J2022第一轮试题
  • 使用Java根据表名导出与导入Sql
  • Elasticsearch同时使用should和must
  • 羽毛球热身和拉伸
  • 使用 Vue 实现页面访问拦截
  • 使用webpack建立React+TS项目
  • 法律监督大数据平台有什么作用?
  • 根据制定的长度切割list值
  • AES加密(1):AES基础知识和计算过程
  • Nginx启动报错- Failed to start The nginx HTTP and reverse proxy server
  • 五、web应用程序技术——web功能
  • AutoDL服务器的镜像版本太高,配置python3.7 tensorflow1.15版本的框架的步骤
  • c++ boost库之scoped_ptr,shared_ptr,weak_ptr智能指针
  • 【leetcode】383. 赎金信(easy)
  • CTF-记一次PWN练习
  • 《golang设计模式》第一部分·创建型模式-04-工厂方法模式(Factory Method)
  • redis的配置和使用、redis的数据结构以及缓存遇见的常见问题
  • 在Ubuntu系统下修改limits.conf不生效
  • selenium 选项 chrome_options
  • 自然语言处理(Natural Language Processing,NLP)
  • 基于机器学习的库存需求预测 -- 机器学习项目基础篇(12)
  • 【D3S】集成smart-doc并同步配置到Torna
  • 网络安全设备及部署
  • LVS集群
  • Kubernetes(K8s)从入门到精通系列之十二:安装和设置 kubectl
  • 探索 TypeScript 元组的用例