Wednesday, December 29, 2010

Oracle IMP Notes

[ID 136697.1] >> hcheck.sql (Health Check)

Wednesday, July 21, 2010

Startup Upgrade/Migrate/Downgrade

ALTER SYSTEM ENABLE RESTRICTED SESSION;
ALTER SYSTEM SET "_SYSTEM_TRIG_ENABLED"=FALSE SCOPE=MEMORY;
ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0 SCOPE=MEMORY;
ALTER SYSTEM SET AQ_TM_PROCESSES=0 SCOPE=MEMORY;
ALTER SESSION SET NLS_LENGTH_SEMANTICS=BYTE;

Tuesday, March 23, 2010

How to setup DGMGRL, broker with example

Before we start, remember that DG broker does not have the ability to create standby and is used for managing the dataguard configuration. Before proceeding with step-by-step instructions on how to set up DG broker, I would recommend you to get comfortable with the concepts first.
The following configuration was tested on RHEL4U2 64-bit with Oracle 10.1.0.5 database.
Pri db_unique_name = 'TESTPRI'DG db_unique_name = 'TESTDG'Configuration(any name) = 'DG_TEST'sys password = 'sys'Pri conn stg = 'TESTPRI'
1. Set up init parameters on primary to enable broker
Note: For RAC, ensure dg_broker_config_files are on shared storage and accessible to all the instances.
Note: Broker config files are named as dr1<>.dat and dr2<>.dat
SQL> alter system set dg_broker_start=false sid='*';System altered.SQL> alter system set dg_broker_config_file1='/n01/dg_broker_config_files/dr1TESTPRI.dat' sid='*';System altered.SQL> alter system set dg_broker_config_file2='/n01/dg_broker_config_files/dr2TESTPRI.dat' sid='*';System altered.SQL> alter system set dg_broker_start=true sid='*';System altered.
2. Verify if DMON process has started on all the instances of primary. Example:
$ ps -efgrep dmongrep -v greporacle 16190 1 0 08:53 ? 00:00:00 ora_dmon_TESTPRIR1$ ps -efgrep dmongrep -v greporacle 29723 1 0 08:53 ? 00:00:00 ora_dmon_TESTPRIR2
3. Set up init parameters on standby
SQL> alter system set dg_broker_start=false sid='*';System altered.SQL> alter system set dg_broker_config_file1='/export/crawlspace/dg_broker_config_files/dr1TESTDG.dat' sid='*';System altered.SQL> alter system set dg_broker_config_file2='/export/crawlspace/dg_broker_config_files/dr2TESTDG.dat' sid='*';System altered.SQL> alter system set dg_broker_start=true sid='*';System altered.
4. GLOBAL_DBNAME should be set to <>_DGMGRL.<> in listener.ora on all instances of both primary and standby.
This is important otherwise you'll have TNS-12154 error during switchover operation.
Example:
SID_LIST_LISTENER_TESTPRI = (SID_LIST = (SID_DESC = (SID_NAME = PLSExtProc) (ORACLE_HOME = /apps/oracle/product/10g/db) (PROGRAM = extproc) ) (SID_DESC = (SID_NAME = TESTPRIR1) (GLOBAL_DBNAME = TESTPRI_DGMGRL) (ORACLE_HOME = /apps/oracle/product/10g/db) ) )
5. DGMGRL Configuration5.1ConnectDGMGRL> CONNECT sys/sysConnected.5.2Create ConfigurationDGMGRL> CREATE CONFIGURATION 'DG_TEST' AS PRIMARY DATABASE IS 'TESTPRI' CONNECT IDENTIFIER IS TESTPRI;Configuration "DG_TEST" created with primary database "TESTPRI".5.3Verify configurationDGMGRL> SHOW CONFIGURATION;Configuration Name: DG_TEST Enabled: NO Protection Mode: MaxPerformance Databases: TESTPRI - Primary databaseCurrent status for "DG_TEST":DISABLED5.4Verify database; if RAC verify if all instances are validatedDGMGRL> show database 'TESTPRI';Database Name: TESTPRI Role: PRIMARY Enabled: NO Intended State: ONLINE Instance(s): TESTPRIR1 TESTPRIR2Current status for "TESTPRI":DISABLED5.5Add standby database to the configurationDGMGRL> ADD DATABASE 'TESTDG' AS CONNECT IDENTIFIER IS TESTDG MAINTAINED AS PHYSICAL;Database "TESTDG" added.5.6Enable the brokerDGMGRL> ENABLE CONFIGURATION;Enabled.5.7Verfying againDGMGRL> SHOW CONFIGURATION;Configuration Name: DG_TEST Enabled: YES Protection Mode: MaxPerformance Databases: TESTPRI - Primary database TESTDG - Physical standby databaseCurrent status for "DG_TEST":SUCCESS6. TroubleshootingLet us see some sample issues and their fixIssueDGMGRL> CONNECT sys/sysORA-16525: the Data Guard broker is not yet availableFixSet dg_broker_start=trueIssueAfter enabling the configuration, on issuing SHOW CONFIGURATION, this error comes Warning: ORA-16608: one or more sites have warningsFixTo know details of the error, you may check log which will be generated at bdump with naming as drc{DB_NAME}.log or there are various monitorable properties that can be used to query the database status and assist in further troubleshooting.Few Monitorable properties to troubleshootDGMGRL> SHOW DATABASE 'TESTPRI' 'StatusReport';DGMGRL> SHOW DATABASE 'TESTPRI' 'LogXptStatus';DGMGRL> SHOW DATABASE 'TESTPRI' 'InconsistentProperties';DGMGRL> SHOW DATABASE 'TESTPRI' 'InconsistentLogXptProps';DGMGRL> SHOW DATABASE 'TESTDG' 'StatusReport';DGMGRL> SHOW DATABASE 'TESTDG' 'LogXptStatus';DGMGRL> SHOW DATABASE 'TESTDG' 'InconsistentProperties';DGMGRL> SHOW DATABASE 'TESTDG' 'InconsistentLogXptProps';IssueDGMGRL> SHOW DATABASE 'TESTPRI' 'StatusReport';STATUS REPORT INSTANCE_NAME SEVERITY ERROR_TEXT TESTPRIR2 WARNING ORA-16714: The value of property ArchiveLagTarget is inconsistent with the database setting. TESTPRIR2 WARNING ORA-16714: The value of property LogArchiveMaxProcesses is inconsistent with the database setting.IssueDGMGRL> SHOW DATABASE 'TESTPRI' 'InconsistentProperties';INCONSISTENT PROPERTIES INSTANCE_NAME PROPERTY_NAME MEMORY_VALUE SPFILE_VALUE BROKER_VALUE TESTPRIR2 ArchiveLagTarget 0 0 TESTPRIR2 LogArchiveMaxProcesses 4 2 4 ExampleDGMGRL> SHOW DATABASE 'TESTPRI' 'LogArchiveMaxProcesses'; LogArchiveMaxProcesses = '4'FixDGMGRL> EDIT DATABASE 'TESTPRI' SET PROPERTY 'LogArchiveMaxProcesses'=2;orSQL> alter system set log_archive_max_processes=4 scope=spfile sid='*';System altered.DGMGRL> SHOW DATABASE 'TESTPRI' 'LogArchiveMaxProcesses'; LogArchiveMaxProcesses = '4'More commandsDGMGRL> SHOW DATABASE VERBOSE 'dbname';This will show all property values in detailDGMGRL> HELP;List of all broker commands with usage help
Equivalent Broker Commands to 'ALTER SYSTEM'SQL> alter database recover managed standby database cancel;DGMGRL> edit database 'stby_dbname' set state='LOG-APPLY-OFF';SQL> alter database recover managed standby database disconnect;DGMGRL> edit database 'stby_dbname' set state='ONLINE';SQL> alter system set log_archive_max_processes=4;DGMGRL> edit database 'dbname' set property 'LogArchiveMaxProcesses'=4;SQL> alter system set log_archive_dest_state_2='enable' scope=both;DGMGRL> edit database 'stby_dbname' set property 'LogShipping'='ON';SQL> alter system set log_archive_dest_state_2='defer' scope=both;DGMGRL> edit database 'stby_dbname' set property 'LogShipping'='OFF';DGMGRL> edit database 'pri_dbname' set state='LOG-TRANSPORT-OFF';This will defer all standby databases
That's it my friends. You are all set to use broker now for managing your dataguard configuration. In my next blog, I'll talk about switchover using DG broker

