Migrate CVS to another server

Follow the guide to copy unix users to another server first, then:

rsync -avz -e ssh /usr/local/cvsroot targetserver:/usr/local

reconfigure IP address on new server to match old and shutdown old server before rebooting the new one.

ORACLE RAC Sandbox Installation

Create 2 Standard Build Virtual Machines with Raw Storage devices and Oracle system settings

Create mapped physical storage for the VMWare hosts on the SAN according to the size requirements listed below in the raw mapping table.

Configure raw devices in /etc/sysconfig/rawdevices and restart the rawdevices service

/dev/raw/raw1 /dev/sdb1 # Voting 300M

/dev/raw/raw2 /dev/sdc1 # OCR 400M

/dev/raw/raw10 /dev/sdd1 #DATA1 4G

/dev/raw/raw11 /dev/sde1 # DATA2 4G

/dev/raw/raw12 /dev/sdf1 # DATA3 4G

Assign 2 network cards in VMWare to each host - 1 private and 1 public

Change owner on all raw devices to oracle.oinstall

Zero out the raw devices:

dd if=/dev/zero of=/dev/raw/raw1

dd if=/dev/zero of=/dev/raw/raw2

dd if=/dev/zero of=/dev/raw/raw10

dd if=/dev/zero of=/dev/raw/raw11

dd if=/dev/zero of=/dev/raw/raw12

Create 1 public and 1 private ip on each server

Create Oracle user and groups:

groupadd -g 200 oinstall

groupadd -g 201 dba

useradd -u 200 -g oinstall -G dba oracle

Create host entries for the public and private ip's on both servers

Example IP scheme:

Node Interface Name Type IP Address Registered In

rac1 rac1 Public 143.46.43.100 DNS (if available, else the hosts file)

rac1 rac1-vip Virtual 143.46.43.104 DNS (if available, else the hosts file)

rac1 rac1-priv Private 10.0.0.1 Hosts file

rac2 rac2 Public 143.46.43.101 DNS (if available, else the hosts file)

rac2 rac2-vip Virtual 143.46.43.105 DNS (if available, else the hosts file)

rac2 rac2-priv Private 10.0.0.2 Hosts file

Create additional host entries for the VIP addresses, but DO NOT create the actual ip interfaces for these VIPs - oracle installer handles the VIP addresses

create /etc/udev/permissions.d/40-udev.permissions file with the following:

#ocr file

raw/raw2:root:oinstall:0640

#votedisk file

raw/raw1:oracle:oinstall:0660

#If using Device Mapper for ASM, then use the dm devices

#ASM disks

#dm-[1-9]:oracle:oinstall:0640

/sbin/service nscd start

chkconfig nscd on

Validate software requirements:

Red Hat Enterprise Linux 4

(Update 1 or later):Packages

The following packages (or later versions) must be installed:

binutils-2.15.92.0.2-10.EL4

binutils-2.15.92.0.2-13.0.0.0.2.x86_64

compat-db-4.1.25-9

control-center-2.8.0-12

gcc-3.4.3-9.EL4

gcc-c++-3.4.3-9.EL4

glibc-2.3.4-2

glibc-common-2.3.4-2

gnome-libs-1.4.1.2.90-44.1

libstdc++-3.4.3-9.EL4

libstdc++-devel-3.4.3-9.EL4

make-3.80-5

Note: XDK is not supported with gcc on Red Hat Enterprise

Linux 4

Run commands to setup user equivalence:

Starting on racdev1 as the oracle user -

mkdir /home/oracle/.ssh; chmod 755 .ssh

ssh-keygen -t rsa # leave password blank

ssh-keygen -t dsa # leave password blank

cd .ssh

ssh racdev2 mkdir .ssh

ssh racdev2 chmod 755 .ssh

ssh racdev2 cat /home/oracle/.ssh/id_rsa.pub >> authorized_keys

ssh racdev2 cat /home/oracle/.ssh/id_dsa.pub >> authorized_keys

ssh racdev1 cat /home/oracle/.ssh/id_dsa.pub >> authorized_keys

ssh racdev1 cat /home/oracle/.ssh/id_rsa.pub >> authorized_keys

ssh racdev1

scp authorized_keys racdev2:/home/oracle/.ssh

ssh racdev2 uname -a

Downloaded 10G R2 for Linux x86_64:

http://www.oracle.com/technology/software/products/database/oracle10g/htdocs/10201linx8664soft.html

and Clusterware 10G R2:

