ITPub博客

首页 > 数据库 > Oracle > 基于19C PDB创建方式(一)

基于19C PDB创建方式(一)

原创 Oracle 作者:梦夕林1992 时间:2025-02-10 18:31:38 0 删除 编辑

本文将通过下面四种方式,简单的对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。



从种子容器中创建pdb

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:设置可插拔数据库新增的数据文件必须存储在该目录或其子目录中。


克隆现存的PDB

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/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2014-10-13

  • 博文量
    90
  • 访问量
    85389