12c 資料庫管理 小結

kingsql發表於2014-10-22

12c 資料庫管理 總結

       新安了個12crac 環境,進去建立使用者和表才發現,12c對資料庫管理做了一些變更,再網上搜了一些文章,總結一下,方便以後使用。

Oracle 12C引入了CDBPDB的新特性,在ORACLE 12C引入的多租使用者環境(Multitenant Environment)中,允許一個資料庫容器(CDB)承載多個可插拔資料庫(PDB)。CDB全稱為Container Database,中文翻譯為資料庫容器,PDB全稱為Pluggable Database,即可插拔資料庫。在ORACLE 12C之前,例項與資料庫是一對一或多對一關係(RAC):即一個例項只能與一個資料庫相關聯,資料庫可以被多個例項所載入。而例項與資料庫不可能是一對多的關係。當進入ORACLE 12C後,例項與資料庫可以是一對多的關係。下面是官方文件關於CDBPDB的關係圖。

其實大家如果對比較熟悉的話,這種CDBPDB是不是感覺和SQL SERVER的單例項多資料庫架構是一回事呢。像PDB$SEED可以看成是mastermsdb等系統資料庫,PDBS可以看成使用者建立的資料庫。而可插拔的概念與SQL SERVER中的使用者資料庫的分離、附加其實就是那麼一回事。看來ORACLE也“抄襲”了一把SQL SERVER的概念,只是改頭換面的包裝了一番。

CDB元件(Components of a CDB

一個CDB資料庫容器包含了下面一些元件:

ROOT元件

ROOT又叫CDB$ROOT, 儲存著ORACLE提供的後設資料和Common User,後設資料的一個例子是ORACLE提供的PL/SQL包的原始碼,Common User 是指在每個容器中都存在的使用者。

SEED元件

   Seed又叫PDB$SEED,這個是你建立PDBS資料庫的模板,你不能在Seed中新增或修改一個物件。一個CDB中有且只能有一個Seed. 這個感念,個人感覺非常類似SQL SERVER中的model資料庫。

PDBS

     CDB中可以有一個或多個PDBSPDBS向後相容,可以像以前在資料庫中那樣操作 PDBS,這裡指大多數常規操作。

這些元件中的每一個都可以被稱為一個容器。因此,ROOT()是一個容器,Seed(種子)是一個容器,每個PDB是一個容器。每個容器在CDB中都有一個獨一無二的的ID和名稱。

1)連線到CDB資料庫

連線到CDB資料庫容器非常簡單,跟以前連線資料庫是一樣的

[oracle@get-orasvr02 ~]$ sqlplus / as sysdba
SQL*Plus: Release 12.1.0.1.0 Production on Sun Oct 20 23:41:36 2013Copyright (c) 1982, 2013, Oracle.  
All rights reserved.Connected to an idle instance.
SQL>
[oracle@getorasvr02 ~]$ sqlplus sys/password   as sysdba
SQL*Plus: Release 12.1.0.1.0 Production on Sun Oct 20 23:43:17 2013Copyright (c) 1982, 2013, Oracle. 
 All rights reserved.Connected to an idle instance.
SQL>

2)檢視資料庫是否為CDB

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
--------- -----------------------------   --------------------         ----------
E
      Multitenant Option enabled            READ WRITE                  0

YES表示該資料庫是CDB,如果是NO表示是NO-CDB(普通資料庫)

3)檢視當前容器(Container

3.1

SQL> show con_name
CON_NAME
------------------------------
CDB$ROOT
SQL> select sys_context('userenv', 'con_name') "Container DB" from dual;
Container DB
----------------------------------------------------
CDB$ROOT
SQL>

4)檢視CDB容器中的PDBS資訊

檢視CDB中有多少個pluggable database

SQL>  select con_id, dbid, guid, name , open_mode from v$pdbs;    
CON_ID       DBID GUID                             NAME                           OPEN_MODE
---------- ---------- -------------------------------- ------------------------------ ---------         
2 4071321146 E89E8DA2866E3157E043DE07A8C09238 PDB$SEED         READ ONLY      3 1930201447 E89E9418B882350CE043DE07A8C092B6 PDBEPPS          MOUNTED
SQL>

5)啟動PDB資料庫

方式1

SQL> alter pluggable database PDBEPPS open;
Pluggable database altered.
SQL> select con_id, dbid, guid, name , open_mode from v$pdbs;    
CON_ID       DBID GUID                             NAME                           OPEN_MODE
---------- ---------- -------------------------------- ------------------------------ ----------         
2 4071321146 E89E8DA2866E3157E043DE07A8C09238 PDB$SEED   READ ONLY         3 1930201447 E89E9418B882350CE043DE07A8C092B6 PDBEPPS         READ WRITE

