找回密码
 注册
查看: 4468|回复: 1

Oracle12c创建新用户提示公共用户名或角色无效

[复制链接]

0

主题

0

回帖

9

积分

管理员

积分
9
QQ
发表于 2018-11-10 21:51:32 | 显示全部楼层 |阅读模式
 今天将备份的数据库还原到一台新的电脑上,首先要创建用户,执行如下语句:
create user fxhyidentified by "123456"default tablespace USERStemporary tablespace TEMP;

% a& ^5 }: N; m- o8 w0 `) f
  结果出现了一个错误:
  
  我们可以看出提示的是:公共用户名或角色无效。这时候我就郁闷了,呃,查资料,发现创建用户的时候要以c##开头,也就是刚才的创建语句应该这么写:
create user c##fxhyidentified by "123456"default tablespace USERStemporary tablespace TEMP;
' N( |, J) G  N& [3 S5 Y
  就这样试了一下,果真创建成功了,可是为什么要这么做,有些不明白,然后继续查资料,原因是这样的:
  Oracle 12C引入了CDB与PDB的新特性,在ORACLE 12C数据库引入的多租用户环境(Multitenant Environment)中,允许一个数据库容器(CDB)承载多个可插拔数据库(PDB)。CDB全称为Container Database,中文翻译为数据库容器,PDB全称为Pluggable Database,即可插拔数据库。在ORACLE 12C之前,实例与数据库是一对一或多对一关系(RAC):即一个实例只能与一个数据库相关联,数据库可以被多个实例所加载。而实例与数据库不可能是一对多的关系。当进入ORACLE 12C后,实例与数据库可以是一对多的关系。下面是官方文档关于CDB与PDB的关系图。
  
# t& |2 J9 V) S8 ~
  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中可以有一个或多个PDBS,PDBS向后兼容,可以像以前在数据库中那样操作PDBS,这里指大多数常规操作。
  这些组件中的每一个都可以被称为一个容器。因此,ROOT(根)是一个容器,Seed(种子)是一个容器,每个PDB是一个容器。每个容器在CDB中都有一个独一无二的的ID和名称。
  怎么查看数据库是否为CDB?
    执行下面这条语句:    
select CDB from v$database;

  z( `% H1 W: D2 g
    如果得到的结果为YES,那么就是CDB的数据库,否则,则不是。
  怎么查看当前的容器?
    执行下面这条语句:
show con_name;
5 s3 Y( l& n2 {# e! X4 b  f
    执行结果如下:
     
  怎么查看CDB中的PDB信息?
    执行下面这条语句:      
select con_id, dbid, guid, name , open_mode from v$pdbs;
8 {. W. W- }; r3 S& T

( Y; G9 _7 s. X: V/ y5 e5 F   执行结果如下:: Y" j/ \/ m: b! c: @+ @
0 }/ S. M6 y% z# u; `0 _2 ^" V
   
4 C. P. d) }8 {) F$ I
 启动PDB数据库的方式:4 ~! f* S1 C" q+ i% y0 N
  
