English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

ORACLE 12C PDB 유지보수 기본 지식 소개

먼저 기본 사용법을 설명하겠습니다:
먼저11G 이전에 수행
conn / as sysdba;
create user test identified by test;

ORA-65096: 공용 사용자 이름이나 역할 이름이 잘못되었습니다.

공식 문서를 확인하면 '일반 사용자를 생성하려면 C## 또는 c##로 시작해야 합니다'라고 나옵니다. 이때 의문이 생깁니다. 일반 사용자(common user)는 무엇인가요? 그래도 성공적으로 생성되었으니까 우선 해보겠습니다.
create C##user test identified by test;
성공적으로 생성

SQL> show con_name;

CON_NAME
------------------------------
CDB$ROOT

select con_id, dbid, NAME, OPEN_MODE from v$pdbs;


CON_ID DBID NAME OPEN_MODE

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

2 4066409480 PDB$SEED READ ONLY

3 2270995695 PDBORCL MOUNTED

SQL> alter session set container=PDBORCL;
이제 create user test identified by test;을 사용하여 사용자를 만들면 됩니다.

CDB와 PDB는 ORACLE 12C 새로운 기능이 도입되면서 전통적인 ORACLE 데이터베이스 관리 개념이 많이 변화되었습니다. 여기서는 cdb와 pdb 관리 방법의 일부를 기본적으로 소개합니다.
cdb와 pdb 관계도

ORACLE 12C版本

SQL> select * from v$version;
BANNER                                        CON_ID
-------------------------------------------------------------------------------- ----------
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production       0
PL/SQL Release 12.1.0.1.0 - 생산                          0
CORE  12.1.0.1.0   Production                            0
TNS for Linux: 버전 12.1.0.1.0 - 생산                      0
NLSRTL 버전 12.1.0.1.0 - 생산                          0

생산 시작 및 종료 pdb

SQL> startup
ORACLE 인스턴스 시작.
총 시스템 글로벌 공간 597098496 바이트
고정 크기         2291072 바이트
가변 크기       272632448 바이트
데이터베이스 버퍼     314572800 바이트
리도 버퍼        7602176 바이트
데이터베이스 마운팅.
데이터베이스 열림.
SQL> select con_id,dbid,NAME,OPEN_MODE from v$pdbs;
  CON_ID    DBID 이름              OPEN_MODE
---------- ---------- ------------------------------ ----------
     2 4048821679 PDB$SEED            읽기 전용
     3 3313918585 PDB1              MOUNTED
     4 3872456618 PDB2              MOUNTED
SQL> alter PLUGGABLE database pdb1 open;
플러그블 데이터베이스 변경.
SQL> select con_id,dbid,NAME,OPEN_MODE from v$pdbs;
  CON_ID    DBID 이름              OPEN_MODE
---------- ---------- ------------------------------ ----------
     2 4048821679 PDB$SEED            읽기 전용
     3 3313918585 PDB1              읽기 및 쓰기
     4 3872456618 PDB2              MOUNTED
SQL> alter PLUGGABLE database pdb1 close;
플러그블 데이터베이스 변경.
SQL> select con_id,dbid,NAME,OPEN_MODE from v$pdbs;
  CON_ID    DBID 이름              OPEN_MODE
---------- ---------- ------------------------------ ----------
     2 4048821679 PDB$SEED            읽기 전용
     3 3313918585 PDB1              MOUNTED
     4 3872456618 PDB2              MOUNTED
SQL> alter PLUGGABLE database all open;
플러그블 데이터베이스 변경.
SQL> select con_id,dbid,NAME,OPEN_MODE from v$pdbs;
  CON_ID    DBID 이름              OPEN_MODE
---------- ---------- ------------------------------ ----------
     2 4048821679 PDB$SEED            읽기 전용
     3 3313918585 PDB1              읽기 및 쓰기
     4 3872456618 PDB2              읽기 및 쓰기
SQL> alter PLUGGABLE database all close;
플러그블 데이터베이스 변경.
SQL> select con_id,dbid,NAME,OPEN_MODE from v$pdbs;
  CON_ID    DBID 이름              OPEN_MODE
---------- ---------- ------------------------------ ----------
     2 4048821679 PDB$SEED            읽기 전용
     3 3313918585 PDB1              MOUNTED
     4 3872456618 PDB2              MOUNTED
SQL> alter session set container=pdb1;
세션 변경.
SQL> startup
플러그블 데이터베이스 열림.
SQL> select con_id,dbid,NAME,OPEN_MODE from v$pdbs;
  CON_ID    DBID 이름              OPEN_MODE
