All technological notes.
Incomplete Recovery (DBPITR)Incomplete Recovery (DBPITR)Database point-in-time recovery (DBPITR)(Incomplete Recovery):
SYSTEM tablespace迁移Determine the target point of the restore:
SCN, restore point, or log sequence number.Set the National Language Support (NLS) OS environment variables so that the time constants you provide to RMAN are formatted correctly.
export NLS_LANG = american_america.us7ascii
export NLS DATE FORMAT = "yyyy-mm-dd:hh24:mi:ss"
SET command:-- set the time in a European format
set until time
"to_date('14.08.2018 21:59:00', 'dd.mm.yyyy hh24:mi:ss'")";
shutdown immediate
startup mount
RUN block, using the SET UNTIL, RESTORE, and RECOVER commands.
RUN {
SET UNTIL TIME '2018-08-14:21:59:00';
RESTORE DATABASE;
RECOVER DATABASE;
}
READ ONLY mode and verify that the recovery point is correct.SQL 'ALTER DATABASE OPEN READ ONLY';
RESETLOGS optionALTER DATABASE OPEN RESETLOGS;
-- confirm rcat db is opened
sqlplus / as sysdba
SHOW PDBS
rman target / catalog rcowner@rcat
-- create a full backup
BACKUP DATABASE;
-- resynchronize the catalog with the database control file.
RESYNC CATALOG;
EXIT
rman target /
-- confirm that the control file is automatically backup
show all;
BACKUP PLUGGABLE DATABASE orclpdb;

# create directory for tbsp
mkdir -p /u01/backup/orcl/orclpdb
sqlplus / as sysdba
alter session set container=orclpdb;
show user
show con_name
-- CLEANUP from previous run
DROP USER bar CASCADE;
DROP TABLESPACE bartbs INCLUDING CONTENTS AND DATAFILES;
-- Create tablespace
CREATE TABLESPACE bartbs
DATAFILE '/u01/backup/orcl/orclpdb/bartbs.dbf' SIZE 10M REUSE
SEGMENT SPACE MANAGEMENT MANUAL;
-- Create user
CREATE USER BAR IDENTIFIED BY pass4BAR
DEFAULT TABLESPACE bartbs
QUOTA UNLIMITED ON bartbs;
GRANT CREATE SESSION TO BAR;
-- create table and populate
-- be sure table is at least 2 blocks long
CREATE TABLE BAR.barcopy
TABLESPACE bartbs
AS SELECT * FROM HR.EMPLOYEES;
INSERT INTO BAR.BARCOPY
SELECT * FROM BAR.BARCOPY;
INSERT INTO BAR.BARCOPY
SELECT * FROM BAR.BARCOPY;

rman target "'sys@orclpdb as sysdba'"
RUN {
ALLOCATE CHANNEL "ch1" DEVICE TYPE DISK FORMAT "/u01/backup/orcl/orclpdb/bartest%U";
BACKUP AS COPY TAG 'BARTEST' TABLESPACE bartbs;
}
EXIT

sqlplus sys@orclpdb as sysdba
show con_name
UPDATE BAR.BARCOPY SET salary = salary+1;
COMMIT;
ALTER SYSTEM FLUSH BUFFER_CACHE;
EXIT

sqlplus sys@orclpdb as sysdba
EXEC DBMS_LOCK.SLEEP(1.5);
alter session set container=cdb$root;
ALTER SYSTEM SWITCH LOGFILE;
alter session set container=orclpdb;
UPDATE BAR.BARCOPY SET salary = salary+1;
Commit;
EXEC DBMS_LOCK.SLEEP(1.5);
alter session set container=cdb$root;
ALTER SYSTEM SWITCH LOGFILE;
alter session set container=orclpdb;
UPDATE BAR.BARCOPY SET salary = salary+1;
Commit;
EXEC DBMS_LOCK.SLEEP(1.5);
alter session set container=cdb$root;
ALTER SYSTEM SWITCH LOGFILE;
alter session set container=orclpdb;
UPDATE BAR.BARCOPY SET salary = salary+1;
Commit;
EXEC DBMS_LOCK.SLEEP(1.5);
alter session set container=cdb$root;
ALTER SYSTEM SWITCH LOGFILE;
alter session set container=orclpdb;
UPDATE BAR.BARCOPY SET salary = salary+1;
Commit;
EXEC DBMS_LOCK.SLEEP(1.5);
alter session set container=cdb$root;
ALTER SYSTEM SWITCH LOGFILE;
alter session set container=orclpdb;
UPDATE BAR.BARCOPY SET salary = salary+1;
Commit;
EXEC DBMS_LOCK.SLEEP(1.5);
alter session set container=cdb$root;
ALTER SYSTEM SWITCH LOGFILE;
alter session set container=orclpdb;
UPDATE BAR.BARCOPY SET salary = salary+1;
Commit;
EXEC DBMS_LOCK.SLEEP(1.5);
alter session set container=cdb$root;
ALTER SYSTEM SWITCH LOGFILE;
alter session set container=orclpdb;
UPDATE BAR.BARCOPY SET salary = salary+1;
Commit;
EXEC DBMS_LOCK.SLEEP(1.5);
alter session set container=cdb$root;
ALTER SYSTEM SWITCH LOGFILE;
alter session set container=orclpdb;
UPDATE BAR.BARCOPY SET salary = salary+1;
Commit;