Thursday, January 7, 2010

Windows Service Not Starting Your Database?

If you are on a Windows Server you need to know about the Windows Services and the oradim utility.

On all versions of Windows the Oracle Database (and the Application Server) are started as Windows Services. This allows them to start in the background, normally owned by SYSTEM.

In an earlier Tip I discussed starting and stopping the Application Server 10g on Windows using a script to start and stop the component's service. The AS10g (and 9iAS) components can be started from the command line and will start the windows service however, the database (both the back end and the Metadata Repository) can not start without the database service running.

The Oracle Database must have a running service.

The Oracle database must attach itself to a running process. It is the Win Service that provides this process. Most DBAs think that the service is the database but that is not true. The service can start/stop the database but it can also be started without starting the database.

Most Problem with the Win Service for the Database involve the service starting but the database not starting.

If the Win service is set to automatically start when the server boots but the database does not start, you may have a improper registry setting or you may have a bad service.

1. Check Task Manager for the ORACLE.EXE process. If it is present, then the service started.

2. Check the Alert Log for the database. If the problem is not with the database, there will be no indication in the log that the database even tried to start.

3. Check the oradim.log in the $ORACLE_HOME/database directory for errors. Check the date on the log file as versions before 9i did not date/time stamp the entries.

If there are no errors in the logs then try and start the database.

