Oracle 12.1發布至今已有多年,但國內Oracle 12C的用戶並不多,隨着12.2在去年的發布,選擇安裝Oracle 12c的客戶量明顯增加,在接下來的幾年中,Oracle 12c將逐步得到普及。
目前關於12C新特性的文章很多,但大多都不成體系,本次的文章是一個非常完整、連貫的系列,將帶你全面的從基礎到深入全方位的理解Oracle 12C。
本篇為Oracle 12c系列的開篇文章《Oracle 12c系列(1)Multitenant Container》。
可插入數據庫的概念
Oracle Multitenant Container Database(CDB),即多租戶容器數據庫,是Oracle 12C引入的特性,指的是可以容納一個或者多個可插拔數據庫的數據庫,這個特性允許在CDB容器數據庫中創建並且維護多個數據庫,在CDB中創建的數據庫被稱為PDB,每個PDB在CDB中是相互獨立存在的,在單獨使用PDB時,與普通數據庫無任何區別。
CDB根容器數據庫的主要作用就是容納所有相關的PDB的元數據,以及在CDB中對所有的PDB進行管理。
多租戶環境的組成
ROOT
- Root容器數據庫,是CDB環境中的根數據庫,在根數據庫中含有主數據字典視圖,其中包含了與Root容器有關的元數據和CDB中所包含的所有的PDB信息。在CDB環境中被標識為CDB$ROOT,每個CDB環境中只能有一個Root容器數據庫。
- CDB seedCDB seed為PDB的種子,其中提供了數據文件,在CDB環境中被標識為PDB$SEED,是創建新的 PDB的模板,你可以連接PDB$SEED,但是不能執行任何事物,因為PDB$SEED是只讀的,不可進行修改。
- PDBsPDB數據庫,在CDB環境中每個PDB都是獨立存在的,與傳統的Oracle數據庫基本無差別,每個PDB擁有自己的數據文件和objects,唯一的區別在於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數據庫。
Application Containers
在12cR2版本中,Oracle對多租戶功能進行了增強,在CDB root容器中可以創建一個叫做Application root的容器,可在其內創建多個依賴於Application root的Application PDBs,架構圖如下:

ApplicationContainers in a CDB