---------- ---------- ------------------------------ ----------
     3 3313918585 PDB1              읽기 및 쓰기

pdb의 관리는 cdb에서도 가능하며 pdb에서도 가능합니다. cdb에서 진행할 경우 PLUGGABLE 키워드가 필요하며, pdb에서는 일반 데이터베이스와 같이 처리됩니다.

pdb 로그인

[oracle@xifenfei ~]$ lsnrctl status
LSNRCTL for Linux: 버전 12.1.0.1.0 - Production on 12-MAY-2013 08:07:02
저작권 (c) 1991, 2013, Oracle. 모든 권리를 보유합니다.
연결 중 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=xifenfei)(PORT=1521)))
LISTENER의 STATUS
------------------------
별명           LISTENER
버전          TNSLSNR for Linux: 버전 12.1.0.1.0 - 생산
시작 날짜        11-MAY-2013 18:30:54
서비스 시간          0 일 13 시간. 36 최소. 8 sec
트레이스 레벨        꺼짐
보안         ON: 로컬 OS 인증
SNMP           꺼짐
리스너 파라미터 파일  /u01/app/grid/product/12.1/network/admin/listener.ora
Listener Log File     /u01/app/grid/diag/tnslsnr/xifenfei/listener/alert/log.xml
Listening Endpoints Summary...
 (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
 (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=xifenfei)(PORT=1521)))
 (DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=xifenfei)(PORT=5500))
(Security=(my_wallet_directory=/u01/oracle/12.1/db_1/admin/cdb/xdb_wallet))(Presentation=HTTP)(Session=RAW))
Services Summary...
Service "+ASM" has 1 instance(s).
 Instance "+ASM", status READY, has 1 handler(s) for this service...
Service "cdb" has 1 instance(s).
 Instance "cdb", status READY, has 1 handler(s) for this service...
Service "cdbXDB" has 1 instance(s).
 Instance "cdb", status READY, has 1 handler(s) for this service...
Service "pdb1" has 1 instance(s).
 Instance "cdb", status READY, has 1 handler(s) for this service...
Service "pdb2" has 1 instance(s).
 Instance "cdb", status READY, has 1 handler(s) for this service...
The command completed successfully
[oracle@xifenfei ~]$ tnsping pdb1
TNS Ping Utility for Linux: Version 12.1.0.1.0 - Production on 12-MAY-2013 08:07:09
저작권 (c) 1997, 2013, Oracle. 모든 권리를 보유합니다.
Used parameter files:
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = xifenfei)
(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = pdb1)))
OK (20 msec)
[oracle@xifenfei ~]$ sqlplus sys/xifenfei@pdb1 as sysdba
SQL*Plus: Release 12.1.0.1.0 Production on Sun May 12 08:08:02 2013
저작권 (c) 1982, 2013, Oracle. 모든 권리를 보유합니다.
연결됨:
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64비트 생산
Partitioning, Automatic Storage Management, OLAP, Advanced Analytics와 함께
그리고 Real Application Testing 옵션
SQL> show con_name;
CON_NAME
------------------------------
PDB1
[oracle@xifenfei ~]$ sqlplus / as sysdba
SQL*Plus: Release 12.1.0.1.0 Production on Sun May 12 08:09:14 2013
저작권 (c) 1982, 2013, Oracle. 모든 권리를 보유합니다.
연결됨:
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64비트 생산
Partitioning, Automatic Storage Management, OLAP, Advanced Analytics와 함께
그리고 Real Application Testing 옵션
SQL> alter session set container=pdb1;
세션 변경.
SQL> show con_name;
CON_NAME
------------------------------
PDB1

pdb는 alter session container를 통해 진입하거나 직접 tns 방식으로 로그인할 수 있습니다

사용자 생성

SQL> show con_name;
CON_NAME
------------------------------
CDB$ROOT
SQL> select con_id,dbid,NAME,OPEN_MODE from v$pdbs;
  CON_ID    DBID 이름              OPEN_MODE
---------- ---------- ------------------------------ ----------
     2 4048821679 PDB$SEED            읽기 전용
     3 3313918585 PDB1              읽기 및 쓰기
     4 3872456618 PDB2              MOUNTED
SQL> create user xff identified by xifenfei;
사용자 xff를 xifenfei로 인증하도록 생성하십시오
      *