The database has been update and switched log after a backup.
connect sys/welcome@orclpdb as sysdba
select salary from BAR.BARCOPY
where rownum = 1;
connect / as sysdba
ALTER SYSTEM FLUSH BUFFER_CACHE;

select 'rm "'||name||'"'
from v$archived_log
where (sequence#, resetlogs_id) =
(select sequence# - 2, resetlogs_id from v$archived_log
where first_time = (select distinct (max(first_time)) from v$archived_log));

rm "/u01/app/oracle/fast_recovery_area/ORCL/archivelog/2024_05_23/o1_mf_1_8_m4ypzwdk_.arc"
sqlplus / as sysdba
shutdown abort
exit
rm -f /u01/backup/orcl/orclpdb/bartbs.dbf

sqlplus / as sysdba
startup
show pdbs
-- try to open pdb
ALTER PLUGGABLE DATABASE orclpdb OPEN;

cd $ORACLE_BASE/diag/rdbms/orcl/orcl/trace
ls -1ltr *dbw*
tail -20 orcl_dbw0_29390.trc

LIST FAILURE command to find more information about the failure.
rman target "'/ as sysbackup'"
LIST FAILURE;
ADVISE FAILURE;


RESTORE DATAFILE 102;

RECOVER DATAFILE 102;

ARCHIVE LOG LIST

-- query scn
SELECT NAME, DBID, CURRENT_SCN, LOG_MODE, OPEN_MODE FROM V$DATABASE;
-- if in cdb:
-- ORCL 1682594073 7675785 ARCHIVELOG READ WRITE
-- if in pdb: the current_scn is 0.
-- ORCL 1682594073 0 ARCHIVELOG MOUNTED

Determine the starting SCN and start time of your missing log
-- The value in FIRST_TIME can be used to inform users how far back they have to go to recover any transactions that have been lost.
select sequence#, first_change#, first_time, status
from v$archived_log
where sequence# = 8
and name is not null;
-- 8 7571928 23-May-2024 A

rman target /
shutdown immediate;
startup nomount;
-- restore control file
RESTORE CONTROLFILE FROM AUTOBACKUP;
-- Mount the database.
ALTER DATABASE MOUNT;
-- Restore the entire database from a backup that was taken before the missing archive log file with sequence
RESTORE DATABASE UNTIL SEQUENCE 8;
RECOVER DATABASE UNTIL SEQUENCE 8;
-- Open the database using the RESETLOGS option.
ALTER DATABASE OPEN RESETLOGS;
ALTER PLUGGABLE DATABASE orclpdb OPEN;
EXIT

sqlplus / as sysdba
show pdbs

7675785 before recovery7574664 after recovery0 before recovery7575521 after recoverySELECT NAME, DBID, CURRENT_SCN, LOG_MODE, OPEN_MODE FROM
V$DATABASE;
-- ORCL 1682594073 7574664 ARCHIVELOG READ WRITE
ALTER SESSION SET CONTAINER=orclpdb;
SELECT NAME, DBID, CURRENT_SCN, LOG_MODE, OPEN_MODE FROM
V$DATABASE ;
-- ORCL 1682594073 7575521 ARCHIVELOG READ WRITE

SELECT salary
FROM bar.barcopy
WHERE rownum = 1;

rman target /
list failure;
exit

rman target "'/ as sysbackup'" catalog rcowner@rcat
CROSSCHECK ARCHIVELOG ALL;
-- Delete obsolete backups
delete noprompt obsolete;

RESETLOGS command was executed.BACKUP DATABASE PLUS ARCHIVELOG delete input;
exit;
DROP USER bar CASCADE;
DROP TABLESPACE bartbs INCLUDING CONTENTS AND DATAFILES;