Oracle 12c 新特性 --- 克隆PDB

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/leo__1990/article/details/89913883

概念说明

CLONEDB provides a way to easily and quickly create copies of databases on network attached storage (NAS), using a thin provisioning approach integrated with Oracle Database.

CLONEDB 提供了一种方法,可以轻松快速地在网络附加存储上(NAS)创建数据库副本,使用数据库集成的配置方法

Cloning a production database is a common technique used to help develop and test changes to applications and their surrounding environments. Before a new operating system release, storage software, or application version is installed in a production environment, thorough testing is needed using production data. This is usually accomplished by copying the production database to a test environment. In addition, to the test environment, copies of the production database are also made to the development environments where application developers are creating or modifying applications and testing them. All of these copies require large amounts of storage to be allocated and managed. Using thin provisioning, CLONEDB greatly reduces the amount of storage needed for clones of production databases.

克隆生产数据库是一种常用技术,用于帮助开发和测试应用程序及其周围环境的更改。在新的操作系统发布、存储软件或应用程序版本安装在生产环境之前,需要使用生产数据进行整体的测试。这通常是通过将生产数据库复制到测试环境来完成的。此外,在测试环境中,生产数据库的副本也被制作到应用程序开发人员正在创建或修改应用程序并对其进行测试的开发环境中。所有这些副本都需要大量的存储来分配和管理。使用微小配置,CLONEDB大大减少了生产数据库克隆所需的存储量。

实验

克隆PDB及其数据

1)将被克隆的PDB 设置为read only 模式
[oracle@dg2 cndba]$ sqlplus "/as sysdba"
SQL*Plus: Release 12.2.0.1.0 Production on Wed Aug 2 11:50:11 2017
Copyright (c) 1982, 2016, Oracle.  All rights reserved.
Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

SQL> show con_name

CON_NAME
------------------------------
CDB$ROOT
SQL> show pdbs 

    CON_ID CON_NAME			  OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
	 2 PDB$SEED			  READ ONLY  NO
	 3 PDBCNDBA			  READ WRITE NO
	 4 PDBCNDBA1			  MOUNTED
SQL> alter session set container=cdb$root;

Session altered.

SQL> alter  pluggable database pdbcndba close immediate;

Pluggable database altered.

SQL> show pdbs

    CON_ID CON_NAME			  OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
	 3 PDBCNDBA			  MOUNTED
SQL> alter pluggable database pdbcndba open read only;

Pluggable database altered.

SQL> show pdbs

    CON_ID CON_NAME			  OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
	 3 PDBCNDBA			  READ ONLY  NO
2)确定空间需求
SQL> alter session set container=pdbcndba;

Session altered.
SQL> set line 300
SQL> col tablespace_name for a32
SQL>  col file_name for a128
SQL>  select tablespace_name,file_name,bytes/1024/1024 MB from dba_data_files;

TABLESPACE_NAME 		 FILE_NAME														       MB
-------------------------------- -------------------------------------------------------------------------------------------------------------------------------- ----------
SYSTEM				 /u01/app/oracle/oradata/cndba/pdbcndba/system01.dbf									      270
SYSAUX				 /u01/app/oracle/oradata/cndba/pdbcndba/sysaux01.dbf									      530
UNDOTBS1			 /u01/app/oracle/oradata/cndba/pdbcndba/undotbs01.dbf									      295
USERS				 /u01/app/oracle/oradata/cndba/pdbcndba/users01.dbf									     1280
USERS				 /u01/app/oracle/oradata/cndba/pdbcndba/users03.dbf									       50
USERS				 /u01/app/oracle/oradata/cndba/pdbcndba/users05.dbf									       20
TEST				 /u01/app/oracle/oradata/cndba/pdbcndba/test01.dbf									       20

7 rows selected.
/u01/app/oracle/oradata/cndba/pdbcndba 空间要大于以上文件大小之和
3)为克隆PDB创建目录 
SQL> !mkdir -p /u01/app/oracle/oradata/cndba/pdbcndba2
4)克隆PDB
SQL> alter session set container=cdb$root;

Session altered.

SQL> CREATE PLUGGABLE DATABASE pdbcndba2 FROM pdbcndba
FILE_NAME_CONVERT=('/u01/app/oracle/oradata/cndba/pdbcndba/','/u01/app/oracle/oradata/cndba/pdbcndba2/'); 

Pluggable database created.

SQL> show pdbs

    CON_ID CON_NAME			  OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
	 2 PDB$SEED			  READ ONLY  NO
	 3 PDBCNDBA			  READ ONLY  NO
	 4 PDBCNDBA1			  MOUNTED
	 5 PDBCNDBA2			  MOUNTED
SQL> alter pluggable database pdbcndba2 open;

