oracle12C Clone 数据库
Table of Contents
1 关于Clone技术
本文包含 针对12CR1,12C-19C 两种版本下clone操作.
11.2.0.2 及之前的版本中,并没有Clone db 的技术,而所谓的Clone, 仅限于RDBMS ,执行一个perl 脚本。
Clone 技术方便我们快速部署数据库软件和数据库。但是对于 Oracle 10G /11G 来说,安装部署时间并没有太大的提升。
12C 以后,Clone 技术,可以很方便的将我们的非cdb/pdb 实例转换成 CDB中的PDB.
2 12CR1
从其他pdb clone 一个新的pdb 。在12C R1 中执行clone 操作,需要将源端pdb 置为read only 状态。要么生产系统 不允许,要么运维人员受熬夜之苦。
2.1 将源Pdb 置为只读
SQL> col name for a10 SQL> select name,open_mode,restricted from v$containers; NAME OPEN_MODE RES ---------- ---------- --- CDB$ROOT READ WRITE NO PDB$SEED READ ONLY NO CBOSS READ WRITE NO SQL> alter pluggable database cboss close; 插接式数据库已变更。 SQL> alter pluggable database cboss open read only; 插接式数据库已变更。
2.2 clone 新的pdb
SQL> create pluggable database amscenter from cboss file_name_convert=('/u01/oradata/BOSS/cboss','/u01/oradata/amscenter') ; 插接式数据库已创建。 SQL> select name,open_mode,restricted from v$containers; NAME OPEN_MODE RES ---------- ---------- --- CDB$ROOT READ WRITE NO PDB$SEED READ ONLY NO CBOSS READ WRITE NO AMSCENTER READ WRITE NO
2.3 恢复原库
alter pluggable database cboss close; alter pluggable database cboss open;
3 12CR2-19C
12C R2 clone 技术得到了提升,原实例不再需要以readonly 打开。可以在线Clone。
3.1 从本地clone
3.1.1 从pdb$seed 创建新的pdb
从pdb$seed 创建新的Pdb ,是从种子数据库直接将文件复制过来。只包含了系统表空间。严格来说, 这并不是clone技术范畴内的。
CREATE PLUGGABLE DATABASE osp ADMIN USER system IDENTIFIED BY System123 -- STORAGE (MAXSIZE 2G) -- DEFAULT TABLESPACE ypdb1 -- DATAFILE '/u01/app/oracle/oradata/ora12c/ypdb1/ypdb01.dbf' SIZE 100M AUTOEXTEND ON PATH_PREFIX = '/u01/app/oradata/osp/' FILE_NAME_CONVERT = ('/u01/app/oradata/BOSS/pdbseed', '/u01/app/oradata/osp); -- 若未指定管理用户的默认表空间,则默认使用system表空间作为管理用户的默认表空间。
3.1.2 从其他PDB clone 新pdb
从本地pdb clone 出新pdb, 与从pdb$seed clone 类似。
alter system set db_create_file_dest='/u01/app/oradata/amscenter'; create pluggable database amscenter from cboss; alter pluggable database amscenter open;
3.2 从远程clone
3.2.1 要求
该操作有一些要求。源和目标 CDB 平台必须满足以下要求:
- 查看源库的字符集
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'; -- 或者 select userenv('language') from dual;
- 查看源库是否启用 local undo
COLUMN property_name FORMAT A30 COLUMN property_value FORMAT A30 SELECT property_name, property_value FROM database_properties WHERE property_name = 'LOCAL_UNDO_ENABLED'; PROPERTY_NAME PROPERTY_VALUE ------------------------------ ------------------------------ LOCAL_UNDO_ENABLED TRUE
- 查看源库是否启用归档
select log_mode from v$database; LOG_MODE ------------ ARCHIVELOG
- 创建public database link
-
源库创建用户
create user pdbclone identified by pdbclone; grant create session,create pluggable database to pdbclone;
-
目标库创建db_link
create public database link rdb connect to pdbclone identified by pdbclone using '&ip:&port/&service_name';
-
3.2.2 源库为CDB
create pluggable database newpdb from &source_pdb@rdb file_name_convert=('&source_path,'&target_path') ;
3.2.3 源为Non-CDB
源库为非CDB时,clone至pdb ,需要额外执行脚本,然后再打开数据库。
create pluggable database pdb_test from NON$CDB@rdb create_file_test='&data_file_path'; alter session set container=pdb_test; @$ORACLE_HOME/rdbms/admin/noncdb_to_pdb; alter pluggable database pdb_test open;
Created: 2020-06-10 Wed 17:31