一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Oracle 12c系列(一)|多租戶容器數(shù)據(jù)庫

 天下小糧倉 2018-06-03


作者   楊禹航·沃趣科技高級數(shù)據(jù)庫技術專家

出品   沃趣科技



Oracle 12.1發(fā)布至今已有多年,但國內(nèi)Oracle 12C的用戶并不多,隨著12.2在去年的發(fā)布,選擇安裝Oracle 12c的客戶量明顯增加,在接下來的幾年中,Oracle 12c將逐步得到普及。

目前關于12C新特性的文章很多,但大多都不成體系,本次的文章是一個非常完整、連貫的系列,將帶你全面的從基礎到深入全方位的理解Oracle 12C。

可插入數(shù)據(jù)庫的概念


Oracle Multitenant Container Database(CDB),即多租戶容器數(shù)據(jù)庫,是Oracle 12C引入的特性,指的是可以容納一個或者多個可插拔數(shù)據(jù)庫的數(shù)據(jù)庫,這個特性允許在CDB容器數(shù)據(jù)庫中創(chuàng)建并且維護多個數(shù)據(jù)庫,在CDB中創(chuàng)建的數(shù)據(jù)庫被稱為PDB,每個PDB在CDB中是相互獨立存在的,在單獨使用PDB時,與普通數(shù)據(jù)庫無任何區(qū)別。

CDB根容器數(shù)據(jù)庫的主要作用就是容納所有相關的PDB的元數(shù)據(jù),以及在CDB中對所有的PDB進行管理。

多租戶環(huán)境的組成

  • ROOT
    Root容器數(shù)據(jù)庫,是CDB環(huán)境中的根數(shù)據(jù)庫,在根數(shù)據(jù)庫中含有主數(shù)據(jù)字典視圖,其中包含了與Root容器有關的元數(shù)據(jù)和CDB中所包含的所有的PDB信息。在CDB環(huán)境中被標識為CDB$ROOT,每個CDB環(huán)境中只能有一個Root容器數(shù)據(jù)庫。

  • CDB seed
    CDB seed為PDB的種子,其中提供了數(shù)據(jù)文件,在CDB環(huán)境中被標識為PDB$SEED,是創(chuàng)建新的 PDB的模板,你可以連接PDB$SEED,但是不能執(zhí)行任何事物,因為PDB$SEED是只讀的,不可進行修改。

  • PDBs
    PDB數(shù)據(jù)庫,在CDB環(huán)境中每個PDB都是獨立存在的,與傳統(tǒng)的Oracle數(shù)據(jù)庫基本無差別,每個PDB擁有自己的數(shù)據(jù)文件和objects,唯一的區(qū)別在于PDB可以插入到CDB中,以及在CDB中拔出,并且在任何一個時間點之上PDB必須拔出或者插入到一個CDB中,當用戶鏈接PDB時不會感覺到根容器和其他PDB的存在。

CDBwith PDBs

sys. ora12c>show pdbs
CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
    2 PDB$SEED                       READ ONLY  NO
    3 ORA12CPDB                      READ WRITE NO
    4 PDB2                           MOUNTED
    5 PDB1                           MOUNTED
    6 PDB3                           READ WRITE NO
sys. ora12c>

PDB$SEED為CDB seed,ORA12CPDB/PDB1/PDB2/PDB3為PDB數(shù)據(jù)庫。


Application Containers

在12cR2版本中,Oracle對多租戶功能進行了增強,在CDB root容器中可以創(chuàng)建一個叫做Application root的容器,可在其內(nèi)創(chuàng)建多個依賴于Application root的Application PDBs,架構(gòu)圖如下:

ApplicationContainers in a CDB

Application

更多的關于Application Containers相關內(nèi)容請參考之前的ApplicationContainers系列:

《Oracle12cR2版本Application Containers特性(1)》

《Oracle12cR2版本Application Containers特性(2)》

《Oracle12cR2版本Application Containers特性(3)》


CDB環(huán)境中的用戶

CDB環(huán)境中包含兩類用戶,公用用戶和本地用戶。

|  公用用戶

公用用戶是在root數(shù)據(jù)庫中和所有的PDB數(shù)據(jù)庫中都存在的用戶,公用用戶必須在根容器中創(chuàng)建,然后此用戶會在所有的現(xiàn)存的PDB中自動創(chuàng)建,公用用戶標識必須以c##或者C##開頭,sys和system用戶是Oracle在CDB環(huán)境中自動創(chuàng)建的公用用戶。

