Tabellenbereich wiederherstellen USERS funktioniert nicht. Oracle-Backup

Nov 29 2020

Ich habe ein Schema und my_table_test erstellt.

ALTER SESSION SET CURRENT_SCHEMA=c##wojtek_admin; 

CREATE TABLE my_table_test
( id_test INT 
);

Dann habe ich ein Backup erstellt mit: BACKUP TABLESPACE USERS FORMAT 'c:\FRA\users%u';Dann habe ich my_table_test gelöscht und die folgenden Befehle ausgeführt:

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

Warum wird my_table_test gelöscht, nachdem ich USERS TABLESPACE wiederhergestellt habe?

Antworten

BjarteBrandt Nov 29 2020 at 15:14

In einer Datenbank mit mehreren Mandanten verfügen Sie über mehrere 'USERS'-Tabellenbereiche. Eine auf CDB-Ebene und eine für jede 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

Hinweis! RMANs beste Funktion. RMAN kann Ihnen tatsächlich sagen, was in verschiedenen Szenarien zu tun ist.

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

Zunächst ist zu beachten, dass es so aussieht, als würden Sie eine Datenbank mit mehreren Mandanten verwenden, aber Sie haben beschlossen, Benutzerdaten in den Stammcontainer zu legen. Dies ist im Allgemeinen eine schlechte Idee. Sie sollten für so ziemlich alles eine steckbare Datenbank verwenden ( Dies bedeutet auch, dass Sie Ihren Benutzernamen kein Präfix voranstellen müssen C##.

Ihre Wiederherstellungs- und Wiederherstellungsanweisungen stellen den bisherigen Tabellenbereich wieder her. Wenn Sie es wiederherstellen möchten, bevor Sie den Tablespace gelöscht haben, muss Oracle auch einige Arbeiten am systemTablespace (für das Datenwörterbuch) USERSausführen. Sie möchten jedoch nicht nur Ihren Tablespace wiederherstellen und wiederherstellen . Sie müssten Ihr Backup an einem anderen Ort wiederherstellen, es an der gewünschten Stelle wiederherstellen, dann den USERSTablespace nehmen und es wieder in Ihre ursprüngliche Datenbank stellen.

Dies wird einfach als Tablespace Point In Time Recovery bezeichnet. Oracle hat die gesamte harte Skriptarbeit für Sie hilfreich erledigt, aber Sie sollten lesen, was los ist https://docs.oracle.com/cd/E11882_01/backup.112/e10642/rcmtspit.htm#BRADV89790

RECOVER TABLESPACE users
  UNTIL ?
  AUXILIARY DESTINATION '?';

(Sobald Sie die Dokumente gelesen haben, werden Sie sehen, wie Sie diese ausfüllen können).

Es gibt auch die Möglichkeit, dies auf Tabellenebene einfach zu tun. Wenn Sie also nur diese gelöschte Tabelle wiederherstellen und nicht alles andere in diesem Tabellenbereich zurücksetzen möchten, können Sie:

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

Sehen https://oracle-base.com/articles/12c/rman-table-point-in-time-recovery-12cr1 für weitere Details.