Visit Counter

Sunday, October 11, 2015

Standby Database in READ ONLY Mode


Standby Database in Read Only mode
----------------------------------------------


Purpose:

As explained before, a physical standby database can be toggled between recovery and read-only mode. If the database is currently in managed recovery mode, in order to open it for reporting, cancel the recovery and open it as read-only.


First of all we have to cancel the recover mode of standby database.

SQL> alter database recover managed standby database cancel;
Database altered.


Open the standby database in read only mode.

SQL> alter database open read only;
Database altered.


Once you finished your reporting u have to shutdown the standby database.


SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.

Start up the database in mount mode.



SQL> startup mount
ORACLE instance started.
Total System Global Area 7348420608 bytes
Fixed Size                  2150272 bytes
Variable Size            1201614976 bytes
Database Buffers         6006243328 bytes
Redo Buffers              138412032 bytes
Database mounted.


You can start recovery mode again using below command.



SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT;



You can monitor the archive log files.



SQL> SELECT SEQUENCE#,FIRST_TIME,NEXT_TIME FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;

 

Monday, October 5, 2015

ORA-01102 cannot mount database in exclusive




The Oracle docs note this on the ora-01102 error:
ORA-01102 cannot mount database in EXCLUSIVE mode
 
Cause: Some other instance has the database mounted exclusive or shared.
Action: Shut down the other instance or mount in a compatible mode.
 
 
 
 
 
POSSIBLE SOLUTION:
 

      Verify that the database was shutdown cleanly by doing the following:

1. Verify that there is not a "sgadef<sid>.dbf" file in the directory
"ORACLE_HOME/dbs".

% ls $ORACLE_HOME/dbs/sgadef<sid>.dbf

If this file does exist, remove it.

% rm $ORACLE_HOME/dbs/sgadef<sid>.dbf

2. Verify that there are no background processes owned by "oracle"

% ps -ef | grep ora_ | grep $ORACLE_SID

If background processes exist, remove them by using the Unix
command "kill". For example:

% kill -9 <Process_ID_Number>

3. Verify that no shared memory segments and semaphores that are owned
by "oracle" still exist

% ipcs -b

If there are shared memory segments and semaphores owned by "oracle",
remove the shared memory segments

% ipcrm -m <Shared_Memory_ID_Number>

and remove the semaphores

% ipcrm -s <Semaphore_ID_Number>

NOTE: The example shown above assumes that you only have one
database on this machine. If you have more than one
database, you will need to shutdown all other databases
before proceeding with Step 4.

4. Verify that the "$ORACLE_HOME/dbs/lk<sid>" file does not exist

5. Startup the instance

Solaris 10/Oracle: Fixing ORA-27102: out of memory Error

Solaris 10/Oracle: Fixing ORA-27102: out of memory Error
Symptom:

As part of a database tuning effort you increase the SGA/PGA sizes; and Oracle greets with an ORA-27102: out of memory error message. The system had enough free memory to serve the needs of Oracle.
SQL> startup
ORA-27102: out of memory
SVR4 Error: 22: Invalid argument

Diagnosis
$ oerr ORA 27102
27102, 00000, "out of memory"
// *Cause: Out of memory
// *Action: Consult the trace file for details

Not so helpful. Let's look the alert log for some clues.
% tail -2 alert.log
WARNING: EINVAL creating segment of size 0x000000028a006000
fix shm parameters in /etc/system or equivalent

Oracle is trying to create a 10G shared memory segment (depends on SGA/PGA sizes), but operating system (Solaris in this example) responded with an invalid argument (EINVAL) error message. There is a little hint about setting shm parameters in /etc/system.

Prior to Solaris 10, shmsys:shminfo_shmmax parameter has to be set in /etc/system with maximum memory segment value that can be created. 8M is the default value on Solaris 9 and prior versions; where as 1/4th of the physical memory is the default on Solaris 10 and later. On a Solaris 10 (or later) system, it can be verified as shown below:
% prtconf | grep Mem
Memory size: 32760 Megabytes

% id -p
uid=59008(oracle) gid=10001(dba) projid=3(default)

% prctl -n project.max-shm-memory -i project 3
project: 3: default
NAME    PRIVILEGE       VALUE    FLAG   ACTION                       RECIPIENT
project.max-shm-memory
        privileged      7.84GB      -   deny                                 -
        system          16.0EB    max   deny                                 -

Now it is clear that the system is using the default value of 8G in this scenario, where as the application (Oracle) is trying to create a memory segment (10G) larger than 8G. Hence the failure.

So, the solution is to configure the system with a value large enough for the shared segment being created, so Oracle succeeds in starting up the database instance.

On Solaris 9 and prior releases, it can be done by adding the following line to /etc/system, followed by a reboot for the system to pick up the new value.

set shminfo_shmmax = 0x000000028a006000
However shminfo_shmmax parameter was obsoleted with the release of Solaris 10; and Sun doesn't recommend setting this parameter in /etc/system even though it works as expected.

On Solaris 10 and later, this value can be changed dynamically on a per project basis with the help of resource control facilities . This is how we do it on Solaris 10 and later:
% prctl -n project.max-shm-memory -r -v 10G -i project 3

