OS 환경 : Oracle Linux 8.4 (64bit)
DB 환경 : Oracle Database 23.4.0.24.05 ai Free
방법 : 오라클 23ai 뉴피처 하이브리드 read-only pdb
오라클 23ai 부터 pdb 기동 모드에 하이브리드 read-only라는 새로운 모드가 생김
이 모드는 pdb에 접속한 사용자(유저)에 따라 읽기전용 또는 읽기-쓰기 모드로 사용되게 할수 있음
공통(common) 유저로 접속한 경우 pdb는 읽기-쓰기 모드로 보이고, 로컬(local) 유저로 접속한 경우 pdb는 읽기 전용 모드로 보임
이 기능을 이용해 보안을 더 향상 시킬 수 있음
23ai 이후 pdb 마운트 및 오픈 모드(Hybrid Read-only 추가됨)
Read/Write : alter pluggable database open read write; 명령으로 기동하며 기본 모드임, 사용자가 트랜젝션을 진행하고 redo도 생성가능함
Read-Only : alter pluggable database open read only; 명령으로 기동하며 읽기 전용 모드임, 사용자가 조회 쿼리 수행은 할수 있지만 변경 쿼리 수행은 불가능함
*Hybrid Read-only : alter pluggable database open hybrid read only; 명령으로 기동하며 하이브리드 읽기 전용 모드임, 어떤 사용자가 접속되어 있는지에 따라 pdb가 읽기-쓰기 또는 읽기 전용 모드로 동작하는 특수한 오픈 모드임
Migrate : alter pluggable database open upgrade; 명령으로 기동하며 db 업그레이드 스크립트 실행시 이 모드를 사용함
Mounted : pdb를 종료(alter pluggable database close; 또는 shutdown)했을때의 상태임, 어떠한 변경도 허용되지 않고 데이터파일을 읽고 쓸수 없음, 메모리에서도 pdb정보가 제거됨, db 관리자만 pdb에 접근 가능하고 pdb의 일관된 백업이 지원됨
테스트
1. hybrid read only mode 설정
2. 공통 및 로컬 유저 생성
3. 공통 유저 접속 후 확인
4. 로컬 유저 접속 후 확인
1. hybrid read only mode 설정
cdb 접속 후 pdb 조회
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
$ sqlplus sys/oracle@localhost:1521/FREE as sysdba
SQL>
set lines 200 pages 1000
col name for a20
col hybrid for a10
select vpdb.con_id, vpdb.name, vpdb.open_mode, to_char(vpdb.open_time, 'yyyy/mm/dd hh24:mi:ss') open_time
, vpdb.total_size/1024/1024/1024 gb, vpdb.priority, vpdb.restricted, vconto.is_hybrid_read_only hybrid
from v$pdbs vpdb, v$container_topology vconto
where vpdb.name = vconto.con_name;
CON_ID NAME OPEN_MODE OPEN_TIME GB PRIORITY RES HYBRID
---------- -------------------- ---------- ------------------- ---------- ---------- --- ----------
2 PDB$SEED READ ONLY 2024/05/03 20:55:43 .78125 1 NO NO
3 FREEPDB1 READ WRITE 2024/05/06 11:14:24 1.00097656 1 NO NO
4 FREEPDB2 READ WRITE 2024/05/03 20:58:58 .986328125 2 NO NO
5 FREEPDB3 READ WRITE 2024/05/03 20:58:58 .986328125 3 NO NO
6 FREEPDB4 READ WRITE 2024/05/03 20:58:59 .986328125 4 NO NO
|
freepdb1 을 hybrid read-only 모드로 변경예정
freepdb1 종료
1
2
3
|
SQL> alter pluggable database freepdb1 close immediate;
Pluggable database altered.
|
freepdb1 hybrid read-only 모드로 기동
1
2
3
|
SQL> alter pluggable database freepdb1 open hybrid read only;
Pluggable database altered.
|
pdb 재조회
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
SQL>
set lines 200 pages 1000
col name for a20
col hybrid for a10
select vpdb.con_id, vpdb.name, vpdb.open_mode, to_char(vpdb.open_time, 'yyyy/mm/dd hh24:mi:ss') open_time
, vpdb.total_size/1024/1024/1024 gb, vpdb.priority, vpdb.restricted, vconto.is_hybrid_read_only hybrid
from v$pdbs vpdb, v$container_topology vconto
where vpdb.name = vconto.con_name;
CON_ID NAME OPEN_MODE OPEN_TIME GB PRIORITY RES HYBRID
---------- -------------------- ---------- ------------------- ---------- ---------- --- ----------
2 PDB$SEED READ ONLY 2024/05/03 20:55:43 .78125 1 NO NO
3 FREEPDB1 READ WRITE 2024/05/06 11:20:26 1.00097656 1 NO YES
4 FREEPDB2 READ WRITE 2024/05/03 20:58:58 .986328125 2 NO NO
5 FREEPDB3 READ WRITE 2024/05/03 20:58:58 .986328125 3 NO NO
6 FREEPDB4 READ WRITE 2024/05/03 20:58:59 .986328125 4 NO NO
|
freepdb1의 is_hybrid_read_only 컬럼 값이 YES로 변경됨
2. 공통 및 로컬 유저 생성
cdb 접속 후 공통 유저 생성
1
2
3
4
|
$ sqlplus sys/oracle@localhost:1521/FREE as sysdba
SQL>
create user c##common_user identified by common_user container=all;
grant dba to c##common_user container=all;
|
pdb 접속 후 로컬 유저 생성
1
2
3
4
|
$ sqlplus sys/oracle@localhost:1521/FREEPDB1 as sysdba
SQL>
create user local_user identified by local_user;
grant dba to local_user;
|
3. 공통 유저 접속 후 확인
공통 유저 접속
1
2
|
SQL> conn c##common_user/common_user@//localhost:1521/freepdb1
Connected.
|
pdb open mode 확인
1
2
3
4
5
6
7
8
|
SQL>
set lines 200 pages 1000
col name for a10
select name, open_mode from v$pdbs;
NAME OPEN_MODE
---------- ----------
FREEPDB1 READ WRITE
|
open mode가 read write 로 보임
샘플 유저 생성 테스트
1
2
3
|
SQL> create user test1 identified by test1 quota unlimited on users;
User created.
|
정상적으로 유저가 생성됨
샘플 테이블 생성 및 데이터 삽입, 조회
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
SQL> create table test1.t1 (col1 number);
Table created.
SQL> insert into test1.t1 values (1);
1 row created.
SQL> commit;
Commit complete.
SQL> select * from test1.t1;
COL1
----------
1
|
정상적으로 테이블 생성 및 데이터 삽입, 조회가 가능함
4. 로컬 유저 접속 후 확인
로컬 유저 접속
1
2
|
SQL> conn local_user/local_user@//localhost:1521/freepdb1
Connected.
|
pdb open mode 확인
1
2
3
4
5
6
7
8
|
SQL>
set lines 200 pages 1000
col name for a10
select name, open_mode from v$pdbs;
NAME OPEN_MODE
---------- ----------
FREEPDB1 READ ONLY
|
open mode가 read only 로 보임
샘플 유저 생성 테스트
1
2
3
4
5
|
SQL> create user test2 identified by test2 quota unlimited on users;
*
ERROR at line 1:
ORA-16000: Attempting to modify database or pluggable database that is open for read-only access.
Help: https://docs.oracle.com/error-help/db/ora-16000/
|
ORA-16000 에러가 발생함
샘플 테이블 생성 및 데이터 삽입
1
2
3
4
5
6
|
SQL> create table t2 (col1 number);
create table t2 (col1 number)
*
ERROR at line 1:
ORA-16000: Attempting to modify database or pluggable database that is open for read-only access.
Help: https://docs.oracle.com/error-help/db/ora-16000/
|
ORA-16000 에러가 발생함
샘플 테이블 조회
1
2
3
4
5
|
SQL> select * from test1.t1;
COL1
----------
1
|
테이블 생성 및 데이터 삽입은 불가하고 조회만 가능함
결론 : hybrid read-only 오픈 모드를 이용해 공용 유저, 로컬 유저별로 read-write로 사용하게 할수도 있고 read-only로 사용하게 할수도 있음
참조 :
https://apex.oracle.com/pls/apex/features/r/dbfeatures/features?feature_id=1675
https://docs.oracle.com/en/database/oracle/oracle-database/23/multi/administering-pdbs-with-sql-plus.html#GUID-322C5C03-4C48-40CD-8230-0BA5F16BF96B
https://docs.oracle.com/en/database/oracle/oracle-database/19/multi/administering-pdbs-with-sql-plus.html#GUID-CD8BE686-3C89-445F-8347-263758AE448E
https://oracle-base.com/articles/23c/hybrid-read-only-mode-for-pdbs-23c
https://docs.oracle.com/en/database/oracle/oracle-database/23/multi/introduction-to-the-multitenant-architecture.html#GUID-39B3A92A-667B-42D3-84E5-1DE696898278
https://docs.oracle.com/en/database/oracle/oracle-database/19/admqs/administering-user-accounts-and-security.html#GUID-A9C963CB-A2E6-45DE-9DBC-EFDBBDB4EECE
'ORACLE > Admin' 카테고리의 다른 글
오라클 23ai 신기능 테이블 최대 컬럼 갯수 증가 (0) | 2024.05.11 |
---|---|
오라클 23ai 신기능 정리 (0) | 2024.05.10 |
오라클 23ai 신기능 from 절 없는 select 문 (0) | 2024.05.09 |
오라클 23ai 신기능 tns 에러 메세지 개선 (0) | 2024.05.08 |
오라클 23ai 신기능 group by 시 alias 및 position 사용 (0) | 2024.05.07 |