Pulihkan tablespace USERS tidak bekerja. Cadangan Oracle

Nov 29 2020

Saya membuat skema dan my_table_test;

ALTER SESSION SET CURRENT_SCHEMA=c##wojtek_admin; 

CREATE TABLE my_table_test
( id_test INT 
);

Kemudian saya membuat cadangan menggunakan: BACKUP TABLESPACE USERS FORMAT 'c:\FRA\users%u';Kemudian saya menjatuhkan my_table_test dan menjalankan perintah di bawah ini:

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

Mengapa my_table_test dihapus setelah saya memulihkan USERS TABLESPACE?

Jawaban

BjarteBrandt Nov 29 2020 at 15:14

Dalam database multitenant Anda akan memiliki beberapa tablespace 'PENGGUNA'. Satu di level CDB dan satu untuk setiap 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

Catatan! Fitur terbaik RMAN. RMAN sebenarnya dapat memberi tahu Anda apa yang harus dilakukan dalam berbagai skenario.

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

Pertama, penting untuk dicatat bahwa sepertinya Anda menggunakan Database Multitenant tetapi Anda telah memutuskan untuk memasukkan data pengguna di dalam wadah root, ini umumnya ide yang buruk - Anda harus menggunakan Database yang Dapat Dicolok untuk hampir semua hal ( ini juga berarti Anda tidak perlu mengawali nama pengguna Anda dengan C##.

Pernyataan pemulihan dan pemulihan Anda akan memulihkan tablespace hingga sekarang. Jika Anda ingin memulihkannya ke sebelum Anda menjatuhkan tablespace maka Oracle juga perlu melakukan beberapa pekerjaan di systemtablespace (untuk kamus data) - tetapi Anda tidak hanya ingin memulihkan dan memulihkan USERStablespace Anda . Anda perlu memulihkan cadangan Anda di tempat lain, memulihkannya ke titik yang diinginkan, lalu mengambil USERStablespace dan memasukkannya kembali ke database asli Anda.

Ini hanya disebut sebagai Tablespace Point In Time Recovery, Oracle telah membantu melakukan semua pekerjaan skrip keras untuk Anda, tetapi Anda harus membaca apa yang terjadi. https://docs.oracle.com/cd/E11882_01/backup.112/e10642/rcmtspit.htm#BRADV89790

RECOVER TABLESPACE users
  UNTIL ?
  AUXILIARY DESTINATION '?';

(Setelah Anda membaca dokumen, Anda akan melihat cara mengisinya).

Ada juga kemampuan untuk melakukan ini dengan mudah di tingkat tabel, jadi jika Anda hanya ingin memulihkan tabel yang jatuh itu dan tidak mengembalikan semua yang lain di ruang tabel itu, Anda dapat:

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

Lihat https://oracle-base.com/articles/12c/rman-table-point-in-time-recovery-12cr1 untuk keterangan lebih lanjut.