Oracle 74일차

[SQLPLUS에서 출력 설정]

set pages 100 -> 한 페이지에 100행씩 출력하도록 함.
col 컬럼명 또는 alias명 format a10 -> 문자 컬럼에 대해서 10바이트로 출력되게 함.
col 컬럼명 또는 alias명 format 9999 -> 숫자 컬럼에 대해서 4자리로 출력되게 함.

[PDB]

1. PDB 접속

ss
alter session set container=orapdb;
show con_name

select name from v$datafile;

2. 새로운 tbs 생성

create tablespace ts_test1 datafile '/oracle19/app/oracle/oradata/ORA19DB/ts_test01.dbf' size 10m;

3. 테이블 생성

create table system.pdb_table1(no number) tablespace ts_test1;
insert into system.pdb_table1 values(10);
insert into system.pdb_table1 values(20);
insert into system.pdb_table1 values(30);
commit;

4. 기존 테이블스페이스 용량 증설

alter tablespace ts_test1 add datafile '/oracle19/app/oracle/oradata/ORA19DB/orapdb/ts_test02.dbf' size 10m;

alter database datafile '/oracle19/app/oracle/oradata/ORA19DB/orapdb/ts_test01.dbf' resize 20m;

alter database datafile '/oracle19/app/oracle/oradata/ORA19DB/orapdb/ts_test01.dbf' autoextend on;

5. 테이블스페이스 삭제

drop tablespace ts_test1 including contents and datafiles;

[CDB]

1. CDB 접속

ss
select name, open_mode from v$pdbs;

2. PDB shutdown

alter pluggable database ORAPDB2 close immediate;

3. PDB 삭제

drop pluggable database ORAPDB2 including datafiles;

[유저관리]

1. 공동 사용자
– CDB, PDB에서 같이 사용하는 사용자 (같은 패스워드)
– sys, system 사용자
– c##username 형태의 사용자

2. 로컬 사용자
– 각 PDB에서 사용하는 사용자
– PDB에서 생성 시 로컬 사용자가 됨

PDB유저 생성

1. PDB 접속

ss
alter session set container=orapdb;
select username from dba_users;

2. user 생성

create user scott identified by oracle;
grant create session to scott;

3. scott 유저로 접속

sqlplus scott/oracle@orapdb

CDB유저 생성

1. CDB 접속

select username from dba_users;

2. USER 생성

create user hr identified by oracle;  -- 생성 불가
create user c##hr identified by oracle;

3. c##hr에 접속 권한 부여

-- CDB에만 권한 부여
grant create session to c##hr;
sqlplus c##hr/oracle  -- 가능
sqlplus c##hr/oracle@orapdb  -- 접속 불가

-- 전체에 권한 부여
grant create session to c##hr container=all; 
sqlplus c##hr/oracle  -- 가능
sqlplus c##hr/oracle@orapdb  -- container=all로 권한줘서 접속 가능

[CDB 장애 복구]

PDB FILE은 정상, CDB의 물리전 손상으로 인해 CDB, PDB 접속 불가

0. 전체 백업 진행

rman target /
backup database;

1. 로그스위치 5번

alter system switch logfile;

2. 테이블 생성

create table recover_test500(no number);
insert into recover_test500 values(500);
commit;

select * from system.recover_test500;

3. 장애 발생

select 'rm '||file_name from dba_data_files;
-----------------------------------------------
rm /oracle19/app/oracle/oradata/ORA19DB/system01.dbf
rm /oracle19/app/oracle/oradata/ORA19DB/sysaux01.dbf
rm /oracle19/app/oracle/oradata/ORA19DB/undotbs01.dbf
rm /oracle19/app/oracle/oradata/ORA19DB/users01.dbf
rm /oracle19/app/oracle/oradata/ORA19DB/ts_test01.dbf
rm /oracle19/app/oracle/oradata/ORA19DB/ts_test02.dbf
----------------------------------------------
shutdown abort

4. 복구

1. 
startup nomount

2. controlfile restore
restore controlfile from '/oracle19/backup/ora19db/c-73391101-20250123-05';

alter database mount;

3. restore
restore database;  -- 이건 CDB, PDB 전체를 restore하는 거라 오래 걸림

-- 아래처럼 하면 장애난 CDB의 datafile만 restore. 그러기 위해서 filenumber 조회
SQL> col name format a50
SQL> select file#, name from v$datafile;

RMAN> restore datafile 1,3,4,7,13,14;

4. recover
recover database;

5. open
alter database open resetlogs;

5. 조회

select * from system.recover_test500;

6. PDB open
CDB 복구를 하면 PDB가 꺼져 있는 상태다

select name, open_mode from v$pdbs;

alter pluggable database ORAPDB open;

[PDB 장애]

PDB file들

1. 백업 진행

RMAN> backup database;

2. 로그 스위치 – CDB에서

alter system switch logfile;

3. PDB 접속

sqlplus system/oracle@orapdb

4. 테이블 생성

create table recover_test600(no number);
insert into recover_test600 values(600);
commit;

5. 장애 발생

select 'rm '||file_name from dba_data_files;  -- PDB로 넘어왔기 때문에 PDB에 대한 datafile이 조회됨.
---------------------------------------------------------
rm /oracle19/app/oracle/oradata/ORA19DB/orapdb/system01.dbf
rm /oracle19/app/oracle/oradata/ORA19DB/orapdb/sysaux01.dbf
rm /oracle19/app/oracle/oradata/ORA19DB/orapdb/undotbs01.dbf
rm /oracle19/app/oracle/oradata/ORA19DB/orapdb/users01.dbf
---------------------------------------------------------
-- shutdown인데 PDB라서 아래처럼 CDB에서
alter pluggable database ORAPDB close immediate;

6. open 시도 (CDB에서)

alter pluggable database ORAPDB open;  -- 실패

select name, open_mode from v$pdbs;  -- instance와 controlfile을 공유하기 때문에 PDB는 mount단계 아래로는 내려가지 않는다.

7. 복구

1. restore
RMAN> restore pluggable database ORAPDB;
-- 이렇게 치면 알아서 9,10,11,12번 파일 restore함.

-- 아래처럼 해도 될거임 아마도...?(내 생각)
select file#, name from v$datafile;
-- 9,10,11,12
restore datafile 9,10,11,12;

2. recover
recover pluggable database ORAPDB;

8. open

RMAN> alter pluggable database ORAPDB open;

9. 조회

select * from system.recover_test600;  -- PDB에 접속해서 확인해야됨. RMAN에선 확인 안되더라

Leave a Comment