首页 > 数据库 > Oracle > 基于19C PDB创建方式(一)
本文将通过下面四种方式,简单的对19c中pdb的创建做演示说明
1.从种子容器中创建pdb:
使用种子容器或应用程序种子的文件在CDB中创建PDB。此技术将与种子容器关联的文件复制到新位置,并将复制的文件与新的PDB关联,这是默认的创建机制。
2.克隆现存的pdb:
通过克隆源PDB或非CDB创建PDB。源可以是本地CDB中的PDB,远程CDB中的PDB,此技术将与源关联的文件复制到新位置,并将复制的文件与新的PDB关联。
3.Relocate PDB
此技术是在最少停机时间或没有停机时间的情况下移动PDB的最快方法。否则,拔出源PDB会导致PDB中断,直到将PDB插入目标CDB为止。
该操作将与PDB关联的文件移动到新位置,将PDB添加到目标CDB,然后打开PDB。
4.插拔pdb
通过使用描述PDB的XML元数据文件和与PDB关联的文件来创建PDB,以将其插入CDB。
1 描述
使用PDB $ SEED文件在CDB根目录中创建PDB,复制PDB$SEED文件到新位置,并与新建PDB关联。
2 创建
SQL>CREATE PLUGGABLE DATABASE testpdb
ADMIN USER admin123 IDENTIFIED BY admin123;
//
该方法必须为CDB启用了OMF,或者PDB_FILE_NAME_CONVERT设置了初始化参数,
否则会报错:
ORA-65016: FILE_NAME_CONVERT must be specified
可以使用file_name_convert参数指定.
也可以使用create_file_dest参数指定
2.1为CDB开启OMF功能
SQL> Show con _name
CON NAME
-------------------------
CDB$ROOT
S0L> alter system set db_create_file_dest ='/oracle/app/oradata/orcl/';
System altered.
SOL> CREATE PLUGGABLE DATABASE testpdb ADMIN USER admin123 IDENTIFIED By admin123;
Pluggable database created.
创建出来的文件为OMF文件管理格式:
SQL> alter session set container=testpdb;
Session altered.
SQL> select name from v$datafile;
NAME
--------------------------------------------------------------------------------
/oracle/app/oradata/orcl/ORCL/AA2EA0F75BFC6CFBE053D8C7A8C01395/datafile/o1_mf_system_hjmx322m_.dbf
/oracle/app/oradata/orcl/ORCL/AA2EA0F75BFC6CFBE053D8C7A8C01395/datafile/o1_mf_sysaux_hjmx322v_.dbf
/oracle/app/oradata/orcl/ORCL/AA2EA0F75BFC6CFBE053D8C7A8C01395/datafile/o1_mf_undotbs1_hjmx322w_.dbf
2.2 在CDB设置pdb_file_name_convert参数
SOL> alter system set pdb_file_name_convert='/oracle/app/oradata/orcl/pdbseed','/oracle/app/oradata/orcl/testpdb';
(目录可以不存在,会自动创建)
2.3 创建时指定create_file_dest参数
SQL>CREATE PLUGGABLE DATABASE testpdb2 ADMIN USER admin123 IDENTIFIED BY admin123 create_file_dest='/oracle/app/oradata/orcl/testpdb2/';
Create_file_dest位置必须事先被创建好,否则会报如下错误:
ERROR at line 1:
ORA-65165: missing or invalid path for file creation /oracle/app/oradata/orcl/testpdb2/
ORA-01262: Stat failed on a file destination directory
Linux-x86_64 Error: 2: No such file or directory
2.4 创建PDB时的子句选项
CREATE PLUGGABLE DATABASE salespdb
ADMIN USER salesadm IDENTIFIED BY password
STORAGE (MAXSIZE 2G)
DEFAULT TABLESPACE sales
DATAFILE '/disk1/oracle/dbs/salespdb/sales01.dbf' SIZE 250M
AUTOEXTEND ON
PATH_PREFIX = '/disk1/oracle/dbs/salespdb/'
FILE_NAME_CONVERT = ('/disk1/oracle/dbs/pdbseed/',
'/disk1/oracle/dbs/salespdb/');
ADMIN USER:创建用于执行管理任务的本地用户
STORAGE MAXSIZE 可插拔数据库可使用空间的最大值
DEFAULT:新建用户的默认表空间:
DATAFILE:默认表空间数据文件的路径和名称
PATH_PREFIX:设置可插拔数据库新增的数据文件必须存储在该目录或其子目录中。
1 描述
三种方式:
克隆本地PDB
克隆远程PDB
克隆远程非CDB
2 克隆本地PDB
先连接根容器,然后将源PDB切换为只读模式:
SQL> alter pluggable database salespdb close;
Pluggable database altered.
SQL> alter pluggable database salespdb open read only;
Pluggable database altered.
如果CDB不在本地撤消模式下,则源PDB必须处于打开的只读模式。如果CDB处于本地撤消模式,则此要求不适用。
如果CDB不在ARCHIVELOG模式下,则源PDB必须处于只读模式。如果CDB处于ARCHIVELOG模式,则此要求不适用。
创建:
SQL>Create pluggable database salespdb from orclpdb //from后无法接种子容器
file_name_convert = ('/oracle/app/oradata/orcl/orclpdb','/oracle/app/oradata/orcl/salespdb');
如果启用Oracle托管文件,或设置PDB_FILE_NAME_CONVERT初始化参数。
该FILE_NAME_CONVERT子句和该CREATE_FILE_DEST子句不是必需的。
克隆时,源PDB必须处于打开状态,不可为mount模式,
要么read only 要么为read write,否则会报错
ORA-65036: pluggable database ORCLPDB not open in required mode
3 克隆远程PDB
源CDB:
SQL> select con_id,name from v$containers;
CON_ID NAME
---------- --------------------
1 CDB$ROOT
2 PDB$SEED
3 ORCLPDB
4 SALESPDB
在源CDB中创建DBlink连接用户:
SQL> create user c##test identified by test;
SQL> grant CREATE PLUGGABLE DATABASE to c##test;
SQL> grant create session,connect,resource,sysoper to c##test;
//官方要求必须存在CREATE PLUGGABLE DATABASE权限
在目的CDB中创建连接远程PDB的DBLINK:
SQL> create database link salespdb
connect to c##test identified by test
using 'orcl2';
Database link created.
连接源CDB将PDB置为redo only状态:
$ sqlplus sys/oracle@orcl2 as sysdba
SQL> alter pluggable database salespdb close;
Pluggable database altered.
SQL> alter pluggable database salespdb open read only;
Pluggable database altered.
使用SYS用户连接目的CDB,然后通过克隆远程PDB,创建新的PDB:
$ sqlplus / as sysdba
SQL>create pluggable database salespdb2
from salespdb@salespdb
file_name_convert = ('/oracle/app/oradata/orcl/salespdb','/oracle/app/oradata/orcl/salespdb2');
Pluggable database created.
测试期间遇到的错误:
错误1:
ERROR at line 1:
ORA-17628: Oracle error 1031 returned by remote Oracle server
ORA-01031: insufficient privileges
原因就是源PDB用户权限不够 注意CREATE PLUGGABLE DATABASE 以及sysoper权限
错误2:
//在PDB中创建用户无法连接,使用DBLINK远程克隆时会报如下错误:
ORA-17627: ORA-01017: invalid username/password; logon denied
ORA-17629: Cannot connect to the remote database server
4 克隆非CDB
要求:
CDB和非CDB必须运行Oracle Database 12c第1版(12.1.0.2)或更高版本。
CDB和非CDB必须运行相同的Oracle数据库版本。
新创建的PDB的数据块大小必须与CDB相匹配。
在源库非CDB创建DBLINK连接用户
SQL> select cdb from v$database;
CDB
---
NO
SQL> create user test identified by test;
给用户授予权限:
SQL> grant CREATE PLUGGABLE DATABASE to test;
SQL> grant create session,connect,resource,sysoper to test;
建立DBlink:
SQL> create database link source
connect to test identified by test
using 'source';
Database link created.
源库状态:
SQL> select open_mode from v$database;
OPEN_MODE
--------------------
READ WRITE
如果非CDB处于NOARCHIVELOG模式下,则必须以只读模式打开它。如果非CDB处于ARCHIVELOG模式,则可以将其打开为只读或读/写状态。
目标库进行克隆
SQL>create pluggable database testpdb
from prod@source
file_name_convert = ('/oracle/app/oradata/PROD/','/ora19c/app/oracle/oradata/ORA19C/ORA19C/testpdb/');
Pluggable database created.
'/oracle/app/oradata/PROD/' 非CDB数据库的数据文件存放路径
'/ora19c/app/oracle/oradata/ORA19C/ORA19C/testpdb/' 目标库新建PDB存放路径
连接该PDB并运行脚本:
SQL> alter session set container=testpdb;
Session altered.
必须运行该脚本后才可打开数据库:
SQL>@$ORACLE_HOME/rdbms/admin/noncdb_to_pdb.sql
新建的PDB是无法直接open read only状态打开,必须需要先open read write一次,将其与CDB集成。
SQL> alter database open read only;
alter database open read only
*
ERROR at line 1:
ORA-65085: cannot open pluggable database in read-only mode
SQL> alter database open read write;
后续就可read only打开
由于篇幅问题还有两种方式在下一篇中演示。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29956245/viewspace-3071594/ ,如需转载,请注明出处,否则将追究法律责任。