복원 테이블 스페이스 USERS가 작동하지 않습니다. Oracle 백업

Nov 29 2020

스키마와 my_table_test를 만들었습니다.

ALTER SESSION SET CURRENT_SCHEMA=c##wojtek_admin; 

CREATE TABLE my_table_test
( id_test INT 
);

그런 다음 다음을 사용하여 백업을 생성했습니다. BACKUP TABLESPACE USERS FORMAT 'c:\FRA\users%u';그런 다음 my_table_test를 삭제하고 아래 명령을 실행합니다.

RMAN> RUN{
2> SQL 'ALTER TABLESPACE USERS OFFLINE';
3> RESTORE TABLESPACE USERS;
4> RECOVER TABLESPACE USERS;
5> SQL 'ALTER TABLESPACE USERS ONLINE';
6> }

USERS TABLESPACE를 복원 한 후 my_table_test가 삭제되는 이유는 무엇입니까?

답변

BjarteBrandt Nov 29 2020 at 15:14

다중 테넌트 데이터베이스에는 여러 'USERS'테이블 스페이스가 있습니다. CDB 수준에 하나씩, 각 PDB에 대해 하나씩.

RMAN> report schema;

Report of database schema for database with db_unique_name T101N

List of Permanent Datafiles
===========================
File Size(MB) Tablespace           RB segs Datafile Name
---- -------- -------------------- ------- ------------------------
1    960      SYSTEM               YES     +DATAC4/T101N/DATAFILE/system.500.1057688607
3    620      SYSAUX               NO      +DATAC4/T101N/DATAFILE/sysaux.498.1057688643
4    840      UNDOTBS1             YES     +DATAC4/T101N/DATAFILE/undotbs1.587.1057688657
5    310      PDB$SEED:SYSTEM NO +DATAC4/T101N/86B637B62FE07A65E053F706E80A27CA/DATAFILE/system.482.1057689319 6 380 PDB$SEED:SYSAUX      NO      +DATAC4/T101N/86B637B62FE07A65E053F706E80A27CA/DATAFILE/sysaux.503.1057689319
7    5        USERS                NO      +DATAC4/T101N/DATAFILE/users.499.1057688659
8    190      PDB$SEED:UNDOTBS1 NO +DATAC4/T101N/86B637B62FE07A65E053F706E80A27CA/DATAFILE/undotbs1.489.1057689319 9 310 PDB1:SYSTEM YES +DATAC4/T101N/B52F60948095635FE053B506330A63CA/DATAFILE/system.405.1057690077 10 390 PDB1:SYSAUX NO +DATAC4/T101N/B52F60948095635FE053B506330A63CA/DATAFILE/sysaux.501.1057690077 11 195 PDB1:UNDOTBS1 YES +DATAC4/T101N/B52F60948095635FE053B506330A63CA/DATAFILE/undotbs1.497.1057690077 12 5 PDB1:USERS NO +DATAC4/T101N/B52F60948095635FE053B506330A63CA/DATAFILE/users.566.1057690091 List of Temporary Files ======================= File Size(MB) Tablespace Maxsize(MB) Tempfile Name ---- -------- -------------------- ----------- -------------------- 1 67 TEMP 32767 +DATAC4/T101N/TEMPFILE/temp.573.1057688719 2 43 PDB$SEED:TEMP        32767       +DATAC4/T101N/B52F34797E9D6750E053B506330AE7C0/TEMPFILE/temp.481.1057689337
3    43       PDB1:TEMP            32767       +DATAC4/T101N/B52F60948095635FE053B506330A63CA/TEMPFILE/temp.496.1057690079

노트! RMAN의 최고 기능. RMAN은 실제로 다른 시나리오에서 수행 할 작업을 알려줄 수 있습니다.

# data recovery advisor (DRA)
list failure all;
advise failure;
repair failure preview;
repair failure;
AndrewSayer Nov 30 2020 at 00:25

첫째, 멀티 테넌트 데이터베이스를 사용하는 것처럼 보이지만 루트 컨테이너에 사용자 데이터를 넣기로 결정했습니다. 일반적으로 이것은 나쁜 생각입니다. 거의 모든 작업에 플러그 형 데이터베이스를 사용해야합니다 ( 이것은 또한 사용자 이름 앞에 C##.

복원 및 복구 문은 지금까지 테이블 스페이스를 복구합니다. 테이블 스페이스를 삭제하기 전에 복구하려는 경우 Oracle은 system테이블 스페이스 (데이터 딕셔너리의 경우)에 대해 일부 작업을 수행해야 하지만 USERS테이블 스페이스 를 복원하고 복구하는 것만은 원하지 않습니다 . 백업을 다른 곳으로 복원하고 원하는 지점으로 복구 한 다음 USERS테이블 스페이스 를 가져 와서 원래 데이터베이스에 다시 넣어야합니다.

이것은 단순히 테이블 스페이스 시점 복구라고하며, 오라클은 모든 하드 스크립팅 작업을 유용하게 수행했지만 진행 상황을 읽어야합니다. https://docs.oracle.com/cd/E11882_01/backup.112/e10642/rcmtspit.htm#BRADV89790

RECOVER TABLESPACE users
  UNTIL ?
  AUXILIARY DESTINATION '?';

(문서를 읽고 나면 작성하는 방법을 알 수 있습니다.)

테이블 수준에서이 작업을 쉽게 수행 할 수있는 기능도 있으므로 삭제 된 테이블 만 복구하고 해당 테이블 스페이스의 다른 모든 항목을 되 돌리지 않으려면 다음을 수행 할 수 있습니다.

RECOVER TABLE c##wojtek_admin.my_table_test
UNTIL ?
AUXILIARY DESTINATION '?'  ;

보다 https://oracle-base.com/articles/12c/rman-table-point-in-time-recovery-12cr1 자세한 내용은.