C:> sqlplus "/ as sysdba"
connected to an idle instance
SQL> starup

If the database starts great, the problem is in the service.

To check the Win service:

Open the registry with regedit. Always back up the registry before making changes. Navigate to the key:

HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\oracle_home_name.

There will be a key called:

ORA_SID_AUTOSTART (SID is your database SID)

This key should be set to TRUE. If not the server starts but does not start the database. There is also an ORA_SID_SHUTDOWN which you want to be TRUE so that if the server is shut down the service will shutdown the database.

If you want to manually start the database set ORA_SID_AUTOSTART to FALSE. The service will start but not the database.

Test the service.

If the ORA_SID_AUTOSTART setting was the problem, change it to TRUE and then test the service by stopping and then restarting the service to see it the database automatically starts. If it does, then that fixed your problem......or maybe is didn't. Reboot the server to verify that the database will start automatically. Sometimes the service will work, only to fail again after a reboot. If the service fail after rebooting you need to recreate it. This is where the oradim utility comes in.
Deleting a Service
First delete or rename the oradim.log file.
Next delete the current service.
C:>oradim -delete -sid SID
SID is of course you database SID. This may take a while so check the services to insure that the OracleServiceSID is removed before proceeding.
Creating a new Service.
Again we use oradim to recreate the service. This entire command is on one line.
c:> oradim -new -sid SID -intpwd password -startmode AUTO -pfile c:\oracle\admin\SID\pfile\initSID.ora
This command does a lot and will take some time to complete (if startmode is set to AUTO it will start the database). It recreate the database password and sets the internal password to password. NOTE: oradim changes the internal password.
The startmode determines if the service starts the database when it starts. If set to AUTO then the key ORA_SID_AUTOSTART is set to TRUE. If startmode is MANUAL then the key is set to FALSE.
Check the oradim.log for errors. Finally, verify the service works as needed by starting and stopping it. Then test with a reboot. If the service fails try recreating it again.
Scripting the Database Start in Windows
The dbstart and dbstop shell scripts do not exist on Windows platforms. Consequently Oracle database startup and shutdown is implemented completely differently. The oradim utility is used on the Windows platform to perform these tasks.
C:\oracle9i\bin\oradim -startup -sid ORCL92 –usrpwd manager
-starttype SRVC,INST -pfile
C:\oracle9i\admin\ORCL92\pfile\init.ora
• startup – Indicates that the specified instance should be started.
• sid – The SID of the database to start.
• usrpwd – The password for the database user.
• starttype – Specifies whether to start the instance, the service, or both (SRVC, INST).

The following command can be used to shutdown the instance with oradim:

C:\oracle9i\bin\oradim -shutdown -sid ORCL92 -shutttype SRVC,INST
–shutmode A

Notice that no password is needed to perform this task.

If you can't get the service to function properly you are left with scripting the starting of the database. Recreate the service with the -startmode set to MANUAL. Then create a batch file as follows:
REM Wait for the server to start.
sleep 60
REM Start the database
%ORACLE_HOME%\bin\sqlplus -s "/ as sysdba" @startup.sql
exit
The startup.sql file
-- start the database
startup
exit
-Now schedule the batch file in the Windows Scheduler to run at startup.
-If this is part of you AS10g, you can implement the startup in the script used to start the application server components.