Wednesday, 15 January 2014

How To Check Whether Physical Standby is in Sync with the Primary or Not?

Summary

1. Check for GAP on standby
2. Check redo received on standby
3. Check redo applied on standby
4. Identify missing archive log files
5. Copy archive log files
6. Register archive log files with standby
7. Restart the managed recovery operations


step 1. Check for GAP on standby

primary + standby >
 select max(sequence#) from v$log_history;

primary > SELECT THREAD# "Thread",SEQUENCE# "Last Sequence Generated"
          FROM V$ARCHIVED_LOG
          WHERE (THREAD#,FIRST_TIME ) IN (SELECT THREAD#,MAX(FIRST_TIME) FROM V$ARCHIVED_LOG GROUP BY THREAD#)
          ORDER BY 1;

step 2 and 3. Check redo received on standby and Check redo applied on standby

standby > SELECT ARCH.THREAD# "Thread", ARCH.SEQUENCE# "Last Sequence Received", APPL.SEQUENCE# "Last Sequence Applied", (ARCH.SEQUENCE# - APPL.SEQUENCE#) "Difference"
          FROM
         (SELECT THREAD# ,SEQUENCE# FROM V$ARCHIVED_LOG WHERE (THREAD#,FIRST_TIME ) IN (SELECT THREAD#,MAX(FIRST_TIME) FROM V$ARCHIVED_LOG GROUP BY THREAD#)) ARCH,
         (SELECT THREAD# ,SEQUENCE# FROM V$LOG_HISTORY WHERE (THREAD#,FIRST_TIME ) IN (SELECT THREAD#,MAX(FIRST_TIME) FROM V$LOG_HISTORY GROUP BY THREAD#)) APPL
         WHERE
         ARCH.THREAD# = APPL.THREAD#
          ORDER BY 1;
         
step 4. Identify missing archive log files

standby > SELECT THREAD#, LOW_SEQUENCE#, HIGH_SEQUENCE# FROM V$ARCHIVE_GAP;

-- if GAP
standby > SELECT THREAD#, LOW_SEQUENCE#, HIGH_SEQUENCE# FROM V$ARCHIVE_GAP;

step 5.  Copy archive log files

After identifying a gap (as shown above), the DBA will need to query the primary database
to locate the archived redo logs on the primary database. The following query assumes the
local archive destination on the primary database is LOG_ARCHIVE_DEST_1:

primary > SELECT name
            FROM v$archived_log
            WHERE thread# = 1
              AND dest_id = 1
              AND sequence# BETWEEN 24 and 28;
 

step 6. Register archive log files with standby

--  Copy the above redo log files to the physical standby database and register
    them using the ALTER DATABASE REGISTER LOGFILE ... SQL statement on the
    physical standby database.
   
    For example:

standby > ALTER DATABASE REGISTER LOGFILE '/u02/oraarchive/TESTDB/arch_t1_s24.dbf';
standby > ALTER DATABASE REGISTER LOGFILE '/u02/oraarchive/TESTDB/arch_t1_s25.dbf';
standby > ALTER DATABASE REGISTER LOGFILE '/u02/oraarchive/TESTDB/arch_t1_s26.dbf';
standby > ALTER DATABASE REGISTER LOGFILE '/u02/oraarchive/TESTDB/arch_t1_s27.dbf';
standby > ALTER DATABASE REGISTER LOGFILE '/u02/oraarchive/TESTDB/arch_t1_s28.dbf';

step 7. Restart the managed recovery operations


-- After the redo logs have been registered on the physical standby database,
   the DBA can restart the managed recovery operations.
  
   For example, to put the physical standby database into automatic recovery managed mode:

standby > alter database recover managed standby database disconnect from session;

Wednesday, 1 January 2014

STEPS TO CREATE ORACLE DATABASE MANUALLY ON LINUX

This article shows you steps to create a database manually on Linux.
Step 1:
First create all the necessary directories. Followings are my directories:
testdb1]$ ls
admin backup archive
admin]$ ls
data redo control bdump udump adump cdump
Step 2:
Next prepare the database creation script. Following is my script "testdb1.sql"
CREATE DATABASE "testdb1"
MAXLOGFILES 5
MAXLOGMEMBERS 5
MAXDATAFILES 100
MAXINSTANCES 1
MAXLOGHISTORY 292
LOGFILE
GROUP 1 '/home/oracle/testdb1/admin/redo/redo1.log' SIZE 10M,
GROUP 2 '/home/oracle/testdb1/admin/redo/redo2.log' SIZE 10M,
GROUP 3 '/home/oracle/testdb1/admin/redo/redo3.log' SIZE 10M
DATAFILE
'/home/oracle/testdb1/admin/data/system.dbf' size 100m,
'/home/oracle/testdb1/admin/data/usr04.dbf' size 10m
sysaux datafile '/home/oracle/testdb1/admin/data/sysaux.dbf' size 100m
undo tablespace undotbs
datafile '/home/oracle/testdb1/admin/data/undo.dbf' size 50m
CHARACTER SET US7ASCII;
Step 3:
Prepare the init file. Like this one [inittestdb1.ora]
*.audit_file_dest='/home/oracle/testdb1/admin/adump'
*.background_dump_dest='/home/oracle/testdb1/admin/bdump'
*.compatible='10.2.0.3.0'
*.control_files='/home/oracle/testdb1/admin/control/control01.ctl',
'/home/oracle/testdb1/admin/control/control02.ctl','/home/oracle/testdb1/admin/control/control03.ctl'
*.core_dump_dest='/home/oracle/testdb1/admin/cdump'
*.db_block_size=8192
*.db_domain=''
*.db_file_multiblock_read_count=16
*.db_name='testdb1'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=indiaXDB)'
*.job_queue_processes=10
*.log_archive_dest_1='LOCATION=/home/oracle/testdb1/archive'
*.log_archive_format='%t_%s_%r.dbf'
*.open_cursors=300
*.pga_aggregate_target=200278016
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=601882624
*.undo_management='AUTO'
*.undo_tablespace='UNDOTBS'
*.user_dump_dest='/home/oracle/testdb1/admin/udump'
*.db_recovery_file_dest='/home/oracle/testdb1/backup'
*.db_recovery_file_dest_size=2147483648
Step 4:
Now perform the following steps:
$ export ORACLE_SID=testdb1
$ sqlplus / as sysdba
SQL*Plus: Release 10.2.0.3.0 - Production on Thu May 22 17:35:28 2008
Copyright (c) 1982, 2006, Oracle. All Rights Reserved.
Connected to an idle instance.
SQL> startup pfile=/u01/app/oracle/product/10.2.0/db_1/dbs/inittestdb1.ora nomount
ORACLE instance started.
Total System Global Area 603979776 bytes
Fixed Size 1263176 bytes
Variable Size 167774648 bytes
Database Buffers 427819008 bytes
Redo Buffers 7122944 bytes
SQL> @testdb1.sql
Database created.
Step 5:
So your database is create. Now just run the catalog.sql and catproc.sql scripts.
so run this script in open stage of the instance
You will find the in $ cd $ORACLE_HOME/rdbms/admin
SQL> @$ORACLE_HOME/rdbms/admin/catalog.sql
SQL> @$ORACLE_HOME/rdbms/admin/catproc.sql
SQL> select name from v$database;
NAME
---------
TESTDB1
Okay, now your database is ready to use.