zoukankan      html  css  js  c++  java
  • Oracle12cCDB和PDB数据库的启动与关闭说明

    在Oracle 12c中,分CDB 和PDB,他们的启动和关闭操作整理如下。

    1 Container Database (CDB)

    对于CDB,启动和关闭与之前传统的方式一样,具体语法如下:

    STARTUP[NOMOUNT | MOUNT | RESTRICT | UPGRADE | FORCE | READ ONLY]

    SHUTDOWN[IMMEDIATE | ABORT]

    要注意,在12c数据库创建完成后,默认情况下使用sqlplus / as sysdba 登录连接的是CDB。

    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    [oracle@Ora12c~]$ sqlplus / as sysdba
     
    SQL*Plus:Release 12.1.0.1.0 Production on Thu Apr 24 17:50:34 2014
     
    Copyright(c) 1982, 2013, Oracle. All rightsreserved.
     
    Connectedto:
     
    OracleDatabase 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
     
    Withthe Partitioning, OLAP, Advanced Analytics and Real Application Testing options
     
    SQL>show con_name
     
    CON_NAME
     
    ------------------------------
     
    CDB$ROOT
     
    SQL>
     
    SQL>select con_id, dbid, guid, name , open_mode from v$pdbs;
     
    CON_ID DBID GUID NAME OPEN_MODE
     
    ---------- ------------------------------------------ ------------------------------ ----------
     
    2 4088301206 F7C1E3C96BBF0585E0430A01A8C05459PDB$SEED READ ONLY
     
    3 426143573 F7C209EB1DFC0854E0430A01A8C0B787 PDBCNDBA READ WRITE

    我们现在连接的是CDB,即root container。

    我们关闭CDB:

    ?
    1
    2
    3
    4
    5
    6
    7
    SQL>shutdown immediate
     
    Databaseclosed.
     
    Databasedismounted.
     
    ORACLEinstance shut down.

    我们关闭CDB之前PDB 是没有关闭的,所以这个操作也会把PDB 关闭掉。

     

    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    SQL>startup
     
    ORACLEinstance started.
     
     
     
    TotalSystem Global Area 1269366784 bytes
     
    FixedSize 2287912 bytes
     
    VariableSize 788530904 bytes
     
    DatabaseBuffers 469762048 bytes
     
    RedoBuffers 8785920 bytes
     
    Databasemounted.
     
    Databaseopened.
     
     
     
    SQL> select con_id, dbid, guid, name , open_modefrom v$pdbs;
     
     
     
    CON_ID DBID GUID NAME OPEN_MODE
     
    ---------- ------------------------------------------ ------------------------------ ----------
     
    2 4088301206F7C1E3C96BBF0585E0430A01A8C05459 PDB$SEED READ ONLY
     
    3 426143573 F7C209EB1DFC0854E0430A01A8C0B787 PDBCNDBA MOUNTED

    注意这里的PDB,在CDB 启动之,PDB 是自动启动到mount状态,而不是OPEN。 所以我们还需要手工去open它,当然,也可以通过在CDB中配置触发器来自动open。

     

     

    2 Pluggable Database (PDB)

     

    PDB 的操作可以通过SQL*PLUS 来操作,也可以通过ALTER PLUGGABLE DATABASE 命令操作。

     

    2.1 使用SQL*Plus 命令

     

     

    因为默认连接的是CDB,所以必须先指定PDB才可以通过sqlplus来启动和关闭PDB,

     

    具体语法和普通实例一样:

     

    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    STARTUPFORCE;
     
    STARTUPOPEN READ WRITE [RESTRICT];
     
    STARTUPOPEN READ ONLY [RESTRICT];
     
    STARTUPUPGRADE;
     
    SHUTDOWN[IMMEDIATE];
     
     
     
    SQL>show con_name
     
     
     
    CON_NAME
     
    ------------------------------
     
    CDB$ROOT
     
     
     
    SQL>selectcon_id, dbid, guid, name , open_mode from v$pdbs;
     
     
     
    CON_ID DBID GUID NAME OPEN_MODE
     
    -------------------- -------------------------------- --------------- ----------
     
    2 4088301206F7C1E3C96BBF0585E0430A01A8C05459 PDB$SEED READ ONLY
     
    3 426143573 F7C209EB1DFC0854E0430A01A8C0B787 PDBCNDBA MOUNTED
     
     
     
    注意这里是mount,表示PDB 是关闭的。
     
     
     
    --指定PDB 数据库:
     
    SQL>alter session set container=pdbcndba;
     
    Sessionaltered.
     
     
     
    SQL>startup
     
    PluggableDatabase opened.
     
    SQL>select con_id, dbid, guid, name , open_mode from v$pdbs;
     
     
     
    CON_ID DBID GUID NAME OPEN_MODE
     
    -------------------- -------------------------------- --------------- ----------
     
    3 426143573 F7C209EB1DFC0854E0430A01A8C0B787 PDBCNDBA READ WRITE
     
    SQL>

    启动成功。 当我们切换到PDB之后,就看不到seed PDB的信息了。

     

     

    2.2 使用ALTER PLUGGABLE DATABASE命令

     

    如果在PDB中可以使用如下语法:

     

    ?
    1
    2
    3
    4
    5
    6
    7
    ALTERPLUGGABLE DATABASE OPEN READ WRITE [RESTRICTED] [FORCE];
     
    ALTERPLUGGABLE DATABASE OPEN READ ONLY [RESTRICTED] [FORCE];
     
    ALTERPLUGGABLE DATABASE OPEN UPGRADE [RESTRICTED];
     
    ALTERPLUGGABLE DATABASE CLOSE [IMMEDIATE];

     

    如果是在CDB中,可以使用如下语法:

    ?
    1
    2
    3
    4
    5
    6
    7
    ALTERPLUGGABLE DATABASE <pdd-name-clause> OPEN READ WRITE [RESTRICTED][FORCE];
     
    ALTERPLUGGABLE DATABASE <pdd-name-clause> OPEN READ ONLY [RESTRICTED] [FORCE];
     
    ALTERPLUGGABLE DATABASE <pdd-name-clause> OPEN UPGRADE [RESTRICTED];
     
    ALTERPLUGGABLE DATABASE <pdd-name-clause> CLOSE [IMMEDIATE];

    <pdd-name-clause>表示的是多个PDB,如果有多个,用逗号分开。 也可以使用ALL或者ALL EXCEPT关键字来替代。

     

    ALL:表示所有的PDBS。

    ALLEXCEPT 表示需要排除的PDBS。

     

    如:

    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    ALTERPLUGGABLE DATABASE pdb1, pdb2 OPEN READ ONLY FORCE;
     
    ALTERPLUGGABLE DATABASE pdb1, pdb2 CLOSE IMMEDIATE;
     
     
     
    ALTERPLUGGABLE DATABASE ALL OPEN;
     
    ALTERPLUGGABLE DATABASE ALL CLOSE IMMEDIATE;
     
     
     
    ALTERPLUGGABLE DATABASE ALL EXCEPT pdb1 OPEN;
     
    ALTERPLUGGABLE DATABASE ALL EXCEPT pdb1 CLOSE IMMEDIATE;

    示例:

    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    SQL>alter session set container=CDB$ROOT;
     
    Sessionaltered.
     
     
     
    SQL>select con_id, dbid, guid, name , open_mode from v$pdbs;
     
     
     
    CON_ID DBID GUID NAME OPEN_MODE
     
    -------------------- -------------------------------- --------------- ----------
     
    2 4088301206F7C1E3C96BBF0585E0430A01A8C05459 PDB$SEED READ ONLY
     
    3 426143573 F7C209EB1DFC0854E0430A01A8C0B787 PDBCNDBA READ WRITE
     
     
     
    SQL>ALTER PLUGGABLE DATABASE ALL CLOSE ;
     
    Pluggabledatabase altered.
     
     
     
    SQL>select con_id, dbid, guid, name , open_mode from v$pdbs;
     
     
     
    CON_ID DBID GUID NAME OPEN_MODE
     
    -------------------- -------------------------------- --------------- ----------
     
    2 4088301206F7C1E3C96BBF0585E0430A01A8C05459 PDB$SEED READ ONLY
     
    3 426143573 F7C209EB1DFC0854E0430A01A8C0B787PDBCNDBA MOUNTED
     
     
     
    SQL>alter session set container=pdbcndba;
     
     
     
    Sessionaltered.
     
     
     
    SQL>ALTER PLUGGABLE DATABASE OPEN;
     
     
     
    Pluggabledatabase altered.
     
     
     
    SQL> select con_id, dbid, guid, name , open_modefrom v$pdbs;
     
     
     
    CON_ID DBID GUID NAME OPEN_MODE
     
    -------------------- -------------------------------- --------------- ----------
     
    3 426143573 F7C209EB1DFC0854E0430A01A8C0B787PDBCNDBA READ WRITE

     

    3 设置Pluggable Database (PDB) 的自动startup

     

    默认情况下,在CDB 启动的时候,all 的PDB 都是mount状态,也没有默认的机制,在CDB启动时自动启动PDB。

     

    但这里可以通过触发器来实现PDB的自动open:

     

    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CREATEOR REPLACE TRIGGER open_pdbs
     
    AFTER STARTUP ON DATABASE
     
    BEGIN
     
    EXECUTE IMMEDIATE 'ALTERPLUGGABLE DATABASE ALL OPEN';
     
    END open_pdbs;
     
    /

    示例:

    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    SQL>show con_name
     
     
     
    CON_NAME
     
    ------------------------------
     
    PDBCNDBA
     
    SQL>alter session set container=CDB$ROOT;
     
     
     
    Sessionaltered.
     
     
     
    SQL>CREATE OR REPLACE TRIGGER open_pdbs
     
    2 AFTER STARTUP ON DATABASE
     
    3 BEGIN
     
    4 EXECUTE IMMEDIATE 'ALTER PLUGGABLE DATABASE ALL OPEN';
     
    5 ENDopen_pdbs;
     
    6 /
     
     
     
    Triggercreated.
  • 相关阅读:
    [javaSE] 数组(获取最值)
    [javascript] Promise简单学习使用
    [javaSE] 基本类型(String相关)
    [android] 手机卫士黑名单功能(ListView结合SQLite增删改)
    [PHP] 重回基础(IO流)
    [PHP] 重回基础(Array相关函数)
    [PHP] 重回基础(date函数和strtotime函数)
    [HTML5] Canvas绘制简单图片
    [javaSE] 集合框架(TreeSet)
    [android] 手机卫士黑名单功能(ListView优化)
  • 原文地址:https://www.cnblogs.com/huangmr0811/p/5570977.html
Copyright © 2011-2022 走看看