方式2

SQL> alter session set container=PDBEPPS;
Session altered.
SQL> startupPluggable Database opened.
SQL>

6)關閉PDB資料庫

SQL> alter pluggable database PDBEPPS close;

Pluggable database altered.

SQL> select con_id, dbid, guid, name , open_mode from v$pdbs;

    CON_ID       DBID GUID                             NAME                           OPEN_MODE

---------- ---------- -------------------------------- ------------------------------ ----------

         2 4071321146 E89E8DA2866E3157E043DE07A8C09238 PDB$SEED                       READ ONLY

         3 1930201447 E89E9418B882350CE043DE07A8C092B6 PDBEPPS                        MOUNTED

SQL>

7)在容器間切換

SQL> alter session set container=PDBEPPS;

Session altered.

SQL> show con_name;

CON_NAME

------------------------------

PDBEPPS

SQL>

SQL> alter session set container=CDB$ROOT;

Session altered.

SQL> show con_name;

CON_NAME

------------------------------

CDB$ROOT

 

###以上總結來自  再次感謝眾網友博主的技術分享###

 

PDB和CDB概念是清楚了,可問題又來了:

 

1、我該如何建立新的資料庫?

create pluggable database pdb4

admin user odb4_admin identified by password

roles=(dba)

file_name_convert=('/u01/app/oracle/oradata/cdbtest/pdbseed','/u01/app/oracle/oradata/cdbtest/pdb4') ;

Pluggable database created.

 

2、既然現在一個例項對應多個資料庫,那麼我該如何連結到自己要管理的資料庫?

首先需要配置一下自己的DNS

[oracle@rac01 admin]$ cat tnsnames.ora 

# tnsnames.ora Network Configuration File: /u01/app/oracle/product/12.1.0/db_1/network/admin/tnsnames.ora

# Generated by Oracle configuration tools.

 

TESTSHF_N =

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST = scan-oracle)(PORT = 1521))

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = TESTSHF_N)

    )

  )

 

TESTSHF_BCL =

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST = scan-oracle)(PORT = 1521))

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = bcl1)

    )

  )

[oracle@rac01 admin]$ lsnrctl status

 

LSNRCTL for Linux: Version 12.1.0.2.0 - Production on 20-OCT-2014 12:07:17

 

Copyright (c) 1991, 2014, Oracle.  All rights reserved.

 

Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))

STATUS of the LISTENER

------------------------

Alias                     LISTENER

Version                   TNSLSNR for Linux: Version 12.1.0.2.0 - Production

Start Date                10-OCT-2014 11:46:30

Uptime                    10 days 0 hr. 20 min. 47 sec

Trace Level               off

Security                  ON: Local OS Authentication

SNMP                      OFF

Listener Parameter File   /u01/app/12.1.0/grid/network/admin/listener.ora

Listener Log File         /u01/app/grid/diag/tnslsnr/rac01/listener/alert/log.xml

Listening Endpoints Summary...

  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER)))

  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=10.109.67.52)(PORT=1521)))

  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=10.109.67.46)(PORT=1521)))

Services Summary...

Service "+ASM" has 1 instance(s).

  Instance "+ASM1", status READY, has 1 handler(s) for this service...

Service "TESTSHFXDB" has 1 instance(s).

  Instance "TESTSHF1", status READY, has 1 handler(s) for this service...

Service "TESTSHF_N" has 1 instance(s).

  Instance "TESTSHF1", status READY, has 1 handler(s) for this service...

Service "bcl1" has 1 instance(s).

  Instance "TESTSHF1", status READY, has 1 handler(s) for this service...

Service "bcl2" has 1 instance(s).

  Instance "TESTSHF1", status READY, has 1 handler(s) for this service...

The command completed successfully

 

[oracle@rac01 admin]$ sqlplus system/lkfi@testshf_n

 

SQL*Plus: Release 12.1.0.2.0 Production on Mon Oct 20 12:07:45 2014

 

Copyright (c) 1982, 2014, Oracle.  All rights reserved.

 

Last Successful login time: Mon Oct 20 2014 12:02:00 +08:00

 

Connected to:

Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production

With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,

Advanced Analytics and Real Application Testing options

 

SQL> 

 

3、再使用外部命令,如rman、exp/imp、expdp/impdp時該怎麼指定到我需要連結的資料庫呢?

TNS都配置好了,用TNS直接連結到資料庫不就可以了嘛^^

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28389881/viewspace-1306778/,如需轉載,請註明出處,否則將追究法律責任。

相關文章