Pluggable database altered.

SQL> show pdbs 

    CON_ID CON_NAME			  OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
	 2 PDB$SEED			  READ ONLY  NO
	 3 PDBCNDBA			  READ ONLY  NO
	 4 PDBCNDBA1			  MOUNTED
	 5 PDBCNDBA2			  READ WRITE NO
5)将源PDB修改为OPEN 模式
SQL> alter pluggable database pdbcndba close;

Pluggable database altered.

SQL> alter pluggable database pdbcndba open;

Pluggable database altered.

SQL> show pdbs

    CON_ID CON_NAME			  OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
	 2 PDB$SEED			  READ ONLY  NO
	 3 PDBCNDBA			  READ WRITE NO
	 4 PDBCNDBA1			  MOUNTED
	 5 PDBCNDBA2			  READ WRITE NO
SQL> 
以上是整个克隆PDB的过程。

实验验证克隆本地PDB而不克隆其数据 

1)创建PDB 
SQL> create pluggable database pdbcndba3 admin user cndba identified by cndba
file_name_convert=('/u01/app/oracle/oradata/cndba/pdbseed/','/u01/app/oracle/oradata/cndba/pdbcndba3/');  2  

Pluggable database created.

SQL> ALTER PLUGGABLE DATABASE pdbcndba3 OPEN READ WRITE;

Pluggable database altered.

SQL> ALTER SESSION SET CONTAINER = pdbcndba3;

Session altered.
2)创建表空间
SQL> CREATE TABLESPACE users
  DATAFILE '/u01/app/oracle/oradata/cndba/pdbcndba3/users01.dbf'
  SIZE 1M AUTOEXTEND ON NEXT 1M;

Tablespace created.
3)创建用户
SQL> CREATE USER test IDENTIFIED BY test
  DEFAULT TABLESPACE users
  QUOTA UNLIMITED ON users;
 
User created.
4)创建表并插入数据
SQL> CREATE TABLE test.t1 (
  id NUMBER
);

Table created.

SQL> INSERT INTO test.t1 VALUES (1);

1 row created.

SQL> COMMIT;
Commit complete.

SQL> SELECT COUNT(*) FROM test.t1;

  COUNT(*)
----------
	 1
5)将源PDB 开启read only 模式
SQL> ALTER PLUGGABLE DATABASE pdbcndba3 CLOSE;

Pluggable database altered.

SQL> ALTER PLUGGABLE DATABASE pdbcndba3 OPEN READ ONLY;

Pluggable database altered.
6)克隆PDB 并不克隆其数据
SQL> alter session set container=cdb$root;

Session altered.

SQL> CREATE PLUGGABLE DATABASE pdbcndba4 FROM pdbcndba3
  FILE_NAME_CONVERT=('/u01/app/oracle/oradata/cndba/pdbcndba3/','/u01/app/oracle/oradata/cndba/pdbcndba4/')
  NO DATA;

Pluggable database created.

SQL> ALTER PLUGGABLE DATABASE pdbcndba3 CLOSE;

Pluggable database altered.

SQL> ALTER PLUGGABLE DATABASE pdbcndba3 OPEN READ WRITE;

Pluggable database altered.

SQL> ALTER PLUGGABLE DATABASE pdbcndba4 OPEN READ WRITE;

Pluggable database altered.

SQL> ALTER SESSION SET CONTAINER = pdbcndba4;

Session altered.
7)验证数据并没有克隆
SQL> SELECT COUNT(*) FROM test.t1;

  COUNT(*)
----------
	 0

总结:实验过程中遇到以下错误: 

SQL> CREATE PLUGGABLE DATABASE pdbcndba3 FROM pdbcndba
  FILE_NAME_CONVERT=('/u01/app/oracle/oradata/cndba/pdbcndba/','/u01/app/oracle/oradata/cndba/pdbcndba3/')
  NO DATA;  2    3  
CREATE PLUGGABLE DATABASE pdbcndba3 FROM pdbcndba
*
ERROR at line 1:
ORA-65200: unable to create pluggable database with no data
出现上面的错误的原因是pdbd(pdbcndba)下没有用户和数据,因此重新建了新的pdb(pdbcndba3) 做整个实验,在pdbcndba3 中新建用户和表,实验成功。

参考链接: 

http://docs.oracle.com/database/121/NEWFT/chapter12101.htm#NEWFT251

http://docs.oracle.com/database/121/ADMIN/create.htm#ADMIN14024

http://docs.oracle.com/database/121/ADMIN/cdb_plug.htm#ADMIN13586

https://oracle-base.com/articles/12c/multitenant-metadata-only-pdb-clones-12cr1

猜你喜欢

转载自blog.csdn.net/leo__1990/article/details/89913883