/ M0 o. @6 S3 K, I( k. c   执行下面这条语句:
1 j7 m% T% L6 ^0 {! Y6 f / u( \9 \6 l$ K: e) O, X4 N; y
     
alter pluggable database PDBORCL open;

+ [6 ]8 y1 [- Q4 o6 p7 [% O
; R4 ?! s, ~$ `+ ^7 U   执行结果如下:

6 P# p4 r) C, T; q关闭PDB数据库的方式:
/ M& O/ J7 L- x: k6 i  
6 {9 I2 y" D2 l# Z   执行下面这条语句:- o" n& u( u% [7 \* |  ?- i
 
alter pluggable database PDBORCL close;
6 t  M8 Z2 m, e* Z0 [3 D0 A
$ B5 C# k) b4 F+ ?( H" u
   执行结果如下:
  在容器间切换:   
alter session set container=PDBORCL;alter session set container=CDB$ROOT;
2 B* Q2 i2 h& m+ k
--------------------------------------------------------------分割线------------------------------------------------------------------------
那么说了这么多,怎么就可以创建用户而不用加c##了呢,我在这里创建一个新的数据库,步骤如下:
  打开 Database Configuration Assistant
  
  出现如下界面:
  点击“下一步”出现如下界面,在创建数据库的时候将“创建为容器数据库”项取消勾选。
  这样新创建的数据库就可以使用了。

0

主题

0

回帖

9

积分

管理员

积分
9
QQ
 楼主| 发表于 2018-11-10 22:12:39 | 显示全部楼层
1  Container Database (CDB)
4 K6 r# `/ _- o2 F) g# l9 N- L/ @1 |* b
 
! e" X) v+ R0 g6 U( }3 O
3 v' l% z) t3 D# B: W对于CDB,启动和关闭与之前传统的方式一样,具体语法如下:
8 X: O+ x% \1 v0 @' C7 m
, I5 Y, u- Q' |/ J8 xSTARTUP[NOMOUNT | MOUNT | RESTRICT | UPGRADE | FORCE | READ ONLY]# f! s; O; _2 V# p" K
  k  a3 B: |- P4 |6 V! l7 H3 s$ ?
SHUTDOWN[IMMEDIATE | ABORT]7 Y6 K5 d# d0 X; V. [9 X

' g3 C3 ]0 \* l! l* ], s ( O* D8 F7 y( y& G9 O) k# W

- X: R/ P3 q" ~" t! D 
$ n0 p% s! Q+ X5 |, {$ H/ B$ B* N  m) b* q+ C& j: k
要注意,在12c数据库创建完成后,默认情况下使用sqlplus / as sysdba  登录连接的是CDB。+ |) n: I* k' n3 z6 d% s' H  B
  a2 l5 V. ?8 f% F
 
7 {. s8 R# m. R( o- u' ?
7 d% R) Q% w, o1 n. _8 L[oracle@Ora12c~]$ sqlplus / as sysdba
% x7 r: V0 T& c
1 h9 c& ]* V# V) k 
" V( C4 X, n( H- }3 f5 T- R% B  K# Q' E' m& r( O2 y9 K# s
SQL*Plus:Release 12.1.0.1.0 Production on Thu Apr 24 17:50:34 2014
3 ?- [1 ~' H# u$ c* x5 Y
5 i+ M7 f5 x6 y+ V / C: E& |1 v1 ]4 }
5 T5 r- Q, E# w" s+ G
Copyright(c) 1982, 2013, Oracle.  All rightsreserved." |6 K- M, f; U* n7 Q( L