create user c##yyh identified by yyh;


創(chuàng)建完成公用用戶,需要為公用用戶賦予所有可插拔數(shù)據(jù)庫的權限,公用用戶才可以訪問其他PDB,如果在連接根容器時僅僅為公用用戶賦予了相關權限,那么該權限不會被傳遞到所有的可插拔數(shù)據(jù)庫中,必須為公用用戶賦予能夠傳遞到PDB中的權限,可以創(chuàng)建公用角色然后賦予公用用戶,或者在為公共用戶付權時指定子句container=ALL;
例如:

  或者
grant dba to c##yyh container=all;
create role c##dbaprivs container=all;
grant dba to c##dbaprivs container=all;
grant c##dbaprivs to c##yyh container=all;
 或者
grant dba to c##yyh container=all;


|  本地用戶

本地用戶指的是在PDB中創(chuàng)建的普通用戶,只有在創(chuàng)建它的PDB中才會存在該用戶,并且PDB中只能創(chuàng)建本地用戶。


CDB中你需要再次了解的基礎知識


丨SYSTEM/SYSAUX

在CDB的數(shù)據(jù)庫環(huán)境中,SYSTEM/SYSAUX表空間并不是公用,CDB$ROOT以及每個PDB都擁有自己的SYSTEM和SYSAUX表空間。

丨REDO文件

在CDB環(huán)境中所有的PDB共用CDB$ROOT中的REDO文件,REDO中的條目標識REDO來自那個PDB。

在PDB中無法執(zhí)行ALTERSYSTEM SWITCH LOGFILE命令,只有公用用戶在ROOT容器中才可以執(zhí)行該命令。

另外ALTER SYSTEM CHECKPOINT命令是可以在PDB中執(zhí)行的。

丨歸 檔

在CDB環(huán)境中所有的PDB共用CDB的歸檔模式,以及歸檔文件,不可以單獨為PDB設置自己的歸檔模式,只有特權用戶連接根容器之后才可以啟動歸檔模式。

丨UNDO MODE

在12.2之前的版本中,所有的PDB共用CDB$ROOT中的UNDO文件,在12.2之后的版本中UNDO的使用模式有兩種:SHARED UNDO MODE和LOCAL UNDO MODE,顧名思義,LOCAL UNDO MODE就是每個PDB使用自己的UNDO表空間,但當PDB中沒有自己的UNDO表空間時,會使用CDB$ROOT中的公共UNDO表空間。

查看UNDO表空間的使用模式(CDB$ROOT):

COL PROPERTY_NAME FOR A50
COL PROPERTY_VALUE FOR A50
COL DESCRIPTION FOR A50
SELECT property_name, property_value
FROM database_properties
WHERE property_name='LOCAL_UNDO_ENABLED';
PROPERTY_NAME        PROPERTY_VALUE
-------------------- --------------------
LOCAL_UNDO_ENABLED   TRUE


在創(chuàng)建CDB時使用了SHARED UNDO MODE方式,如果后續(xù)想更改為LOCAL UNDO MODE,我們可以使用如下命令更改UNDO MODE為LOCAL UNDO MODE:

startup upgrade
alter database local undo on;
shutdown immediate
startup


更改為local undo后CDB中的所有的PDB會自動創(chuàng)建自己的UNDO表空間。

丨臨時文件

每個PDB都有自己的臨時表空間,如果PDB沒有自己的臨時表空間文件,那么,PDB可以使用CDB$ROOT中的臨時表空間。

08:42:46 sys. woqu>select con_id, tablespace_name from cdb_temp_files;
CON_ID TABLESPACE_NAME
---------- --------------------
1 TEMP
3 TEMP
Elapsed: 00:00:00.11
08:43:02 sys. woqu>


丨參數(shù)文件

參數(shù)文件中只記錄了根容器的參數(shù)信息,沒有記錄PDB級別的參數(shù)信息,在根容器中修改初始化參數(shù),會被繼承到所有的PDB中,在PDB中修改參數(shù)后,PDB的參數(shù)會覆蓋CDB級別的參數(shù),PDB級別的參數(shù)記錄在根容器的pdb_spfile$視圖中,但并不是所有的參數(shù)都可以在PDB中修改,可以通過v$system_parameter視圖查看PDB中可修改的參數(shù):

