VirtualBox snapshots using the CLI

oracle-virtualbox-logoThis is how I use the VirtualBox snapshot option on my headless server. I use this feature for creating a restore point for a critical mail server upgrade I will soon post about. Because I will use this option more often it comes handy when recorded somewhere.

Specs:

  • Debian 6.0.6 “Squeeze”
  • Virtualbox 4.1.22-80657

See the Virtualbox snapshot syntax below

VBoxManage snapshot         <uuid>|<name>
take <name> [--description <desc>] [--pause] |
delete <uuid>|<name> |
restore <uuid>|<name> |
restorecurrent |
edit <uuid>|<name>|--current
[--name <name>]
[--description <desc>] |
list [--details|--machinereadable]
showvminfo <uuid>|<name>

[Read more...]

Multipath with HP LeftHand on RHEL

HP has acquired LeftHand networks and re-branded the LeftHand storage product to the HP P4000 storage series. This is a iSCSI SAN product targeted at entry level businesses. We are using this product for various projects, where our Oracle RAC cluster is one of them. For this cluster where are setting up MPIO. Because we are using interface bonding at the moment the LUN’s are configured already and don’t have to be created.

Quick environment specs:

  • RedHat EL5.8
  • 2 NIC’s in the storage network (eth3 and eth4)

[Read more...]

Oracle ASM lifesaver

I had a very nasty experience with Oracle ASM recently. A long story short, ASM crashed on both our RAC nodes when removing a corrupted archive file on file and incarnation number (removing it on it’s name didn’t work). Starting the instance failed. When removing the failing diskgroup ASM was happy again. Luckily the failing diskgroup only housed archivelog files, except for one database it also held it’s index datafile.  So that one wouldn’t come up. If you’re in such a situation, you can use the Oracle tools amdu in combination with kfed to extract the missing datafile or archivelogs (in our situation) from a dismounted diskgroup. If I knew that from the start it saved me alot of frustrating hours.

Oracle 11g ASM disk discovery

During the installation of Oracle 11gR2 on Red Hat Enterprise Linux 5 I stumbled upon a incorrect default setting for ASM disk discovery when using ASM lib. The discovery path is set to ‘/dev/raw/sd*’, which is incorrect because ASM lib creates the devices under ‘/dev/oracleasm/disks’.

Another thing to be aware of is the ownership of the disks. You need to run ‘/etc/init.d/oracleasm configure’ in order to configure the owner. If you just hit return the ownership of the disks is set to root. Because you will start the Oracle installation as user oracle the disks will not appear in the discovery step during the installation.

[Read more...]

Delete rows from table where date

If you need to get rid of some table rows, in my case a Sun IDM logging table, you can use the following steps.

1. Create a backup in case you have done some thing wrong u can always revert back.

create table waveset.log_backup as select * from waveset.log;

2. Check if these are the records you want to keep and rest all delete.

select * from waveset.log_backup where repomod between'26-MAR-09' and '01-MAY-09';

3. Delete logging from timestamp type collumn ‘REPOMOD’ between dates:

delete from waveset.log_backup where repomod between'26-MAR-09' and '01-MAY-09';

4. if this works do the same on the real table instead of the backup table.

Optionally you can repeat the same trick on the waveset.syslog table, which also can grow to huge proportions.

Oracle RAC connect string for JDBC

For a Tomcat installation I needed to connect to a Oracle RAC database backend. I figured out the correct connection string, shown below:

jdbcUrl="jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=rac01)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=rac02)(PORT=1521))(LOAD_BALANCE=on)(FAILOVER=on)(CONNECT_DATA=(SERVICE_NAME=orcl)))"

tracing SQL in Oracle

If you want to know what SQL statements are actually being executed by an application because something goes wrong and there is no clear error message explaining what’s happening you can use SQL Trace. SQL Trace can be enabled on the current session, the session of another user or the complete database.

To enable SQL Trace on the current session

alter session set sql_trace = true;

You can find the output of the trace in the udump directory of the database (see the value of parameter user_dump_dest). You can chose to give the tracefile another name, see the next example:

alter session set sql_trace = true;
alter session set tracefile_identifier = customname;

When done tracing you’ll need to stop the trace:

alter session set sql_trace = false;

To enable SQL trace on another session
You’ll first need to know which session to trace, by looking up the sid and serial#:

select s.sid,
s.serial#,
s.osuser,
s.program
from v$session s;

Start the trace on sid number 8 and serial 13607:

alter system set timed_statistics = true;
execute dbms_system.set_sql_trace_in_session(8, 13607, true);

Carry out the to trace actions and stop the trace:

execute dbms_system.set_sql_trace_in_session(8,13607, false);

You can find the output again in the udump destination.

Trace the complete database

Start SQL Trace on the complete database:

alter system set sql_trace = true scope=memory;

Stop SQL Trace on the complete database:

alter system set sql_trace = false scope=memory;