http://download.oracle.com/otn/linux/oracle10g/10201/10201_clusterware_linux_x86_64.cpio.gz

Locate the cvuqdisk RPM package, which is in the directory clusterware/rpm

on the installation media. If you have already installed Oracle Clusterware, then it

is located in the directory CRS_home/rpm. Install on all nodes in cluster.

Set the environment variable CVUQDISK_GRP to point to the group that will own

cvuqdisk, typically oinstall.

Use the following command to install the cvuqdisk package:

rpm -iv cvuqdisk-1.0.1-1.rpm

Add to /etc/profile

if [ $USER = "oracle" ]; then

if [ $SHELL = "/bin/ksh" ]; then

ulimit -p 16384

ulimit -n 65536

else

ulimit -u 16384 -n 65536

fi

fi

/home/oracle/clusterware/cluvfy/runcluvfy.sh stage -post hwos -n racdev1,racdev2 -verbose

gzip -d 10201_database_linux_x86_64.cpio.gz

cpio -idmv<10201_database_linux_x86_64.cpio

vncserver

mkisofs -JR -l -o 10.2.0.1.0ora.iso database/

gunzip ship.db.cpio.gz

cpio -idmv<ship.db.cpio

Create iso for burning a CD

mkisofs -JR -l -o ship.db.iso Disk1/

unzip p5337014_10203_Linux-x86-64.zip

./runcluvfy.sh stage -pre crsinst -n racdev1,racdev2

su - oracle -c "/home/oracle/clusterware/cluvfy/runcluvfy.sh stage -pre crsinst -n racdev1,racdev2"

IGNORE THE ERROR REGARDING VIP ADDRESSES FOR NOW

Run the following command and also add it to /etc/rc.local:

insmod /lib/modules/2.6.9-67.0.4.ELsmp/kernel/drivers/char/hangcheck-timer.ko hangcheck_tick=30 hangcheck_margin=180

To avoid this error below:

/u01/crs1020/bin/crsctl.bin: error while loading shared libraries: libstdc++.so.5: cannot open shared object file: No such file or directory

Failure initializing entries in /etc/oracle/scls_scr/racdev1.

Do this:

rpm -Uvh http://santa/repository/patch/current/rhel4-x86_64/compat-libstdc++-33-3.2.3-47.3.x86_64.rpm

ln -s /usr/lib64/libstdc++.so.5.0.7 /lib/libstdc++.so.5

ln -s /usr/lib64/libstdc++.so.5.0.7 /usr/lib/libstdc++.so.5

Run

/home/oracle/clusterware/runInstaller from a vnc session and follow oracle instructions to the letter.

Log is in:

/u01/app/oracle/oraInventory/logs/installActions2008-02-22_04-25-47AM.log

Edit rootconfig

chmod +w /u01/crs1020/install/rootconfig

vi /u01/crs1020/install/rootconfig

change MISCNT value to 300 and save

when prompted run:

/u01/crs1020/root.sh

create /etc/udev/permissions.d/40-udev.permissions with the following:

#ocr file

raw/raw2:root:oinstall:0640

#votedisk file

raw/raw1:oracle:oinstall:0660

raw/raw10:oracle:oinstall:0660

raw/raw11:oracle:oinstall:0660

raw/raw12:oracle:oinstall:0660

/u01/crs1020/bin/racgons add_config racdev1:6200 racdev2:6200

/u01/crs1020/bin/oifcfg setif -global eth0/10.3.17.0:public eth1/192.168.10.0:cluster_interconnect

PRIF-12: failed to initialize cluster support services # Still stuck on this error

/u01/crs1020/bin/cluvfy stage -post crsinst -n racdev1,racdev2

############# Ran these for troubleshooting purposes only ##################

Ran these manually from the rootconfig script while troubleshooting errors

/u01/crs1020/css/admin/init.cssd activatevg

/u01/crs1020/bin/crsctl create scr oracle

/u01/crs1020/bin/clscfg -install -nn racdev1,1,racdev2,2 -pn racdev1-priv,1,racdev2-priv,2 -hn racdev1,1,racdev2,2 -o /u01/crs1020 -c crsdev -l 'AMERICAN_AMERICA.WE8ISO8859P1' -q /dev/raw/raw1 "-misscount 300"

[root@racdev2 bin]# mkdir ~oracle/.proxysrv

[root@racdev2 bin]# chown -R oracle ~oracle/.proxysrv