% prctl -n project.max-shm-memory -i project 3
project: 3: default
NAME    PRIVILEGE       VALUE    FLAG   ACTION                       RECIPIENT
project.max-shm-memory
        privileged      10.0GB      -   deny                                 -
        system          16.0EB    max   deny                                 -

Note that changes made with the prctl command on a running system are temporary, and will be lost when the system is rebooted. To make the changes permanent, create a project with projadd command and associate it with the user account as shown below:
% projadd -p 102  -c 'eBS benchmark' -U oracle -G dba  -K 'project.max-shm-memory=(privileged,10G,deny)' OASB
% usermod -K project=OASB oracle

Finally make sure the project is created with projects -l or cat /etc/project commands.
% projects -l
...
...
OASB
        projid : 102
        comment: "eBS benchmark"
        users  : oracle
        groups : dba
        attribs: project.max-shm-memory=(privileged,10737418240,deny)

% cat /etc/project
...
...
OASB:102:eBS benchmark:oracle:dba:project.max-shm-memory=(privileged,10737418240,deny)

With these changes, Oracle would start the database up normally.
SQL> startup
ORACLE instance started.

Total System Global Area 1.0905E+10 bytes
Fixed Size                  1316080 bytes
Variable Size            4429966096 bytes
Database Buffers         6442450944 bytes
Redo Buffers               31457280 bytes
Database mounted.
Database opened.

ORA-01031: insufficient privileges



ORA-01031: insufficient privileges


Cause: An attempt was made to change the current username or password without the appropriate privilege. This error also occurs if attempting to install a database without the necessary operating system privileges. When Trusted Oracle is configure in DBMS MAC, this error may occur if the user was granted the necessary privilege at a higher label than the current login.

Action: Ask the database administrator to perform the operation or grant the required privileges. For Trusted Oracle users getting this error although granted the appropriate privilege at a higher label, ask the database administrator to re-grant the privilege at the appropriate label. 
 


I resolved this issue to add oinstall group in /etc/group in solaris and oracle user part of this group.

 

Thursday, September 17, 2015

How to Remove Oracle 12c EM Express



How to Remove 12c EM Express


SQL> exec DBMS_XDB_CONFIG.sethttpsport(0);
or
SQL> exec DBMS_XDB_CONFIG.sethttpsport(null);


But this Functionality currently is not working Due to Bug 17535882 : DBMS_XDB_CONFIG.SETHTTPSPORT(0): ORA-30952: ILLEGAL CONFIGURATION OF HTTP/HTTPS ,

Which was closed as Duplicate of unpublished Bug 17213197 : ORA-44718: PORT CONFLICT IN XDB CONFIGURATION FILE LEADS TO INSTANCE CRASH
which will be Fixed in 12.1.0.2.0 Patchset and 12.2 Base Release.
Please Apply Patch 17213197 if available or upgrade to the Patchset where Bug 17213197 is fixed .

or You can use any of the following workarounds to unset the HTTPS port :

1- Remove The <sid>XDB Dispatcher setting :


SQL> alter system set dispatchers='';

System altered.

SQL> select name from V$DISPATCHER;

NAME
----
D000

SQL> ALTER SYSTEM SHUTDOWN 'D000';

System altered.

The Dispatcher stops accepting new connections and will wait until all of the sessions it handles are disconnected before shutting down.

SQL> ALTER SYSTEM SHUTDOWN IMMEDIATE 'D000';

System altered.

The IMMEDIATE keyword stops the Dispatcher from accepting new connections and immediately terminates all existing connections through that Dispatcher. After all sessions are cleaned up, the Dispatcher process shuts down.

2- Block the Current used Port from the OS level
.

Oracle 12c EM Express Configuration




Configure EM Express Port


SQL> select dbms_xdb_config.gethttport from dual;   (for http)

(0)

SQL> select dbms_xdb_config.gethttsport from dual;  (for https)

(0)



SQL> exec DBMS_XDB_CONFIG.setHTTPsport(5500);




SQL> exec DBMS_XDB_CONFIG.setHTTPport(1200);





SQL> select dbms_xdb_config.gethttport from dual;   (for http)

(1200)

SQL> select dbms_xdb_config.gethttsport from dual;  (for https)

(5500)



https://ora12.5500/em
http://ora12.1200/em



 

Wednesday, September 16, 2015

Authentication Refused: Bad Ownership or Modes for Directory /ora/oracle





I trying to install Oracle 12c RAC on Oracle Linux 6.


While configure SSH on both nodes getting error below

# /var/log/secure


Authentication Refused: Bad Ownership or Modes for Directory /ora/oracle



# chown oracle:oinstall /ora
# chown oracle:oinstall /ora/oracle

$ chmod go-w /ora
$ chmod go-w /ora/oracle
$ chmod 700   /ora/oracle/.ssh
$ chmod 600  /ora/oracle/.ssh/authorized_keys


# service ssh restart


$ ssh rac01 date
Thu sep 17 01:56:11 AST 2015
$ssh rac02 date
Thu sep 17 01:56:11 AST 2015


$ ssh rac02 date
Thu sep 17 01:56:11 AST 2015
$ssh rac01 date
Thu sep 17 01:56:11 AST 2015