SELECT name FROM v$system_parameter
WHERE ispdb_modifiable = 'TRUE'
ORDER BY name;
pdb_spfile$:
08:37:58 sys. yyh>show parameter open_cursors
NAME                                TYPE        VALUE
------------------------------------ ----------- -----
open_cursors                        integer     999
08:38:04 sys. yyh>show parameter local_listener
NAME                                 TYPE       VALUE
------------------------------------ ----------- ----------------
local_listener                      string      PDB_YYH
08:38:08 sys. yyh>select pdb_uid, name, value$ from pdb_spfile$;
PDB_UID NAME               VALUE$
---------- ------------------ ------------------
1167267009 open_cursors       999
1167267009 local_listener    'PDB_YYH'
Elapsed: 00:00:00.00
08:38:11 sys. yyh>


這里在PDB:1167267009中更改了open_cursors/ local_listener兩個參數(shù)。

丨控制文件

CDB環(huán)境中只有一組控制文件,所有的PDB共用這組公共的控制文件,從任何PDB中添加數(shù)據(jù)文件都會記錄到公共控制文件當中,公用用戶連接根容器時,可對控制文件進行管理。

20:51:03 sys. woqu>show parameter control_files
NAME                                TYPE        VALUE
------------------------------------ -----------------------------------------
control_files                        string      /u01/app/oracle/oradata/woqu/c
                                       ontrol01.ctl, /u01/app/oracle/
                                       oradata/woqu/control02.ctl
20:51:06 sys. woqu>
20:50:55 sys. woqupdb>show parameter control_files
NAME                                TYPE        VALUE
------------------------------------ -----------------------------------------
control_files                       string     /u01/app/oracle/oradata/woqu/c
                                        ontrol01.ctl,/u01/app/oracle/
                                       oradata/woqu/control02.ctl
20:51:23 sys.woqupdb>


丨告警日志以及跟蹤文件

在CDB中所有的PDB共用一個告警日志和一組跟蹤文件,所有的PDB告警信息都會寫入同一個告警日志中。

丨時區(qū)

在CDB環(huán)境中可以為CDB以及所有的PDB設置相同的時區(qū),也可以為每個PDB設置單獨的時區(qū)。

20:51:50 sys. woqu>show pdbs
CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED                       READ ONLY  NO
3 WOQUPDB                        READ WRITE NO
20:52:00 sys. woqu>select dbtimezone from dual;
DBTIME
------
+00:00
Elapsed: 00:00:00.00
20:52:01 sys. woqu>
20:51:53 sys. woqupdb>select dbtimezone from dual;
DBTIME
------
+08:00
Elapsed: 00:00:00.00
20:52:02 sys. woqupdb>


丨字符集

在CDB中定義字符集也可以應用于它所含有的PDB中,每個PDB也可以有自己的字符集設置。

20:52:33 sys. woqu>SELECT a.value || '_' || b.value || '.'|| c.value NLS_LANG
20:52:33   2  FROM nls_database_parameters a,nls_database_parameters b, nls_database_parameters c
20:52:33   3  WHERE a.parameter = 'NLS_LANGUAGE' ANDb.parameter = 'NLS_TERRITORY' AND c.parameter = 'NLS_CHARACTERSET';
NLS_LANG
----------------------------------------
AMERICAN_AMERICA.AL32UTF8
Elapsed: 00:00:00.06
20:52:33 sys. woqu>20:52:33 sys. woqu>
20:52:36 sys. woqupdb>SELECT a.value || '_' || b.value || '.'|| c.value NLS_LANG
20:52:36   2  FROM nls_database_parameters a,nls_database_parameters b, nls_database_parameters c
20:52:36   3  WHERE a.parameter = 'NLS_LANGUAGE' ANDb.parameter = 'NLS_TERRITORY' AND c.parameter = 'NLS_CHARACTERSET';
NLS_LANG
----------------------------------------
AMERICAN_AMERICA.ZHS16GBK
Elapsed: 00:00:00.08
20:52:36 sys. woqupdb>20:52:36 sys. woqupdb>

丨數(shù)據(jù)字典視圖與動態(tài)性能視圖