: W4 ]1 R! y5 e, ~( R/ v3 t- q- J 
* I! p2 A; e8 G' `, G$ h1 O# m: H& h2 L( Z9 _4 d) {1 c1 Q3 t5 n, U
 
2 h/ {/ m$ a+ h% R4 S4 R
. v. q* Y6 H$ ~0 H. lConnectedto:; F! ^) d7 U1 ~/ g2 a

' n0 ?& |, [% S' \# r8 B% COracleDatabase 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production6 s4 q! G% D+ a; t+ z7 X

! [( ^' C* h1 T& pWiththe Partitioning, OLAP, Advanced Analytics and Real Application Testing options
9 d; w: [6 n3 o
# y+ s' W/ [6 w9 B 6 ]+ X7 e) g7 |" {$ E+ b
$ \8 a, U0 P% z4 b' n( Q: W
SQL>show con_name1 h& x" R& K$ Q
: j# d' ?% U' _
 
7 X# }& z; H- m! q2 W  ^  S$ O
CON_NAME( C# v9 j1 @9 H. \+ k4 i: ?0 q
8 ]1 N3 `- q# [
------------------------------& a- V8 d$ P* O2 A: w1 `" i' {

5 F. ^1 _$ S& S- Q1 O: D: b$ rCDB$ROOT
- X0 B5 d. @! o$ s* C3 s; `# i3 `) p) p7 x
SQL>
2 H0 E5 e9 p) C* T. v( O* s# B4 C& _7 ^9 B' t
 
5 P$ B) ]& l0 L( m* Z* \! a
# u: N2 K) S5 m; r5 ]7 {5 OSQL>select con_id, dbid, guid, name , open_mode from v$pdbs;
! U  V* L7 _2 D( a5 M$ c$ O9 Z
3 ]7 \% W' u$ w3 N) i% _ 
. p5 F5 E7 r2 v/ B4 a* }& O7 Q0 f; Y( c, E6 Z$ r
    CON_ID      DBID GUID                            NAME                          OPEN_MODE+ l$ `. |' \7 _
& a: [9 Z: B* u' W( Y/ |5 L
---------- ------------------------------------------ ------------------------------ ----------* s) W" U# R% Z+ s
# U! B' t" ?$ P  j, v2 F! p
         2 4088301206 F7C1E3C96BBF0585E0430A01A8C05459PDB$SEED                       READ ONLY+ L* I7 P3 s) W; G! R. t
1 L; }- p2 X% y9 d0 q3 ^( K
         3 426143573 F7C209EB1DFC0854E0430A01A8C0B787 PDBCNDBA                       READ WRITE5 Z4 M, v1 [. e* j$ l, ]/ P
( J! C6 A6 F& a6 }+ W
 
! u; T0 C' k4 g; @# r  O# P8 s
. k% L" H9 m0 Q+ \0 D: Y/ G. v我们现在连接的是CDB,即root container。8 s! M% e7 o, w7 w9 W

1 e7 @2 I( w" V  c- { 
0 x+ D8 G9 e9 }) x4 g
3 h: s) e- I# [% t  R3 E我们关闭CDB:. D+ A0 P1 g# ?. @
+ w; L2 g$ y6 L5 c7 c0 S& G* R
SQL>shutdown immediate
/ S. n( u8 j. w9 L
1 b' S( u2 F  i2 ~) r: ?- ^Databaseclosed.6 `. ~" F1 ^3 r) H. Q/ Z9 t
# m  P7 }' U2 s2 e
Databasedismounted.
1 K1 Y# M- x  W5 y8 b
% m. _# B* |+ [( gORACLEinstance shut down.
6 U" J) k: l4 ]; o1 m# B0 W& F) ~' R
 # u3 h. }( Q; |& o
  w$ f  l* V% {
我们关闭CDB之前PDB 是没有关闭的,所以这个操作也会把PDB 关闭掉。
: k" b4 k% j+ B2 p+ H
8 U( y8 J: [" }; w8 ] . o, u$ j# V" @

! V2 {: O0 c8 @; K+ VSQL>startup
* r  e4 h3 u% C5 M0 H9 ?# w. N1 G: ~
ORACLEinstance started.
/ d' @. ], a; Q% S& t4 u- T/ p( i/ i/ f1 t  W  p2 ~
 
9 N' l: U6 I8 w+ q8 g! X
5 B. u  f  R$ a/ l( l/ l% m6 C4 R! XTotalSystem Global Area 1269366784 bytes
2 q9 K$ b' ], E5 {
& L; `0 z9 B  l' o* ^FixedSize                  2287912 bytes% U: Y( t# u) T
6 j3 V; c9 ~" Q- L/ w. H! ?
VariableSize             788530904 bytes0 ~/ |# _- Y  ~, ^

6 I) ]! }; H% W/ X, XDatabaseBuffers          469762048 bytes4 s  K2 s+ H7 @+ a7 H/ D' i& T

5 m7 [8 E( n9 BRedoBuffers                8785920 bytes
% I3 m: A7 P* i( D! P. x" R$ j
' t- k0 Y7 Y7 S& W' _4 VDatabasemounted.( s* |. c; E- z
" F1 E% c& d4 L9 N% C
Databaseopened.
& {6 l. _, J; Y3 T! ?8 X+ }" X% i& y' Y5 I) m* W1 e
 : Z& Z0 E; m. s/ b/ [
% g. L* P3 V3 D) f# s6 S
SQL>  select con_id, dbid, guid, name , open_modefrom v$pdbs;
/ w$ X6 V5 V  c, G/ X( H7 H3 M, B3 E* e. Q% a( t; J3 r3 i6 C" r4 U
 
7 g6 D' O! G3 N9 \& U9 W! y0 [$ Y5 r$ ^' B! b( G( B! N
    CON_ID      DBID GUID                            NAME                          OPEN_MODE0 \) e: N: F  I+ ^7 k2 {

$ \' ^2 G8 b# x( O: ]. |---------- ------------------------------------------ ------------------------------ ----------
. u7 a: r3 t. p1 Z3 S* X+ V* \
/ w" Z" K. W' n8 a* l( ?3 L; y         2 4088301206F7C1E3C96BBF0585E0430A01A8C05459 PDB$SEED                       READ ONLY( v6 v; a( m5 i+ k& P
. t2 |- k+ N3 u) T  |$ W
         3 426143573 F7C209EB1DFC0854E0430A01A8C0B787 PDBCNDBA                       MOUNTED$ k8 ~9 a5 q% {7 O7 Z) W
7 d; `2 Z% f0 J% Q( s7 Y3 G
 $ M6 P! d7 P, {
8 O/ R! O; v! r) M
注意这里的PDB,在CDB 启动之,PDB 是自动启动到mount状态,而不是OPEN。 所以我们还需要手工去open它,当然,也可以通过在CDB中配置触发器来自动open。
& j+ n) U# i  U) ?* u% H! D! [/ R7 s* f3 ^3 b4 K
 ! ~1 y3 z% H3 d' c
! J% W) a+ I2 N; y/ ?* y1 G. C! ]
 
( {, Y: v3 S+ c- g; U' d' G( p% q( h* Z3 I" S" y
2  Pluggable Database (PDB)
1 z( w) a7 n1 }% A) {# T/ \9 m% k! f5 U6 @. k# d
 
/ v) w) s4 o+ t. z% q. J8 w2 f. `/ K2 E! @* M* {( G
PDB 的操作可以通过SQL*PLUS 来操作,也可以通过ALTER PLUGGABLE DATABASE 命令操作。
, i4 M/ p: n9 L
+ k% Q0 q  ]5 F" y" c' Y 6 }$ T! q3 K, a9 |: W

7 N, z' @$ I: K! r2.1             使用SQL*Plus 命令% \, q7 l0 \. K

& {# G2 z- ]7 c$ K ( g4 t3 ]) {# j; K
3 U$ z2 y2 x2 f- f/ O
 # N+ k4 O  x' D7 t. a! D1 @

2 w% T+ A& g/ n! `0 p! x; n因为默认连接的是CDB,所以必须先指定PDB才可以通过sqlplus来启动和关闭PDB,0 l9 d8 R! f& ~, ?9 v$ j+ c

: |* y6 A% B  t# q( k3 Z5 G 
: S) Z8 C0 r, I* f  v# p; n" {+ o* Q# u5 a3 W: W
具体语法和普通实例一样:
& T+ R& c% n5 R! D6 l
5 J6 `8 U3 Z% R5 f* a7 l% @7 O 
& a6 K1 I9 z9 o, b
$ K4 o3 T7 x7 y: l5 G7 H( x: W( T5 iSTARTUPFORCE;
5 S* G& q* X" u" \+ Q" }
) N4 K. Z) N! q1 s2 {, fSTARTUPOPEN READ WRITE [RESTRICT];" I- `; m( c0 E: o( O3 d. [/ x) O% J
, k/ {+ j: C4 `0 {
STARTUPOPEN READ ONLY [RESTRICT];5 D5 q& w, v) @* {
* c; N% O$ [9 H3 P" c
STARTUPUPGRADE;9 R, z5 f  C. H% _% F
8 o  {- ]: J0 ?+ W  u
SHUTDOWN[IMMEDIATE];
1 O1 C, H: ?& p1 i- t3 J" s  p2 f" `% b1 T% N4 u1 A0 l
 % y& Q8 ?& b% u8 c4 x+ ^
: b0 \- Q: d3 {' e. J  G; e& W
SQL>show con_name
$ G9 t$ T' z/ ]4 a* h6 F' L* e! L' P, _: V& b, H  |
 
# I( p* W2 G, K6 U9 B$ l8 H2 ]& O( F. u
CON_NAME
* C: K3 ^0 c; G  E; C- U7 P( _9 Y; G% p
------------------------------
# C/ Z9 Q# N5 C3 c- Y- w
% b+ O: q+ K7 I+ ^( o+ M! yCDB$ROOT
1 _; w5 V7 f1 e/ W
: j# t$ u3 n( k$ ~! L) g6 z 
7 K# K/ {$ u  {2 y! O6 c7 a2 P
9 H% T  S( Z4 ]SQL>selectcon_id, dbid, guid, name , open_mode from v$pdbs;
! B" z; _+ h' U- u% _& m
* j8 r1 _! g8 W! ~; _ 2 o5 _* W: _) h, T6 ^+ p

7 c; P% H9 }9 A; @    CON_ID      DBID GUID                            NAME            OPEN_MODE# R" Q8 p% `& I: g
( U9 J- x, V/ w+ a
-------------------- -------------------------------- --------------- ----------+ j, L! k& _1 ~0 W: |" ^5 i' c$ c3 n
% L/ o0 [; J, Y! P( T
         2 4088301206F7C1E3C96BBF0585E0430A01A8C05459 PDB$SEED       READ ONLY
, `: d' a+ w  @! J+ r" U! r! w* b( B: e/ k$ S0 g8 A' Q( ^
         3 426143573 F7C209EB1DFC0854E0430A01A8C0B787 PDBCNDBA        MOUNTED2 [/ _5 c: o) s5 m9 q) a

0 V6 W1 i% w+ C - L7 ^( A6 r5 D$ ^3 {7 h
8 ~. k8 B3 s- g: V$ u1 K
注意这里是mount,表示PDB 是关闭的。) H" E5 Y$ h4 L) W4 y

% l5 W1 T, _7 U% P ' P1 a' p; g& i) `8 \- S
- T5 E; O7 S( k( d& v
--指定PDB 数据库:% k* E( ^: w/ }& r) g

6 r  X- S4 _3 m$ u, R; kSQL>alter session set container=pdbcndba;" \, E- n  P) z2 b& L$ I& U
$ G8 k" Z: r9 e1 W7 L# m$ L
Sessionaltered.
6 E6 W) y7 {* j# k$ E; E2 f# I( q" m' n  ^' H' Y( e
 
2 z: L" w& O5 o8 X6 I% F1 r
+ o$ L3 [& ~& ]2 C( VSQL>startup7 }! i& E. k1 ~( _

1 |) t% q" N8 z- x$ ]1 A1 }PluggableDatabase opened.
1 }4 b# s: V; q2 |0 L- E; H+ b' j3 y) r+ J5 f
SQL>select con_id, dbid, guid, name , open_mode from v$pdbs;/ t, x9 N7 s; H% T

! O* F2 c4 [* z7 N7 D 
' o& R7 ^" x& b; O/ C
( N  M& a3 X( N( f7 G, `    CON_ID      DBID GUID                            NAME            OPEN_MODE
/ S9 t/ Z8 p3 b, y/ ^2 r! K; A" r% N. T" y
-------------------- -------------------------------- --------------- ----------( j3 h/ A+ J: C( Z9 J+ h

; @; K: l+ P) j* o1 @         3 426143573 F7C209EB1DFC0854E0430A01A8C0B787 PDBCNDBA        READ WRITE1 S6 e& k. U9 s" ~4 n2 k& k# k
1 M4 B7 ^( y* I
SQL>3 Y' |2 @* ?8 z7 d" S

4 s8 E" @) i; x 
: a& \* x9 R9 n, c: C2 Z, T- Z3 _* M, t& S! L8 y+ ], J7 v* x" L
启动成功。 当我们切换到PDB之后,就看不到seed PDB的信息了。
0 ~9 W9 G; R0 B3 j
/ G" q/ [: d  v" {2 U0 I 
  @8 d7 m$ h  D: p3 o! o4 H) v9 m5 r  P6 i: V; d
 
! z* I6 L. j% M& I
5 R+ x, A! u' }5 t2.2             使用ALTER PLUGGABLE DATABASE命令8 p4 V$ g: e8 x7 ~

: Q1 |- w2 k0 U3 ]( M* ^ 
8 ~5 i* y1 d  {; O
  D' p% w- {+ c4 k4 q8 [2 |4 g$ A; x如果在PDB中可以使用如下语法:. \% ]8 q2 [* U% l9 s
) y! [. M. W. M8 o! I
 , o; m6 \5 g3 I, I$ ], q

; Y) m9 X" g6 R0 U( h5 XALTERPLUGGABLE DATABASE OPEN READ WRITE [RESTRICTED] [FORCE];
0 n* B2 t6 D% e0 g; h3 C6 ]: T! v" r" t. f/ u/ Q! B& k& @
ALTERPLUGGABLE DATABASE OPEN READ ONLY [RESTRICTED] [FORCE];
. z0 l) f5 S  [
8 a' K  r: _: E0 c4 R2 V* uALTERPLUGGABLE DATABASE OPEN UPGRADE [RESTRICTED];, U6 w/ |9 c) C, c8 c1 v. f
$ S7 d# {0 q' r) R* `* v  ~2 [
ALTERPLUGGABLE DATABASE CLOSE [IMMEDIATE];
: r* Z4 n; r4 z1 Z" K3 N2 Y5 f% F9 D9 j/ H2 x0 A
 1 V& n; q$ r+ M3 o- ~

4 T* J3 t) N: ?4 l+ _, {如果是在CDB中,可以使用如下语法:
: g$ b' h) S3 m  ^- b6 e' [
; Q, P- h. S2 o) L  F! ?ALTERPLUGGABLE DATABASE <pdd-name-clause> OPEN READ WRITE [RESTRICTED][FORCE];
2 r* z% l; q9 Q. l" V' |9 q9 N7 F" h# }/ W  M9 e5 k
ALTERPLUGGABLE DATABASE <pdd-name-clause> OPEN READ ONLY [RESTRICTED] [FORCE];
4 U" B( B, X) A8 R5 g! [/ C7 ?; k& a
ALTERPLUGGABLE DATABASE <pdd-name-clause> OPEN UPGRADE [RESTRICTED];' m' ^( t$ ^: V/ w, t/ T
5 v' ?! w$ _+ q3 l/ P" e
ALTERPLUGGABLE DATABASE <pdd-name-clause> CLOSE [IMMEDIATE];3 m) G/ j* L" t$ y4 T! f9 s

& I' x6 R( k; C, h* F ! O9 K, i- h% d+ Q

4 R: v% P$ }% h3 @6 X; q<pdd-name-clause>表示的是多个PDB,如果有多个,用逗号分开。 也可以使用ALL或者ALL EXCEPT关键字来替代。
0 h4 \5 n. x& e" L2 _3 l' o
+ U. ~2 L6 a, G, p/ j* e- c   w/ e/ ]" x! q2 C) e7 Q/ F, A
  N* L! k6 c7 Q! ~) ?2 R
ALL:表示所有的PDBS。
% q* F  y+ S+ v! ]" }2 e3 r
, R% {1 @  S( y9 h/ i( _ALLEXCEPT 表示需要排除的PDBS。
" x  E, a% h( R6 `8 \" n7 ?& l2 x" z5 s3 Q- x& N, L$ N- [2 B7 w
 
1 C2 @6 F) J/ W$ m5 Y/ H& K3 g- E6 }, L5 d3 i0 S- A
如:
) s* {* I0 J4 ~9 {* {( _* b8 C" K5 u! h
ALTERPLUGGABLE DATABASE pdb1, pdb2 OPEN READ ONLY FORCE;
* q. z/ T( u4 v- J; p: G6 N, X$ _0 {  R# W1 O% Q
ALTERPLUGGABLE DATABASE pdb1, pdb2 CLOSE IMMEDIATE;0 X! P3 O& q% ?$ W( d" f$ m0 V
2 T7 ?4 P$ Z# m9 Z. t
 
0 I/ L: ^! i4 @8 Y9 e8 U/ w+ ]( h. D% o& D0 s5 q4 j) Q
ALTERPLUGGABLE DATABASE ALL OPEN;, g5 [" `9 I8 t0 c1 t
1 o! _" L% E4 D( j  z4 e
ALTERPLUGGABLE DATABASE ALL CLOSE IMMEDIATE;
) W! [7 A2 m. I: Z8 @- S3 V$ {  [' ^& s3 d) z; {4 ?; T# n
 
: o2 e  P) q4 O+ r
4 S, P& @# k& hALTERPLUGGABLE DATABASE ALL EXCEPT pdb1 OPEN;
6 i! b6 T/ L& r/ \0 A( g! r) g
% w6 U0 K) A# |$ j& g, K+ W# i- GALTERPLUGGABLE DATABASE ALL EXCEPT pdb1 CLOSE IMMEDIATE;
, L* Z% M! u5 E$ R$ [5 V
- N: ?" U( j0 R: S 
2 ]- O5 n) R% d2 y# x# D
6 h7 a  w0 H* O0 N- s7 M示例:
5 Y8 j. ]7 v" R* `" m$ n+ S  T/ c# ^2 p! U: h9 {
SQL>alter session set container=CDB$ROOT;
! Q" u5 a, G# C/ u+ z' x
( W8 }" g# b8 L2 u- MSessionaltered.* E+ y& k6 [5 k5 ?

& D4 c% H0 A- j2 ^ 
* h3 K- _( t+ M" z
. h7 z( n) m. V) ~* L$ QSQL>select con_id, dbid, guid, name , open_mode from v$pdbs;  y3 d& ]7 p3 K# q  H$ C9 M

; v- q/ B( j1 s2 v) @3 B( ]! _ " E1 X) a% ~# j, C( e* J9 M
% O! n& ?4 w* t2 S1 ]+ k
    CON_ID      DBID GUID                            NAME            OPEN_MODE: e" ^. y7 d/ Y1 t$ ^7 F
7 w! q! L* b7 ^5 v! F7 ~
-------------------- -------------------------------- --------------- ----------& X: K7 [5 V- `' g0 C6 h

, i! j& Y0 c% l4 ?4 K/ G3 z         2 4088301206F7C1E3C96BBF0585E0430A01A8C05459 PDB$SEED       READ ONLY; _  B! C2 Q. p0 c9 D# y1 r
7 E7 H( ~  x1 J
         3 426143573 F7C209EB1DFC0854E0430A01A8C0B787 PDBCNDBA        READ WRITE
/ w0 _7 |" J/ n, A% v! B6 J) j8 Z# ?6 E4 G2 _' E) t$ c* m
 
3 J, I) B1 i* B8 d- M0 r
' r$ w( h0 ^7 I: ]: RSQL>ALTER PLUGGABLE DATABASE ALL CLOSE ;
% C7 {% D) X& R% Z  S) _8 ]5 u4 F
Pluggabledatabase altered.
) x; n" R+ m5 h+ w' b) {( \
0 ^+ h, C7 w$ t: z! @0 }' `( q) w7 p 
# h4 p" x2 {# c4 e# h; k
4 x3 c  {- S' y/ |SQL>select con_id, dbid, guid, name , open_mode from v$pdbs;
( z* S5 @- ?1 q
; p5 [$ P- {! c/ i ( g8 k0 y3 @- u! T# `5 F
& Z3 n* ?- [3 R8 Q( }1 f( b( E
    CON_ID      DBID GUID                            NAME            OPEN_MODE
6 w. W; \# Y* z! O6 v  ?2 K* J& ^3 a7 \! E3 G/ x
-------------------- -------------------------------- --------------- ----------0 U3 ^% l2 e7 _) z' y( H7 V( e

: U3 l8 x$ B; g         2 4088301206F7C1E3C96BBF0585E0430A01A8C05459 PDB$SEED       READ ONLY* }9 J! S2 D! H* A( L2 ^
; W- y7 L: K: \2 L, [8 _7 F
         3  426143573 F7C209EB1DFC0854E0430A01A8C0B787PDBCNDBA        MOUNTED
( L' ]" l$ l' f* Q" f4 N, [0 I+ i! G( t! m
 
- o( }/ D- j2 q3 Y5 z' ^: d7 F+ Q4 J& z; D2 N* R1 e; k
SQL>alter session set container=pdbcndba;
1 X8 v( S  p3 ]' ^& i8 Q& V' N, A" Z
 
; d; k: |4 |5 Y3 e9 l
5 H0 K8 X0 d+ |  m6 c9 S/ b" V: H# n0 uSessionaltered.! O6 ?' h# j& W" Q$ i) Q* h6 U

# _8 i8 m8 v& H6 m; y3 c- T 
/ m3 Y, m* g8 T1 E
' K9 i; V' I! T. D! ^4 D) Y$ HSQL>ALTER PLUGGABLE DATABASE OPEN;4 ]5 ~2 s4 r; k( _
5 I# a4 y# ~3 o/ W' @
 : F% O$ u% b* h8 d0 n' s  ?4 Y
& }1 J3 @+ `3 o+ Q0 o
Pluggabledatabase altered.
+ D& \" t* z, ?2 A  P! p( O# N, l- v; U! |% l- Q9 Y
 0 l' Q- l7 `+ ]$ p. t/ ?
, l, T5 @" s4 H& ~
SQL>  select con_id, dbid, guid, name , open_modefrom v$pdbs;7 o. f* N5 ?( A) s
$ C1 j% O( N" e2 C! x/ m9 \8 D
 : f) f/ E4 Y9 G0 R+ O8 [# e
! Z0 y" G( {0 v2 R
    CON_ID      DBID GUID                            NAME            OPEN_MODE$ r& I# J# K7 j6 J& U# `1 H
6 }3 P* X/ \1 z3 ^
-------------------- -------------------------------- --------------- ----------4 c& x: ?7 A4 f- ]6 t' p. j: U! ]; T4 L
3 L/ O6 H0 e9 h" O2 v1 W
         3  426143573 F7C209EB1DFC0854E0430A01A8C0B787PDBCNDBA        READ WRITE
7 P2 K+ |! M* |3 R! P$ ]2 [4 k5 I4 `" u
+ k& ~* x4 Q! {" Q, H: D % t; T7 i. J) b, |/ }. Q

  F/ x& d0 `/ w$ a5 a0 u# h) S% a0 y 1 |! }* g7 I" [( ~

) V( n3 \6 z2 {7 j( @ 
# `1 j1 u+ _! e. t3 ]* f4 K& \+ w/ @7 G8 r& b% H
3  设置Pluggable Database (PDB) 的自动startup
: a) N8 ]; l. M8 X2 p! q7 t# |; s0 Y' r. W
 
; p0 M/ _& q! H6 m1 Q0 J& z3 ?$ `% P  \9 N1 @0 p1 O3 q' v- `
默认情况下,在CDB 启动的时候,all 的PDB 都是mount状态,也没有默认的机制,在CDB启动时自动启动PDB。
! x- L: W# M' _/ P
3 Y4 |, R. J: p7 [ 
! z5 B0 I" Y$ I! c; |8 y8 \4 z% R" U# ~) _6 M3 I& m
但这里可以通过触发器来实现PDB的自动open:
; R3 g9 _( j% [6 S1 j5 t" f) k& M! A2 M  N  _
 / m: Q. \) B4 t$ g9 h# R, C: f
+ j/ l; d  @. z) i( U
CREATEOR REPLACE TRIGGER open_pdbs4 r2 i9 n; N: c' L7 C9 t% n  E$ ~
' _9 d4 N1 N/ v$ n. l
  AFTER STARTUP ON DATABASE
" P! P3 [- p- S$ I& b3 E5 `* U* B4 C8 S
BEGIN+ Z7 o- P+ i7 V; E, ^( m) ]1 x
9 E; S7 e0 D5 n! S9 \$ ~/ s7 M
   EXECUTE IMMEDIATE 'ALTERPLUGGABLE DATABASE ALL OPEN';1 w- |; O) K5 R. u, K% g
$ F9 P* Q) U0 E. p; z" g1 t
END open_pdbs;
8 G2 D: K) A+ a% Q0 U& u! \8 u, P2 H6 F* P( L% O9 e: E# o/ x
/
7 a8 M' U& U3 y' d# m: W7 J5 b& k; I$ t; {: {/ U" A
 ) h0 A6 n8 _. h- c% E) @" l3 p
* E5 u$ ?5 k9 \! r9 S$ E7 h, ]1 a! e
示例:* Z3 h7 b( N* w8 T" U
9 {8 M1 [+ Y; G1 k2 K
SQL>show con_name
& O$ e* Z/ l5 s2 q4 j% k; o, Q/ }
5 e2 a# u9 k8 ~$ t - T+ N2 u7 u' Y+ u8 N6 I# y3 [

- W1 R2 ?1 B+ [9 u+ mCON_NAME6 y1 O% e- V* p% P3 ^# O+ y

/ {1 f/ u0 }7 {" W# D------------------------------0 s( u& P6 ]; X; s1 ]0 g
, ?6 y4 H7 Y% t. n- C8 x1 W
PDBCNDBA
5 Z! }0 C5 ~; S. r: V" A8 _% a7 [' H) v
SQL>alter session set container=CDB$ROOT;
4 n) y( P2 c! @1 B' c6 \9 V* H* d+ a8 H* K0 E5 l
 
6 o( H7 B1 L- P" {7 O$ \0 [8 M% h0 i) o  W( G! d2 j5 }
Sessionaltered.# F" b  E- K4 |! E) \5 u" f; `
; D) r) \; ]0 T9 b) g% C
 $ Q7 @( H7 m% f9 I) H

* J- |3 t- Y9 Y0 `3 [$ ESQL>CREATE OR REPLACE TRIGGER open_pdbs) ?& S3 L0 @- w/ v1 @
, w  }9 t2 w% A
  2   AFTER STARTUP ON DATABASE, H) ?! L0 d( Q

+ g# R. [$ y( O+ i  3 BEGIN7 M5 k0 [% \' A) z: d
5 r. K  [6 N7 x
  4    EXECUTE IMMEDIATE 'ALTER PLUGGABLE DATABASE ALL OPEN';0 ~8 c4 f% {5 |' A% b2 t

4 [( r, j& Q, P6 T1 Q  5  ENDopen_pdbs;
9 M4 [, V( T5 k/ c9 C3 H7 J& s
' e) T- F. l1 m* c% s) s: s  6  /% B+ Z& ^; P) g* ^9 u+ v
$ h8 F" I" g/ Y7 S+ [/ @) _8 [
 
2 X5 G* r' R" e! l: T4 {% Y5 u9 \/ W- B% t$ `& x
Triggercreated.% ^0 q* {- u* h8 u8 ^" S! G

+ f, G$ j- e0 \1 O ! c/ C8 G1 C& C0 Z
您需要登录后才可以回帖 登录 | 注册

本版积分规则

返回首页|Archiver|手机版|小黑屋|易陆发现技术论坛 ( 蜀ICP备2026014127号-1 )

GMT+8, 2026-6-11 22:59 , Processed in 0.026926 second(s), 22 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表