Application
更多的關於Application Containers相關內容請參考之前的ApplicationContainers系列:
《Oracle12cR2版本Application Containers特性(1)》
《Oracle12cR2版本Application Containers特性(2)》
《Oracle12cR2版本Application Containers特性(3)》
CDB環境中的用戶
CDB環境中包含兩類用戶,公用用戶和本地用戶。
丨公用用戶
公用用戶是在root數據庫中和所有的PDB數據庫中都存在的用戶,公用用戶必須在根容器中創建,然後此用戶會在所有的現存的PDB中自動創建,公用用戶標識必須以c##或者C##開頭,sys和system用戶是Oracle在CDB環境中自動創建的公用用戶。
create user c##yyh identified by yyh;
創建完成公用用戶,需要為公用用戶賦予所有可插拔數據庫的權限,公用用戶才可以訪問其他PDB,如果在連接根容器時僅僅為公用用戶賦予了相關權限,那麼該權限不會被傳遞到所有的可插拔數據庫中,必須為公用用戶賦予能夠傳遞到PDB中的權限,可以創建公用角色然後賦予公用用戶,或者在為公共用戶付權時指定子句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中創建的普通用戶,只有在創建它的PDB中才會存在該用戶,並且PDB中只能創建本地用戶。
CDB中你需要再次了解的基礎知識
丨SYSTEM/SYSAUX
在CDB的數據庫環境中,SYSTEM/SYSAUX表空間並不是公用,CDB$ROOT以及每個PDB都擁有自己的SYSTEM和SYSAUX表空間。
丨REDO文件
在CDB環境中所有的PDB共用CDB$ROOT中的REDO文件,REDO中的條目標識REDO來自那個PDB。
在PDB中無法執行ALTERSYSTEM SWITCH LOGFILE命令,只有公用用戶在ROOT容器中才可以執行該命令。
另外ALTER SYSTEM CHECKPOINT命令是可以在PDB中執行的。
丨歸 檔
在CDB環境中所有的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
在創建CDB時使用了SHARED UNDO MODE方式,如果後續想更改為LOCAL UNDO MODE,我們可以使用如下命令更改UNDO MODE為LOCAL UNDO MODE:
startup upgrade
alter database local undo on;
shutdown immediate
startup
更改為local undo後CDB中的所有的PDB會自動創建自己的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>
丨參數文件
參數文件中只記錄了根容器的參數信息,沒有記錄PDB級別的參數信息,在根容器中修改初始化參數,會被繼承到所有的PDB中,在PDB中修改參數後,PDB的參數會覆蓋CDB級別的參數,PDB級別的參數記錄在根容器的pdb_spfile$視圖中,但並不是所有的參數都可以在PDB中修改,可以通過v$system_parameter視圖查看PDB中可修改的參數:
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兩個參數。
丨控制文件
CDB環境中只有一組控制文件,所有的PDB共用這組公共的控制文件,從任何PDB中添加數據文件都會記錄到公共控制文件當中,公用用戶連接根容器時,可對控制文件進行管理。
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告警信息都會寫入同一個告警日誌中。
丨時區
在CDB環境中可以為CDB以及所有的PDB設置相同的時區,也可以為每個PDB設置單獨的時區。
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>
丨數據字典視圖與動態性能視圖
在CDB環境中引入了CDB級別的數據字典視圖,它的級別高於DBA_/ALL_/USER_,CDB級別的數據字典視圖含有所有PDB的元數據信息,其中增加了con_id列,con_id為CDB中所有容器唯一標識符,其中con_id為0的是CDB$ROOT,con_id為2的是PDB$SEED,每個PDB在CDB中都會分配一個唯一的con_id。如果要想查看CDB級別的數據字典視圖,必須使用公用用戶在跟容器中查看,並且要查看的PDB必須處於open狀態,才可以看到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的創建
如果要使用可插拔數據庫的功能,需要在創建數據庫時專門指定啟用可插拔數據庫,創建CDB通常有如下兩種方式:
- 使用DBCA圖形工具創建CDB這裡需要注意的是Oracle 12.2之後支持LOCAL UNDO,這裡注意需要手動要勾選LOCAL UNDO選項。
- CREATE DATABASE語句創建CDB在使用腳本創建CDB時Oracle提供了兩種方法,一種是使用OMF,另外一種是非OMF的方式,注意參數文件中需要將ENABLE_PLUGGABLE_DATABASE設置為TRUE。
這裡演示使用非OMF方式創建CDB,數據名稱為ora12c:
1.設置ENABLE_PLUGGABLE_DATABASE參數為TRUE,參數文件如下:
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.創建相應目錄以及設置環境變量
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有關,其他部分與創建傳統的Oracle數據庫語句均相同。
FILE_NAME_CONVERT
子句指定了使用’
/u01/app/oracle/oradata/ora12c/’中的文件名在’/u01/app/oracle/oradata/ora12c/pdbseed/’中生產CDBseeds。
USER_DATA_TABLESPACE
子句可以在容器中創建額外的表空間,這個表空間在後續使用PDB$SEED創建PDB時會被複制到PDB中。
4.將數據庫啟動到nomount狀態,然後執行上面createdb.sql腳本創建CDB
startup nomount;
@createdb.sql
當數據庫創建成功之後可以看到新建立的數據庫被加入到/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.查看監聽,根容器的服務ora12c.linux.com已經被註冊到監聽中。
Service"ora12c.linux.com" has 1 instance(s).
Instance "ora12c", status READY,has 1 handler(s) for this service...
6.運行catcdb.sql腳本創建CDB相關視圖:
@?/rdbms/admin/catcdb.sql
注意事項:
1.在catcdb.pl執行過中需要輸入兩個參數,文檔中並沒有指出是什麼參數.
第一個參數應輸入:
$ORACLE_HOME/rdbms/admin
第二個參數應輸入:
catcdb.pl
2.環境變量中必須將$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文件內容:
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連接到數據,在執行catcdb.sql,否則報如下錯誤:
Can'tlocate Util.pm
7.開啟localundo mode(因為上面再創建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>
重啟數據庫:
shutdown immediate
startup
啟動數據庫的過程中會在PDB$SEED中自動創建UNDO表空間,提供給後來採用PDB$SEED方式創建PDB所使用。
PS:如果CDB中已經存在多個PDB,當在根容器中使用alter database local undo on;開啟local undo mode時會自動為每個PDB創建local undo。
8.檢查CDB是否已經創建成功
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用戶連接根容器數據庫,在操作方式上與非CDB數據庫同樣。
當前連接容器的信息:
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,停止和啟動與普通數據庫的處理過程相同,當公用用戶連接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環境中表空間使用情況:
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;
在切換容器時無需運行監聽器和密碼文件。只要公用用戶擁有相關權限就可以切換到另外的容器中。
原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/250148.html