在CDB環(huán)境中引入了CDB級別的數(shù)據(jù)字典視圖,它的級別高于DBA_/ALL_/USER_,CDB級別的數(shù)據(jù)字典視圖含有所有PDB的元數(shù)據(jù)信息,其中增加了con_id列,con_id為CDB中所有容器唯一標識符,其中con_id為0的是CDB$ROOT,con_id為2的是PDB$SEED,每個PDB在CDB中都會分配一個唯一的con_id。如果要想查看CDB級別的數(shù)據(jù)字典視圖,必須使用公用用戶在跟容器中查看,并且要查看的PDB必須處于open狀態(tài),才可以看到PDB中的信息。

20:53:42 sys. woqu>showpdbs
CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED                       READ ONLY  NO
3 WOQUPDB                        READ WRITE NO
20:53:45 sys. woqu>
20:54:40 sys. woqu>select con_id, pdb_id, pdb_name, dbid, status fromcdb_pdbs;
CON_ID    PDB_ID PDB_NAME          DBID         STATUS
---------- --------- ------------------------------ --------------
2         2 PDB$SEED          2834527297   NORMAL      
3         3 WOQUPDB           3238406520   NORMAL
20:54:43 sys. woqu>


CDB的創(chuàng)建

如果要使用可插拔數(shù)據(jù)庫的功能,需要在創(chuàng)建數(shù)據(jù)庫時專門指定啟用可插拔數(shù)據(jù)庫,創(chuàng)建CDB通常有如下兩種方式:

  • 使用DBCA圖形工具創(chuàng)建CDB
    這里需要注意的是Oracle     12.2之后支持LOCAL UNDO,這里注意需要手動要勾選LOCAL UNDO選項。

  • CREATE DATABASE語句創(chuàng)建CDB
    在使用腳本創(chuàng)建CDB時Oracle提供了兩種方法,一種是使用OMF,另外一種是非OMF的方式,注意參數(shù)文件中需要將ENABLE_PLUGGABLE_DATABASE設置為TRUE。

這里演示使用非OMF方式創(chuàng)建CDB,數(shù)據(jù)名稱為ora12c:
1.設置ENABLE_PLUGGABLE_DATABASE參數(shù)為TRUE,參數(shù)文件如下:

audit_file_dest='/u01/app/oracle/admin/ora12c/adump'
audit_trail='none'
compatible='12.2.0'
control_files='/u01/app/oracle/oradata/ora12c/control01.ctl','
/u01/app/oracle/oradata/ora12c/control02.ctl'

db_block_size=8192
db_domain='linux.com'
db_name='ora12c'
diagnostic_dest='/u01/app/oracle'
enable_pluggable_database=true
memory_target=801m
nls_language='AMERICAN'
nls_territory='AMERICA'
remote_login_passwordfile='EXCLUSIVE'
undo_tablespace='UNDOTBS1'


2.創(chuàng)建相應目錄以及設置環(huán)境變量

export ORACLE_SID=ora12c
export ORACLE_HOME=$ORACLE_BASE/product/12.2.0/dbhome_1
export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$ORACLE_HOME/perl/bin:$ORACLE_HOME/jdk/bin:$PATH


3.CREATE DATABASE腳本createdb.sql如下:

CREATE DATABASE ora12c
USER SYS IDENTIFIED BY oracle
USER SYSTEM IDENTIFIED BY oracle
LOGFILE GROUP 1('/u01/app/oracle/oradata/ora12c/redo01a.log','/u01/app/oracle/oradata/ora12c/redo01b.log')
  SIZE 100M BLOCKSIZE 512,
GROUP 2('/u01/app/oracle/oradata/ora12c/redo02a.log','/u01/app/oracle/oradata/ora12c/redo02b.log')
  SIZE 100M BLOCKSIZE 512,
GROUP 3('/u01/app/oracle/oradata/ora12c/redo03a.log','/u01/app/oracle/oradata/ora12c/redo03b.log')
  SIZE 100M BLOCKSIZE 512