ERROR at line 1:
ORA-65096: invalid common user or role name
SQL> !oerr ora 65096
65096, 00000, "invalid common user or role name"
// *원인: 일반 사용자나 역할 이름으로 생성 시도가 있었습니다.
//     일반 사용자나 역할에 대해 유효하지 않습니다. 추가로
//     사용자와 역할 이름의 일반 규칙, 일반 사용자와 역할 
//     names must start with C## or c## and consist only of ASCII 
//     caracters.
// *작업: 유효한 일반 사용자 또는 역할 이름을 지정하십시오.
//
SQL> create user c##xff identified by xifenfei;
사용자 생성.
SQL> SELECT USERNAME,CON_ID,USER_ID FROM CDB_USERS WHERE USERNAME='C##XFF';
USERNAME    CON_ID  USER_ID
---------- ---------- ----------
C##XFF       1    103
C##XFF       3    104
SQL> alter session set container=pdb1;
세션 변경.
SQL> show con_name
CON_NAME
------------------------------
PDB1
SQL> create user xff identified by xifenfei;
사용자 생성.
SQL> create user c##abc identified by xifenfei;
create user c##abc identified by xifenfei
      *
ERROR at line 1:
ORA-65094: 무효한 로컬 사용자 또는 역할 이름

사용자 생성은 기본적으로 container=all로 설정되며, cdb에서는 전체 사용자만 생성할 수 있습니다(c##으로 시작), 이 사용자는 cdb와 모든 pdb에서 생성됩니다(하지만 pdb의 전체 사용자는 pdb에서 접근할 수 있는지 추가로 권한 부여가 필요합니다). pdb에서 생성할 수 있는 사용자는 로컬 사용자만입니다

사용자 권한 부여

SQL> grant connect to c##xff;
대성공.
SQL> select GRANTEE,con_id from cdb_ROLE_PRIVS where GRANTED_ROLE='CONNECT' AND GRANTEE='C##XFF';
GRANTEE              CON_ID
------------------------------ ----------
C##XFF                 1
SQL> grant resource to c##xff container=all;
대성공.
SQL> select GRANTEE,con_id from cdb_ROLE_PRIVS where GRANTED_ROLE='RESOURCE' AND GRANTEE='C##XFF';
GRANTEE              CON_ID
------------------------------ ----------
C##XFF                 1
C##XFF                 3

기본적으로 사용자 권한 부여는 현재 container에만 해당하지만, cdb에서 container=all을 지정할 수 있으며, 모든 열린 pdb에 대해 해당 사용자가 존재하는 경우 모든 열린 pdb에 대해 권한을 부여할 수 있습니다.

매개변수 변경

SQL> alter system set open_cursors=;500 container=all;
System altered.
SQL> conn sys/xifenfei@pdb1 as sysdba
Connected.
SQL> show parameter open_cursors;
NAME                 타입    값
------------------------------------ ----------- ------------------------------
open_cursors             정수   500
SQL> alter system set open_cursors=;100;
 alter system set open_cursors=;100
*
ERROR at line 1:
ORA-01219: database or pluggable database not open: queries allowed on fixed
tables or views only
SQL> alter database open;
Database altered.
SQL> alter system set open_cursors=;100;
System altered.
SQL> show parameter open_cursors;
NAME                 타입    값
------------------------------------ ----------- ------------------------------
open_cursors             정수   100
SQL> conn / as sysdba
Connected.
SQL> show parameter open_cursors;
NAME                 타입    값
------------------------------------ ----------- ------------------------------
open_cursors             정수   500

이곳에서 cdb에서 변경된 것을 볼 수 있으며, pdb는 그것을 상속받습니다; pdb에서 변경된 경우 pdb가 cdb에서 상속받은 매개변수 의미를 덮어쓸 것입니다.

선언: 이 문서의 내용은 인터넷에서 가져왔으며, 저작권은 원저자에게 있으며, 인터넷 사용자가 자발적으로 기여하고 업로드한 내용입니다. 이 사이트는 소유권을 가지지 않으며, 인공적으로 편집되지 않았으며, 관련 법적 책임도 부담하지 않습니다. 저작권 침해가 의심되는 내용이 있을 경우, notice#w로 이메일을 보내 주세요.3codebox.com에 (이메일을 보내면, #을 @으로 변경해 주세요) 신고를 하시고 관련 증거를 제공하시면, 사실 여부에 따라 이 사이트는 즉시 의심스러운 저작권 내용을 삭제할 것입니다.

아마도 좋아할 것 같은 것