SELECT thread#,
COUNT(*) AS cnt,
MIN(sequence#) AS min_seq,
MAX(sequence#) AS max_seq,
MIN(first_time) AS min_time,
MAX(next_time) AS max_time
FROM v$archived_log
WHERE deleted = 'NO'
GROUP BY thread#
ORDER BY thread#;
THREAD# CNT MIN_SEQ MAX_SEQ MIN_TIME MAX_TIME
__________ ______ __________ __________ ______________________ ______________________
1 80 7936 8015 2026-02-16 15:38:02 2026-02-18 14:15:42
Minimalistic Oracle contains a collection of practical examples from my encounters with Oracle technologies. When relevant, I also write about other technologies, like Linux or PostgreSQL. Many of the posts starts with "how to" since they derive directly from my own personal experience. My goal is to provide simple examples, so that they can be easily adapted to other situations.
Showing posts with label Restore and Recovery. Show all posts
Showing posts with label Restore and Recovery. Show all posts
Wednesday, February 18, 2026
Useful query against v$archived_log in recovery situations
Wednesday, May 28, 2014
How to recreate the control file and rename the database and the datafiles
To change a database name or file names, it can be practical to recreate the control file, and in some cases your only option.
In this example, I will rename a database and its file structure from "OID11UI" to "OID11U1".
Start by generating a file which holds the current layout of all the database's files:
Optionally, on the first line, add a pointer to a correct parameter file:
Before
In this example, I will rename a database and its file structure from "OID11UI" to "OID11U1".
Start by generating a file which holds the current layout of all the database's files:
SQL> alter database backup controlfile to trace as '/u01/oracle/product/11204/dbs/cntr_trace.sql' resetlogs; Database altered.The generated file typically look like this:
STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "OID11UI" RESETLOGS NOARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 '/u02/oradata/OID11UI/redo01.log' SIZE 50M BLOCKSIZE 512,
GROUP 2 '/u02/oradata/OID11UI/redo02.log' SIZE 50M BLOCKSIZE 512,
GROUP 3 '/u02/oradata/OID11UI/redo03.log' SIZE 50M BLOCKSIZE 512
-- STANDBY LOGFILE
DATAFILE
'/u02/oradata/OID11UI/system01.dbf',
'/u02/oradata/OID11UI/sysaux01.dbf',
'/u02/oradata/OID11UI/undotbs01.dbf',
'/u02/oradata/OID11UI/users01.dbf'
CHARACTER SET WE8MSWIN1252
;
-- Database can now be opened zeroing the online logs.
ALTER DATABASE OPEN RESETLOGS;
-- Commands to add tempfiles to temporary tablespaces.
-- Online tempfiles have complete space information.
-- Other tempfiles may require adjustment.
ALTER TABLESPACE TEMP ADD TEMPFILE '/u02/oradata/OID11UI/temp01.dbf'
SIZE 20971520 REUSE AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M;
-- End of tempfile additions.
Exchange the word "REUSE" against the word "SET":CREATE CONTROLFILE SET DATABASE "OID11U1"
Optionally, on the first line, add a pointer to a correct parameter file:
STARTUP NOMOUNT PFILE='/u01/oracle/product/11204/dbs/initOID11U1.ora'Change all references to "OID11UI" (the old name):
STARTUP NOMOUNT PFILE='/u01/oracle/product/11204/dbs/initOID11U1.ora'
CREATE CONTROLFILE SET DATABASE "OID11U1" RESETLOGS NOARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 '/u02/oradata/OID11U1/redo01.log' SIZE 50M BLOCKSIZE 512,
GROUP 2 '/u02/oradata/OID11U1/redo02.log' SIZE 50M BLOCKSIZE 512,
GROUP 3 '/u02/oradata/OID11U1/redo03.log' SIZE 50M BLOCKSIZE 512
-- STANDBY LOGFILE
DATAFILE
'/u02/oradata/OID11U1/system01.dbf',
'/u02/oradata/OID11U1/sysaux01.dbf',
'/u02/oradata/OID11U1/undotbs01.dbf',
'/u02/oradata/OID11U1/users01.dbf'
CHARACTER SET WE8MSWIN1252
;
-- Database can now be opened zeroing the online logs.
ALTER DATABASE OPEN RESETLOGS;
-- Commands to add tempfiles to temporary tablespaces.
-- Online tempfiles have complete space information.
-- Other tempfiles may require adjustment.
ALTER TABLESPACE TEMP ADD TEMPFILE '/u02/oradata/OID11U1/temp01.dbf'
SIZE 20971520 REUSE AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M;
-- End of tempfile additions.
Change the folder name that oracle uses:usu0oid01:OID11UI>cd /u02/oradata usu0oid01:OID11UI>mv OID11UI OID11U1Change the control_files directive in the parameter file:
Before
*.control_files='/u02/oradata/OID11UI/control01.ctl','/u02/oradata/OID11UI/control02.ctl'After:
*.control_files='/u02/oradata/OID11U1/control01.ctl','/u02/oradata/OID11U1/control02.ctl'Remove the old controlfiles physically from disk:
cd /u02/oradata/OID11U1 rm *.ctlShutdown the database:
SQL> shutdown abort ORACLE instance shut down.Change the oracle profile in the operating system:
cd vi .profileBefore:
export ORACLE_SID=OID11UIAfter:
export ORACLE_SID=OID11U1Source the new profile, and check that the ORACLE_SID environmental variable is correctly set:
. .profile usu0oid01:OID11U1>echo $ORACLE_SID OID11U1Start sqlplus and run script:
usu0oid01:OID11UI>sqlplus / as sysdba @cntr_trace.sql SQL*Plus: Release 11.2.0.4.0 Production on Wed May 28 14:00:50 2014 Copyright (c) 1982, 2013, Oracle. All rights reserved. Connected to an idle instance. ORACLE instance started. Total System Global Area 1720328192 bytes Fixed Size 2247072 bytes Variable Size 1107297888 bytes Database Buffers 603979776 bytes Redo Buffers 6803456 bytes Control file created. Database altered. Tablespace altered. SQL> select open_mode from v$database; OPEN_MODE -------------------- READ WRITECheck the location of the data files after the change:
SQL> select file_name from dba_data_files union select member from v$logfile union select name from v$controlfile; FILE_NAME -------------------------------------------------- /u02/oradata/OID11U1/control01.ctl /u02/oradata/OID11U1/control02.ctl /u02/oradata/OID11U1/redo01.log /u02/oradata/OID11U1/redo02.log /u02/oradata/OID11U1/redo03.log /u02/oradata/OID11U1/sysaux01.dbf /u02/oradata/OID11U1/system01.dbf /u02/oradata/OID11U1/undotbs01.dbf /u02/oradata/OID11U1/users01.dbfLag en spfile (anbefales):
SQL> create spfile from pfile; File created. SQL> shutdown immediate Database closed. Database dismounted. ORACLE instance shut down.Startup the database for normal use:
SQL> startup
Tuesday, March 4, 2014
How to backup your controlfile to trace
SQL> ALTER DATABASE BACKUP CONTROLFILE TO TRACE AS '/fullpath/backup_controlfile.trc' [REUSE] [RESETLOGS | NORESETLOGS];
Note that if you do not specify either RESETLOGS or NORESETLOGS during the create command, oracle will include both versions in the resulting file, and you must pick the appropriate one for your situation.
REUSE will generate a backup controlfile statement which includes the REUSE keyword.
This in turn, indicates that when the "create controlfile" command is executed, you can reuse the existing physical control files on your server. If you don't, and the file exists from a previous database incarnation, Oracle will throw an error, so I prefer to leave it there.
Note that if you do not specify either RESETLOGS or NORESETLOGS during the create command, oracle will include both versions in the resulting file, and you must pick the appropriate one for your situation.
REUSE will generate a backup controlfile statement which includes the REUSE keyword.
This in turn, indicates that when the "create controlfile" command is executed, you can reuse the existing physical control files on your server. If you don't, and the file exists from a previous database incarnation, Oracle will throw an error, so I prefer to leave it there.
Tuesday, January 28, 2014
Important files and directories in a Netbackup setup
Important netbackup files and directories on a typcial unix server:
/usr/openv/netbackup/version --> displays the netbackup version
/usr/openv/netbackup/bp.conf --> displays important settings such as SERVER, MEDIA_SERVER, CLIENT_NAME
/usr/openv/netbackup/logs/user_ops/dbext/logs --> log files for rman backups
Example of bp.conf
SERVER = backupserver1.mydomain.com
MEDIA_SERVER = server1-bkp.mydomain.com
CLIENT_NAME = server1-bkp.mydomain.com
REQUIRED_INTERFACE = server1-bkp.mydomain.com
Note that the CLIENT_NAME used above translates into the NB_ORA_CLIENT typically used in when sending backups to tape using Netbackup:
NB_ORA_CLIENT=server1-bkp.mydomain.com
/usr/openv/netbackup/version --> displays the netbackup version
/usr/openv/netbackup/bp.conf --> displays important settings such as SERVER, MEDIA_SERVER, CLIENT_NAME
/usr/openv/netbackup/logs/user_ops/dbext/logs --> log files for rman backups
Example of bp.conf
SERVER = backupserver1.mydomain.com
MEDIA_SERVER = server1-bkp.mydomain.com
CLIENT_NAME = server1-bkp.mydomain.com
REQUIRED_INTERFACE = server1-bkp.mydomain.com
Note that the CLIENT_NAME used above translates into the NB_ORA_CLIENT typically used in when sending backups to tape using Netbackup:
NB_ORA_CLIENT=server1-bkp.mydomain.com
Tuesday, January 21, 2014
How to restore a sequence of archivelogs back to their original location
connect catalog catowner/*********@RMANCAT
connect target
run {
allocate channel t1 type sbt PARMS="BLKSIZE=1048576" maxopenfiles 64;
allocate channel t2 type sbt PARMS="BLKSIZE=1048576" maxopenfiles 64;
send 'NB_ORA_POLICY=ora_dbserver1_00_netwzone1,NB_ORA_CLIENT=dbserver1-bkp.mydomain.com,NB_ORA_SCHED=ora_dbserver1_00_netwzone1_user';
restore archivelog from logseq 412594 until logseq 412656;
release channel t1;
release channel t2;
}
Thursday, November 14, 2013
Guaranteed restore points in standby databases
"Before an important release, I decided to create a guaranteed restore point on the primary database.
Unfortunately I forgot to create the same on my standby database. Can I use the as of timestamp to create a guaranteed restore point in the past?"
No, this is not supported.
The syntax below:
ERROR at line 1:
ORA-38867: database not open: cannot create restore point with the specified
timestamp
How about using the SCN?
Unfortunately I forgot to create the same on my standby database. Can I use the as of timestamp to create a guaranteed restore point in the past?"
No, this is not supported.
The syntax below:
SQL> create restore point PRE_RELEASE2_STBY as of timestamp to_date('09.11.2013 09:15:00','DD.MM.YYYY HH24:MI:SS') guarantee flashback database;
Will fail with:ERROR at line 1: ORA-38864: cannot create a guaranteed restore point with user specified SCN or time.
// *Cause: An SCN or timestamp was specified when creating a guaranteed // restore point. This is not supported. You can only create a // guaranteed restore point as of the current time. // *Action: Avoid this combination of options for creating a restore point.You will have to do with a normal restore point instead:
CREATE RESTORE POINT PRE_RELEASE2_STBY
AS OF TIMESTAMP TO_DATE('09.11.2013 09:15:00','DD.MM.YYYY HH24:MI:SS');
But you will receive the following error:ERROR at line 1:
ORA-38867: database not open: cannot create restore point with the specified
timestamp
// *Cause: An attempt was made to create a restore point with the specified // timestamp while the database was not open. The database must be // open in order to map the timestamp to an SCN. // *Action: Open the database first or pick another way to create the restore // point.So on a standby database, using the AS OF TIMESTAMP is not allowed on a normal restore point, either.
How about using the SCN?
SQL> SELECT timestamp_to_scn(to_date('09.11.2013 09:15:00','DD.MM.YYYY HH24:MI:SS')) SCN
FROM dual;
SCN
--------
170259165
SQL> create restore point PRE_RELEASE2_STBY AS OF SCN 170259165; Restore point created.
Friday, November 8, 2013
What are restore points and how are they used?
Definition:
A restore point is an alias to the system change number (SCN) of the database at the time the restore point was created.
Types of restore points:
1. Normal
2. Guaranteed
For both types, the name of the restore point and the SCN are recorded in the database control file.
Normal restore points are very lightweight. The control file can maintain a record of thousands of normal restore points with no significant impact upon database performance. Normal restore points eventually age out of the control file if not manually deleted, so they require no ongoing maintenance.
Guaranteed restore points on the other hand, guarantees that Oracle will retain the flashback logs for a Flashback Database operation.
A guaranteed restore point does not age out of the control file and must be explicitly dropped.
Guaranteed restore points will utilize space in the flash recovery area.
The flash recovery area must be therefore be defined and large enough to hold the flashback logs for the duration of the guaranteed restore point's existence.
Creation example:
You can use restore points with any commands that recognize a RESTORE POINT clause as a shorthand for specifying an SCN.
Examples:
To view the restore points created in your database, use:
To create a normal restore point, you need either
the SELECT ANY DICTIONARY system privilege, or
the FLASHBACK ANY TABLE system privilege
To create a guaranteed restore point, you need SYSDBA privileges.
To view or use a restore point, the user need either of the following:
The SELECT ANY DICTIONARY system privilege
The FLASHBACK ANY TABLE system privilege
The SELECT_CATALOG_ROLE role
To drop a restore point:
A restore point is an alias to the system change number (SCN) of the database at the time the restore point was created.
Types of restore points:
1. Normal
2. Guaranteed
For both types, the name of the restore point and the SCN are recorded in the database control file.
Normal restore points are very lightweight. The control file can maintain a record of thousands of normal restore points with no significant impact upon database performance. Normal restore points eventually age out of the control file if not manually deleted, so they require no ongoing maintenance.
Guaranteed restore points on the other hand, guarantees that Oracle will retain the flashback logs for a Flashback Database operation.
A guaranteed restore point does not age out of the control file and must be explicitly dropped.
Guaranteed restore points will utilize space in the flash recovery area.
The flash recovery area must be therefore be defined and large enough to hold the flashback logs for the duration of the guaranteed restore point's existence.
Creation example:
CREATE RESTORE POINT PRE_EOD_201208; CREATE RESTORE POINT PRE_RELEASE2 GUARANTEE FLASHBACK DATABASE;Usage:
You can use restore points with any commands that recognize a RESTORE POINT clause as a shorthand for specifying an SCN.
Examples:
FLASHBACK DATABASE TO RESTORE POINT < restore point name >; RESTORE DATABASE TO RESTORE POINT < restore point name >; FLASHBACK TABLE emp TO RESTORE POINT < restore point name >;
To view the restore points created in your database, use:
select name,scn,time,database_incarnation# "INC NR",
guarantee_flashback_database "guaranteed?"
storage_size/1024/1024 "MB"
from v$restore_point;
NAME SCN TIME INC NR guaranteed? MB
_____________ ____________ __________________________________ _________ ______________ _______
PREUPGRADE 208072152 22-JAN-25 01.06.35.000000000 PM 2 YES 3072
To create a normal restore point, you need either
To create a guaranteed restore point, you need SYSDBA privileges.
To view or use a restore point, the user need either of the following:
To drop a restore point:
DROP RESTORE POINT AKSEPT_TEST_START;
How to perform a full restore of Oracle
The following scripts have been tested and proven to work.
Make sure the NB_ORA_POLICY is correctly entered and adheres to the documentation from your MML provider:
Make sure the NB_ORA_POLICY is correctly entered and adheres to the documentation from your MML provider:
#!/bin/ksh
LOGFILE=$SCRIPT_BASE/log/restore_${ORACLE_SID}_`date +%Y%m%d%H%M%S`.log
export RECOVERY_CATALOG=catowner/**********@RMANCAT
nohup rman target / catalog $RECOVERY_CATALOG << EOF > $LOGFILE 2>&1 &
startup force nomount;
set DBID=1554594349;
run {
allocate channel t1 type sbt;
allocate channel t2 type sbt
send 'NB_ORA_POLICY=ora_dbserver1_00_netwzone1,NB_ORA_CLIENT=dbserver1-bkp.mydomain.com,NB_ORA_SCHED=ora_dbserver1_00_netwzone1_user';
set until sequence < logseq > thread 1;
restore controlfile;
alter database mount;
restore database;
recover database;
}
alter database open resetlogs;
EOF
echo "RMAN restore started in background. Check logfile: $LOGFILE"
Thursday, November 7, 2013
Script for checking the database flashback settings
I normally use the following script to gather the most important facts about my flashback settings and readyness for a potential flashback database operation:
alter session set nls_date_format='DD.MM.YYYY HH24:MI:SS';
set linesize 300
set trimspool on
col name format a35
col time format a35
col guaranteed format a10
col "oldest flback SCN" format 9999999999999
col SCN format 9999999999999
set pagesize 200
spool chk_flashb.log
prompt =================================================
Prompt give me the
prompt * estimated flashback log size
prompt * retention target
prompt * current accumulated size of all flashback logs
prompt =================================================
select estimated_flashback_size/1024/1024 "Estimated Flbacklog Size mb",
retention_target/60 "Hours of flback logs",
flashback_size/1024/1024 "Current Flbacklog Size mb"
from v$flashback_database_log
/
prompt ===============================================
Prompt How far back can the database be flashed back?
prompt ===============================================
select oldest_flashback_scn "oldest flback SCN",
oldest_flashback_time "oldest flback time"
from v$flashback_database_log
/
prompt =================================================
prompt show the restore points created the last 2 weeks
prompt =================================================
SELECT NAME,
SCN,
TIME,
DATABASE_INCARNATION#,
GUARANTEE_FLASHBACK_DATABASE "guaranteed",
STORAGE_SIZE
FROM V$RESTORE_POINT
where time >= SYSDATE-14;
Prompt ===================================
prompt Show the flash recovery area usage
Prompt ===================================
select * from v$flash_recovery_area_usage;
Prompt ======================================
prompt I/O information for flashback logging
Prompt ======================================
select begin_time "Begin time",
end_time "End time",
round(flashback_data/1024/1024) "MB of flbk data written",
round(redo_data/1024/1024) "MB of redo data"
from v$flashback_database_stat
order by begin_time asc;
exit
Subscribe to:
Comments (Atom)