MAXLOGHISTORY 1
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 1024
CHARACTER SET AL32UTF8
NATIONAL CHARACTER SET AL16UTF16
EXTENT MANAGEMENT LOCAL
DATAFILE '/u01/app/oracle/oradata/ora12c/system01.dbf'
SIZE 700M REUSE AUTOEXTEND ON NEXT10240K MAXSIZE UNLIMITED
SYSAUX DATAFILE '/u01/app/oracle/oradata/ora12c/sysaux01.dbf'
SIZE 550M REUSE AUTOEXTEND ON NEXT10240K MAXSIZE UNLIMITED
DEFAULT TABLESPACE deftbs
DATAFILE'/u01/app/oracle/oradata/ora12c/deftbs01.dbf'
SIZE 500M REUSE AUTOEXTEND ONMAXSIZE UNLIMITED
DEFAULT TEMPORARY TABLESPACE tempts1
TEMPFILE '/u01/app/oracle/oradata/ora12c/temp01.dbf'
SIZE 20M REUSE AUTOEXTEND ON NEXT640K MAXSIZE UNLIMITED
UNDO TABLESPACE undotbs1
DATAFILE'/u01/app/oracle/oradata/ora12c/undotbs01.dbf'
SIZE 200M REUSE AUTOEXTEND ONNEXT 5120K MAXSIZE UNLIMITED
ENABLE PLUGGABLE DATABASE
SEED
FILE_NAME_CONVERT =('/u01/app/oracle/oradata/ora12c/',
             '/u01/app/oracle/oradata/ora12c/pdbseed/')
SYSTEM DATAFILES SIZE 125MAUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED
SYSAUX DATAFILES SIZE 100M
USER_DATA TABLESPACE usertbs
DATAFILE'/u01/app/oracle/oradata/ora12c/pdbseed/usertbs01.dbf'
SIZE 200M REUSE AUTOEXTEND ONMAXSIZE UNLIMITED;


這段代碼中"ENABLE PLUGGABLE DATABASE"之后部分與PDB有關,其他部分與創(chuàng)建傳統(tǒng)的Oracle數(shù)據(jù)庫語句均相同。

FILE_NAME_CONVERT    

子句指定了使用'/u01/app/oracle/oradata/ora12c/'中的文件名在'/u01/app/oracle/oradata/ora12c/pdbseed/'中生產(chǎn)CDBseeds。

USER_DATA_TABLESPACE    

子句可以在容器中創(chuàng)建額外的表空間,這個表空間在后續(xù)使用PDB$SEED創(chuàng)建PDB時會被復制到PDB中。

4.將數(shù)據(jù)庫啟動到nomount狀態(tài),然后執(zhí)行上面createdb.sql腳本創(chuàng)建CDB

startup nomount;
@createdb.sql


當數(shù)據(jù)庫創(chuàng)建成功之后可以看到新建立的數(shù)據(jù)庫被加入到/etc/oratab文件中。

#cat/etc/oratab
+ASM:/u01/app/11.2.0/grid:N
ora12c:/u01/app/oracle/product/12.2.0/dbhome_1:N
orcl:/u01/app/oracle/product/11.2.0/dbhome_1:N          # line added by Agent
newdb:/u01/app/oracle/product/12.2.0/dbhome_1:N
yyh:/u01/app/oracle/product/12.2.0/dbhome_1:N


5.查看監(jiān)聽,根容器的服務ora12c.linux.com已經(jīng)被注冊到監(jiān)聽中。

Service"ora12c.linux.com" has 1 instance(s).
Instance "ora12c", status READY,has 1 handler(s) for this service...


6.運行catcdb.sql腳本創(chuàng)建CDB相關視圖:

@?/rdbms/admin/catcdb.sql


注意事項:

1.在catcdb.pl執(zhí)行過中需要輸入兩個參數(shù),文檔中并沒有指出是什么參數(shù).

第一個參數(shù)應輸入:

$ORACLE_HOME/rdbms/admin


第二個參數(shù)應輸入:

catcdb.pl


2.環(huán)境變量中必須將$ORACLE_HOME/perl/bin指定到PATH中,否則報如下錯誤:

Can'tlocate Term/ReadKey.pm


3.需要將$ORACLE_HOME/perl/lib/5.22.0/x86_64-linux-thread-multi/Hash中的catcdb.pl文件內(nèi)容:

use Data::Dumper;
use util qw(trim, splitToArray);
use catcon qw(catconSqlplus);
更改為
use Data::Dumper;
use Utilqw(trim, splitToArray);
use catcon qw(catconSqlplus);


4.切換到$ORACLE_HOME/perl/lib/5.22.0/x86_64-linux-thread-multi/Hash目錄中,然后sqlplus連接到數(shù)據(jù),在執(zhí)行catcdb.sql,否則報如下錯誤:

Can'tlocate Util.pm


5.開啟localundo mode(因為上面再創(chuàng)建CDB時沒有加入localundo mode子句)

