oracle 12C 之 Clone 数据库

oracle12C Clone 数据库

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 平台必须满足以下要求:

  • 相同的 endian
  • 相同的字符集和国家字符集,或者目标库兼容源库。
  • 源库是否启用local undo(源端CDB 若未使用,则必须置为只读)(参见12cr1)。
  • 源库是否启用归档,否则需要将源库置为只读模式(参见12cr1)。
  • 本地创建public database link 指向源库。
  1. 查看源库的字符集
    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;
    
  2. 查看源库是否启用 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
    
  3. 查看源库是否启用归档
    select log_mode from v$database;
    
    LOG_MODE
    ------------
    ARCHIVELOG
    
  4. 创建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;

Author: halberd.lee

Created: 2020-06-10 Wed 17:31

Validate

oracle 12C 之 Clone 数据库

上一篇:【Oracle】Oracle表空间数据文件大小设置


下一篇:历时七天,史上最强MySQL优化总结,从此优化So Easy!