La restauration des utilisateurs de l'espace de table ne fonctionne pas. Sauvegarde Oracle

Nov 29 2020

J'ai créé un schéma et my_table_test;

ALTER SESSION SET CURRENT_SCHEMA=c##wojtek_admin; 

CREATE TABLE my_table_test
( id_test INT 
);

Ensuite, j'ai créé une sauvegarde en utilisant: BACKUP TABLESPACE USERS FORMAT 'c:\FRA\users%u';Ensuite, j'ai déposé my_table_test et exécutez les commandes ci-dessous:

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

Pourquoi my_table_test est supprimé après la restauration de USERS TABLESPACE?

Réponses

BjarteBrandt Nov 29 2020 at 15:14

Dans une base de données mutualisée, vous aurez plusieurs tablespaces «UTILISATEURS». Un au niveau CDB et un pour chaque 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

Remarque! La meilleure caractéristique de RMAN. RMAN peut en fait vous dire quoi faire dans différents scénarios.

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

Tout d'abord, il est important de noter qu'il semble que vous utilisez une base de données mutualisée mais que vous avez décidé de placer les données utilisateur dans le conteneur racine, c'est généralement une mauvaise idée - vous devriez utiliser une base de données enfichable pour à peu près tout ( cela signifie également que vous n'avez pas besoin de préfixer vos noms d'utilisateur avec C##.

Vos instructions de restauration et de récupération récupéreront le tablespace jusqu'à présent. Si vous souhaitez le récupérer avant de supprimer le tablespace, Oracle devra également effectuer des travaux sur le systemtablespace (pour le dictionnaire de données) - mais vous ne voulez pas seulement restaurer et récupérer votre USERStablespace. Vous auriez besoin de restaurer votre sauvegarde ailleurs, de la récupérer au point souhaité, puis de prendre le USERStablespace et de le remettre dans votre base de données d'origine.

Ceci est simplement appelé la récupération du point d'espace disque dans le temps, Oracle a utilement effectué tout le travail de scriptage pour vous, mais vous devriez lire ce qui se passe. https://docs.oracle.com/cd/E11882_01/backup.112/e10642/rcmtspit.htm#BRADV89790

RECOVER TABLESPACE users
  UNTIL ?
  AUXILIARY DESTINATION '?';

(Une fois que vous aurez lu les documents, vous verrez comment le remplir).

Il est également possible de le faire facilement au niveau de la table, donc si vous souhaitez uniquement récupérer cette table supprimée et ne pas restaurer tout le reste dans cet espace de table, vous pouvez:

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

Voir https://oracle-base.com/articles/12c/rman-table-point-in-time-recovery-12cr1 pour plus de détails.