sys. ora12c>shutdown immediate
sys. ora12c>startup upgrade
sys. ora12c>alter database local undo on;
Database altered.
Elapsed: 00:00:00.72


查看是否為local undo mode:

SELECT property_name, property_value
FROM database_properties
WHERE property_name='LOCAL_UNDO_ENABLED';
PROPERTY_NAME        PROPERTY_VALUE
-------------------- --------------------
LOCAL_UNDO_ENABLED   TRUE
Elapsed: 00:00:00.02
sys. ora12c>


重啟數(shù)據(jù)庫:

shutdown immediate
startup


啟動數(shù)據(jù)庫的過程中會在PDB$SEED中自動創(chuàng)建UNDO表空間,提供給后來采用PDB$SEED方式創(chuàng)建PDB所使用。

PS:如果CDB中已經(jīng)存在多個PDB,當在根容器中使用alter database local undo on;開啟local undo mode時會自動為每個PDB創(chuàng)建local undo。

6.檢查CDB是否已經(jīng)創(chuàng)建成功

sys. ora12c>SELECT dbid, name, open_mode, cdb, con_id FROM v$database;
DBID NAME      OPEN_MODE            CDB     CON_ID
---------- --------- -------------------- --- ----------
323027068 ORA12C    READ WRITE           YES          0
Elapsed: 00:00:00.11
sys. ora12c>


此時CDB中含有兩個容器:根容器CDB$ROOT和種子容器PDB$SEED,如下:

sys. ora12c>SELECT con_id, dbid, con_uid, guid, name FROM v$containers;
CON_ID       DBID    CON_UID GUID                              NAME
------ ---------- ---------- --------------------------------- ----------
1  323027068          150A57CDEFD150C96E0530838A8C0206E CDB$ROOT
2 1453953285 145395328550A57CDEFD160C96E0530838A8C0206E PDB$SEED
Elapsed: 00:00:00.00
sys. ora12c>SELECT con_id, tablespace_name, file_id, file_name
FROM cdb_data_files;
CON_ID TABLESPACE_NAME FILE_ID FILE_NAME
------ --------------- ---------------------------------------------------
1 SYSTEM                1/u01/app/oracle/oradata/ora12c/system01.dbf
1 SYSAUX                3/u01/app/oracle/oradata/ora12c/sysaux01.dbf
1 UNDOTBS1              5/u01/app/oracle/oradata/ora12c/undotbs01.dbf
1 DEFTBS                6/u01/app/oracle/oradata/ora12c/deftbs01.dbf
Elapsed: 00:00:00.01
sys. ora12c>show con_id con_name user
CON_ID
------------------------------
1
CON_NAME
------------------------------
CDB$ROOT
USER is "SYS"
sys. ora12c>



CDB的管理

管理CDB時,通常需要使用sys用戶連接根容器數(shù)據(jù)庫,在操作方式上與非CDB數(shù)據(jù)庫同樣。

當前連接容器的信息:

1.
23:03:31 sys. woqu>show con_id con_name user
CON_ID
------------------------------
1
CON_NAME
------------------------------
CDB$ROOT
USER is "SYS"
23:03:33 sys. woqu>
2.
COL CON_ID FOR A10
COL CUR_CONTAINER FOR A25
COL CUR_USER FOR A25
SELECT
sys_context('USERENV','CON_ID')con_id,
sys_context('USERENV','CON_NAME') cur_container,
sys_context('USERENV','session_user') cur_user
FROM dual;
CON_ID     CUR_CONTAINER             CUR_USER
---------- ------------------------- -------------------------
1          CDB$ROOT                  SYS


啟動和停止CDB

只有公用用戶才可以連接根容器,并且啟動和停止CDB,停止和啟動與普通數(shù)據(jù)庫的處理過程相同,當公用用戶連接PDB時,無法啟動和停止CDB:

sys. ora12c>startup


默認情況下啟動CDB時不會自動啟動PDBs,我們可以使用手工的方式啟動PDB:

ALTER PLUGGABLE DATABASE [pdb_name] OPEN;
ALTER PLUGGABLE DATABASE ALL OPEN;     --打開所有PDB
sys. ora12c>shutdown immediate


在關閉CDB時,CDB中正在運行PDSs會也會關閉,連接CDB與PDBs的session均會斷開。

查看CDB環(huán)境中表空間使用情況:

with generator0 as
(select cf.con_id,cf.tablespace_name, sum(cf.bytes) / 1024 / 1024 frm
from cdb_free_space cf
group by cf.con_id,cf.tablespace_name),
generator1 as
(select cd.con_id,cd.tablespace_name, sum(cd.bytes) / 1024 / 1024 usm
from cdb_data_files cd
group by cd.con_id,cd.tablespace_name),
generator2 as(
select g0.con_id, c.name con_name, g0.tablespace_name, g0.frm, g1.usm
from generator0 g0, generator1 g1,v$containers c
where g0.con_id = g1.con_id
and g0.tablespace_name =g1.tablespace_name
and c.con_id = g1.con_id
union
select c.con_id,
c.name,
ct.tablespace_name,
null,
sum(ct.bytes) / 1024 / 1024
from v$containers c,cdb_temp_files ct
where c.con_id = ct.con_id
group by c.con_id, c.name,ct.tablespace_name)
select con_id,
case when con_name = LAG(con_name, 1) OVER(PARTITION BY con_name ORDER BYtablespace_name) THEN null ELSE con_name END
con_name, tablespace_name, frm freemb, usm usemb
from generator2
order by con_id;
CON_ID CON_NAME    TABLESPACE_NAME     FREEMB      USEMB
------ ------------ --------------- ---------- ----------
1 CDB$ROOT     SYSAUX                  28        470
1              SYSTEM              6.5625        810
1              TEMP                               33
1              UNDOTBS1            1.9375         60
1              USERS                    4          5
3 ORA12CPDB    SYSAUX              18.125        360
3              SYSTEM                1.25       250
3              TEMP                               64
3              UNDOTBS1                33        100
3              USERS                    4          5


切換容器

使用公用用戶連接CDB后可以使用alter session的方式切換不同的容器:

alter session set container=pdb1;
alter session set container = cdb$root;


在切換容器時無需運行監(jiān)聽器和密碼文件。只要公用用戶擁有相關權限就可以切換到另外的容器中。


| 作者簡介

楊禹航·沃趣科技高級數(shù)據(jù)庫技術專家

熟悉Oracle數(shù)據(jù)庫內(nèi)部機制,豐富的數(shù)據(jù)庫及RAC集群層故障診斷、性能調(diào)優(yōu)、OWI、數(shù)據(jù)庫備份恢復及遷移經(jīng)驗。

相關鏈接

Oracle 12c R2版本 Application Containers 特性(二)

Oracle 12c R2版本 Application Containers 特性(一)

Oracle 12c系列(七)| Non-CDB轉(zhuǎn)換為PDB

挽救DG中主庫的nologging操作的塊

SQL優(yōu)化案例-正確的使用索引(二)




更多干貨,歡迎來撩~

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    国产欧美日韩在线精品一二区| 黄色片一区二区三区高清| 东京热加勒比一区二区三区| 蜜桃传媒视频麻豆第一区| 欧美成人黄色一区二区三区| 国产精品欧美激情在线播放| 国产内射一级一片内射高清视频| 欧美日韩视频中文字幕| 免费人妻精品一区二区三区久久久| 国内女人精品一区二区三区| 日韩精品中文字幕亚洲| 欧美一本在线免费观看| 精品午夜福利无人区乱码| 加勒比东京热拍拍一区二区| 大屁股肥臀熟女一区二区视频| 91亚洲精品亚洲国产| 最近日韩在线免费黄片| 精品国模一区二区三区欧美| 精品少妇人妻av一区二区蜜桃| 丁香六月啪啪激情综合区| 人妻少妇av中文字幕乱码高清| 高潮少妇高潮久久精品99| 91欧美日韩中在线视频| 精品国产品国语在线不卡| 成人午夜爽爽爽免费视频| 国产日韩熟女中文字幕| 欧美精品中文字幕亚洲| 国产免费一区二区三区不卡| 日韩人妻中文字幕精品| 免费观看一级欧美大片| 欧美日韩亚洲国产精品| 午夜久久精品福利视频| 国产综合欧美日韩在线精品| 欧美熟妇喷浆一区二区| 成年午夜在线免费视频| 久久福利视频视频一区二区 | 午夜亚洲少妇福利诱惑| 五月婷婷综合激情啪啪| 国产欧美日韩精品一区二| 国产精品福利一二三区| 日韩欧美好看的剧情片免费|