[root@racdev2 bin]# chmod 755 ~oracle/.proxysrv

[root@racdev2 bin]# cp evm/admin/init.evmd /etc/init.d/init.evmd

cp: cannot stat `evm/admin/init.evmd': No such file or directory

[root@racdev2 bin]# cd /u01/crs1020/

[root@racdev2 crs1020]# cp evm/admin/init.evmd /etc/init.d/init.evmd

[root@racdev2 crs1020]# cp css/admin/init.cssd /etc/init.d/init.cssd

[root@racdev2 crs1020]# cp crs/admin/init.crsd /etc/init.d/init.crsd

[root@racdev2 crs1020]# cp crs/admin/init.crs /etc/init.d/init.crs

/etc/init.d/init.crs start

/etc/init.d/init.cssd startcheck CSS

/u01/crs1020/bin/crsctl check install -wait 600

################# END of troubleshooting #########################

Create an ISO from a directory on Linux

Create iso for burning a CD

mkisofs -JR -l -o <filename>.iso <foldername>/

Perl script to rename a bunch of directories recursively

#!/usr/bin/perl

my %repTable = (

'Original Folder Name' => 'New Folder Name',

'Original Folder Name' => 'New Folder Name',

'Original Folder Name' => 'New Folder Name',

'Original Folder Name' => 'New Folder Name',

'Original Folder Name' => 'New Folder Name'

);

foreach my $k (keys(%repTable)) {

print "Rename $k => $repTable{$k}n";

print "Find ...n";

my @finds = `find . -type d -name '$k'`;

foreach my $find (@finds) {

chomp $find;

my $repl = $find;

$repl =~ s/$k/$repTable{$k}/;

print "Rename $find => $repln";

system("mv '$find' '$repl'");

}

}

Or rename and move contents for any folder where new folder name already exists

#!/usr/bin/perl

my %repTable = (

'Original Folder Name' => 'New Folder Name',

'Original Folder Name' => 'New Folder Name',

'Original Folder Name' => 'New Folder Name',

'Original Folder Name' => 'New Folder Name',

'Original Folder Name' => 'New Folder Name'

);

foreach my $k (keys(%repTable)) {

print "Rename $k => $repTable{$k}n";

print "Find ...n";

my @finds = `find . -type d -name '$k'`;

foreach my $find (@finds) {

chomp $find;

my $repl = $find;

$repl =~ s/$k/$repTable{$k}/;

if (-e $repl) {

print "Sync $find => $repln";

system("rsync -a --progress '$find/' '$repl/'");

print "Remove $findn";

system("rm -rf '$find'");

} else {

print "Rename $find => $repln";

system("mv '$find' '$repl'");

}

}

}

Or if there are parenthesis in any of the source folder names...

my %repTable = (

'Original Folder (Name)' => 'New Folder Name',

'Original Folder (Name)' => 'New Folder Name',

'Original Folder Name' => 'New Folder Name',

'Original Folder Name' => 'New Folder Name',

'Original Folder Name' => 'New Folder Name'

);

foreach my $k (keys(%repTable)) {

print "Rename $k => $repTable{$k}n";

print "Find ...n";

my @finds = `find . -type d -name '$k'`;

foreach my $find (@finds) {

chomp $find;

my $repl = $find;

my $fk = $k;

$fk =~ s/(/\(/g;

$fk =~ s/)/\)/g;

$repl =~ s/$fk/$repTable{$k}/;

if (-e $repl) {

print "Sync $find => $repln";

system("rsync -a --progress '$find/' '$repl/'");

print "Remove $findn";

system("mv '$find' '$find.old'");

} else {

print "Rename $find => $repln";

system("mv '$find' '$repl'");

}

}

}

Perl Script to fix beginning of File name
#!/usr/bin/perl -w  print("Filename beginning characters that you want to change: "); chomp($badex = <STDIN>);  print("Filename beginning that you want added: "); chomp($goodex = <STDIN>);  foreach $file (<$badex*>){     @fields = split(/$badex/,$file);     $goodfile = ("$goodex" . "$fields[1]");      rename("$file","$goodfile"); } 
Perl script to change file extensions
#!/usr/bin/perl -w  print("File extension that you want to change: "); chomp($badex = <STDIN>);  print("File extension that you want added: "); chomp($goodex = <STDIN>);  foreach $file (<*$badex>){     @fields = split(/$badex/,$file);     $goodfile = ("$fields[0]" . "$goodex");      rename("$file","$goodfile"); }