在相同CDB下进行unplug,plug PDB的操作。(plug or unplug a pdb using same cdb)

随着12c的迅速普及,有必要了解一下12c的新特性,今天我准备在我的个人服务器上对PDB进行unplug和plug的操作。

先看看我现在的server的状态。

SQL> select name, decode(cdb, 'YES', 'Multitenant Option enabled', 'Regular 12c Database: ') "Multitenant Option" , open_mode, con_id from v$database;

NAME      Multitenant Option     OPEN_MODE        CON_ID
--------- -------------------    ---------      ----------
TESTDB    Regular 12c Database:  READ WRITE     0

SQL>
SQL> show con_name;

CON_NAME
------------------------------
testdb
SQL>

貌似没有CDB的database。
这有可能是因为我的数据库是从11g升级上来的,并没有CDB。

自己做一个CDB吧。

在新建一个CDB之前看看我的disk使用情况。

[root@localhost tmp]# df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
                      30376764  24991944   3816872  87% /
/dev/sda1               101086     23559     72308  25% /boot
tmpfs                  1025328    492828    532500  49% /dev/shm

看来空间是不够了,清除一些文件之后好多了。

[root@localhost product]# df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
                      30376764  18828848   9979968  66% /
/dev/sda1               101086     23559     72308  25% /boot
tmpfs                  1025328    492836    532492  49% /dev/shm

启动我的DBCA。
这里写图片描述

新建立一个数据库。
这里写图片描述

创建CDB testdb1和一个PDB pdb1。
这里写图片描述

之后就一直next即可。

安装完成
这里写图片描述


将/home/oracle/.bash_profile的SID重新定义成新创建的CDB testdb1后,重新登录oracle用户,重启DB。

SQL> shutdown
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL>
SQL> startup
ORACLE instance started.

Total System Global Area  704643072 bytes
Fixed Size                  2928392 bytes
Variable Size             402653432 bytes
Database Buffers          293601280 bytes
Redo Buffers                5459968 bytes
Database mounted.
Database opened.
SQL>
SQL> show con_name;

CON_NAME
------------------------------
CDB$ROOT
SQL>
SQL>

看到CDB$ROOT出现了。


再看看pdb。

SQL> show pdbs;

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 PDB1                           MOUNTED

PDB$SEED是PDB的模板,忽略。
同时我也看到了创建CDB的时候同时创建的pdb1,已经显示为mounted。

启动pdb1。

SQL> alter pluggable database PDB1 open;

Pluggable database altered.

SQL> show pdbs;

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 PDB1                           READ WRITE NO
SQL>

OK,一个常态的PDB已经建成了。我要开始做Unplugging PDB的实验了。


先要关闭pdb1,然后确认一下状态。

SQL> alter pluggable database pdb1 close immediate;

SQL> show pdbs;

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 PDB1                           MOUNTED
SQL>

把要unplug的PDB1备份到XML文件。

SQL> alter pluggable database pdb1 unplug into '/u01/app/oracle/oradata/pdb1.xml';

Pluggable database altered.

OK 成功了,然后可以unplug掉这个PDB了。

SQL> drop pluggable database pdb1 keep datafiles;

Pluggable database dropped.

SQL> show pdbs;

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
SQL>
SQL> select pdb_name, status from cdb_pdbs ;

PDB_NAME
--------------------------------------------------------------------------------
STATUS
---------
PDB$SEED
NORMAL

可以看到已经将PDB1给unplug掉了。


好,开始plug这个pdb。

先检查一下pdb和现在的cdb是否有兼容问题,我这里是用一台cdb,所以不存在兼容问题,但还是执行一下。

set serveroutput on
DECLARE
   compatible BOOLEAN := FALSE;
BEGIN   
   compatible := DBMS_PDB.CHECK_PLUG_COMPATIBILITY(
        pdb_descr_file => '/u01/app/oracle/oradata/pdb1.xml');
   if compatible then
      DBMS_OUTPUT.PUT_LINE('Is pluggable PDB1 compatible? YES');
   else DBMS_OUTPUT.PUT_LINE('Is pluggable PDB1 compatible? NO');
   end if;
END;
/
Is pluggable PDB1 compatible? YES

PL/SQL procedure successfully completed.

OK,没有问题。

然后开始plug到cdb。

plug到原cdb有三种方式。

NOCOPY Method:不拷贝数据文件,直接生成新文件。
COPY Method:拷贝数据文件到新目录。
AS CLONE MOVE Method:移动原来的数据文件到新目录。

其他方法可以看这篇文档。

http://www.oracle.com/webfolder/technetwork/tutorials/obe/db/12c/r1/pdb/pdb_unplug_plug/pdb_unplug_plug.html

因为我这里只是为了实验,用nocopy的方法。

SQL> create pluggable database pdb_plug_nocopy using '/u01/app/oracle/oradata/pdb1.xml'
  2  NOCOPY
  3  TEMPFILE REUSE;

Pluggable database created.

成功了,我们看看现在的状态。

SQL> show pdbs;

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 PDB_PLUG_NOCOPY                MOUNTED
SQL>

可以看到 PDB_PLUG_NOCOPY 现在pdb是mounted
再看看其他状态。

        SQL> select pdb_name, status from cdb_pdbs where pdb_name='PDB_PLUG_NOCOPY';

        PDB_NAME
        --------------------------------------------------------------------------------
        STATUS
        ---------
        PDB_PLUG_NOCOPY
        NEW
        SQL> select open_mode from v$pdbs where name='PDB_PLUG_NOCOPY';

        OPEN_MODE
        ----------
        MOUNTED

        SQL> select name from v$datafile where con_id=3;

        NAME
        --------------------------------------------------------------------------------
        /u01/app/oracle/oradata/TESTDB1/2DAB1DEA4CF91365E0530100007FAE22/datafile/o1_mf_
        system_cg1xgnh0_.dbf

        /u01/app/oracle/oradata/TESTDB1/2DAB1DEA4CF91365E0530100007FAE22/datafile/o1_mf_
        sysaux_cg1xgnhm_.dbf

        /u01/app/oracle/oradata/TESTDB1/2DAB1DEA4CF91365E0530100007FAE22/datafile/o1_mf_
        users_cg1xhlr5_.dbf

启动这个PDB

SQL> alter pluggable database pdb_plug_nocopy open;

Pluggable database altered.

SQL> show pdbs;

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 PDB_PLUG_NOCOPY                READ WRITE NO
SQL>

然后我们退出重新登录这个PDB

sqlplus /nolog
SQL> connect sys/oracle@localhost:1521/pdb_plug_nocopy AS SYSDBA
Connected.
SQL> show con_name

CON_NAME
------------------------------
PDB_PLUG_NOCOPY
SQL>

好了,PDB在同一台server上的unplug和plug就已经完成了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值