"
Eg. cpio -idmv < lnx_920_disk1.cpio
Important note: Some browsers will uncompress the files but leave the extension the same (gz) when downloading. If the above steps do not work for you, try skipping step 1 and go directly to step 2 without changing the filename.
Eg. "cpio -idmv < lnx_920_disk1.cpio.gz"
- You should now have three directories called "Disk1, Disk2 and Disk3" containing the Oracle9i Installation files:
Run the Oracle Installer
[ Return to Table of Contents ]
As the "oracle" user account:
- Set your DISPLAY variable to a valid X Windows display.
% DISPLAY=:0.0
% export DISPLAY
NOTE: If you forgot to set the DISPLAY environment variable and you get the following error:
Xlib: connection to ":0.0" refused by server
Xlib: Client is not authorized to connect to Server
You will then need to execute the following command to get "runInstaller" working again:
% rm -rf /tmp/OraInstall
If you don't do this, the Installer will hang without giving any error messages. Also make sure that "runInstaller" has stopped running in the background. If not, kill it.
- Change directory to the Oracle installation files you downloaded and extracted. Then run: runInstaller.
% cd <your temp directory>/Disk1
% ./runInstaller
- During the installation, DO NOT choose to "Create A Database." This how I answered the questions:
- Inventory Location: /u01/app/oracle/oraInventory
- UNIX Group Name: dba
- You will be prompted to run /tmp/orainstRoot.sh as the "root" user account. After performing this action, continue the install by hitting the "Continue" button in the installer.
- Destination:
- Name: OraHome920
- Path: /u01/app/oracle/product/9.2.0
- Available products: Oracle9i Database 9.2.0.1.0
Installation types: Enterprise Edition (2.04 GB)
- Database configuration: Software only
Errors during the "Link" phase
About 84% into the Link phase of the install, you will get an error when invoking the target of "install" in makefile: /u01/app/oracle/product/9.2.0/ctx/lib/ins_ctx.mk. Leave this error message up and refer to the next section, Errors during the Relink Phase of the Install, on how to resolve and continue from this error. You will come back to this error dialog box after modify the $ORACLE_HOME/ctx/lib/env_ctx.mk file.
Continuing with the "Link" phase
The "Link" phase will now successfully continue to 100% complete. When the "Link" phase is complete, you will be prompted to run the $ORACLE_HOME/root.sh script as the "root" user account. Go ahead and perform this action. When prompted for the "local bin directory," I generally choose to put the files in /opt/bin keeping with by old conventions of Solaris. You may choose to use the default of /usr/local/bin if you would like. Just make sure that whatever directory you choose that it is in the PATH environment variable of the "oracle" user account.
Completing the installation
After running the root.sh script in the above step, you have successfully installed the Oracle9i RDBMS software. At the "End of Installation" screen, simply hit the "Exit" button. A few seconds after hitting the "Exit" button will bring up "Oracle Enterprise Manager" (OEM). I generally exit from the OEM application as I keep a central repository for all nodes and databases.
From here, it is time to create the O920DB Oracle database. In the configuration files/scripts section of this document, I put together an example initO920DB.ora instance parameter file along with a set of CREATE DATABASE... scripts in an archive named create_database920.tar.
Good Luck!
Errors during the relink phase of the install
[ Return to Table of Contents ]
During the "Link Phase" of the install, you will get an error while trying to make/install CTX. (The same issue exists in 9.0.1 on RedHat Linux).
The following errors will exist in $ORACLE_HOME/install/make.log
/lib/libdl.so.2: undefined reference to `__ctype_b_loc@GLIBC_2.3'
/lib/libdl.so.2: undefined reference to `_dl_addr@GLIBC_PRIVATE'
/lib/libdl.so.2: undefined reference to `_dl_open@GLIBC_PRIVATE'
/lib/libdl.so.2: undefined reference to `_dl_close@GLIBC_PRIVATE'
/lib/libdl.so.2: undefined reference to `_dl_sym@GLIBC_PRIVATE'
/lib/libdl.so.2: undefined reference to `_dl_vsym@GLIBC_PRIVATE'
collect2: ld returned 1 exit status
make: *** [ctxhx] Error 1
This error occurs when the following is executed:
/usr/bin/make -f ins_ctx.mk install
ORACLE_HOME=/u01/app/oracle/product/9.2.0
Solution
The solution is to edit the file $ORACLE_HOME/ctx/lib/env_ctx.mk and go to "INSO_LINK =", add a "$(LDLIBFLAG)dl" to the line and save it.
Here is the full line with the added "$(LDLIBFLAG)dl" flag:
INSO_LINK = -L$(CTXLIB) $(LDLIBFLAG)m $(LDLIBFLAG)dl $(LDLIBFLAG)sc_ca $(LDLIBFLAG)sc_fa $(LDLIBFLAG)sc_ex $(LDLIBFLAG)sc_da $(LDLIBFLAG)sc_ut $(LDLIBFLAG)sc_ch $(LDLIBFLAG)sc_fi $(LLIBCTXHX) $(LDLIBFLAG)c -Wl,-rpath,$(CTXHOME)lib $(CORELIBS) $(COMPEOBJS)
Set LD_ASSUME_KERNEL
You will also need to enter LD_ASSUME_KERNEL=2.2.5 in your .profile (or .bash_profile if you are using BASH) for the "oracle" user account so that they you can run programs like "dbssist" and "netca".
Return and retry
After making the above change, return to the popup error dialog box and hit "Retry". It should continue from here with no errors.
Creating an Oracle9i Database on RAW devices
[ Return to Table of Contents ]
Now to the heart of this document, and that is how to create a database using RAW devices instead of using files on a file system. So far, all of the action has taken place on the master IDE drive, /dev/hda. It is now time to work with that second hard drive in our system, /dev/hdb. As I mentioned in the first section of this document, the Linux operating system and the Oracle RDBMS software will be installed on /dev/hda, while we will be creating a database named O920DB on RAW devices on the /dev/hdb disk. Here is a short overview of how we will be accomplishing this:
- We will be using the entire /dev/hdb hard drive for the Oracle database. There should be no partition tables on this disk. I will show how to remove any parition tables from the disk.
- We will then create an LVM Physical Volume called /dev/pv1 for the entire /dev/hdb hard drive.
- The demonstration will then continue by creating an LVM Volume Group and including the previously created LVM Physical Volume.
- After creating the LVM Volume Group, we then continue by creating an LVM Logical Volume for each datafile, controlfile, and online redo log file for our new database. All together, we will be creating 24 Logical Volumes.
- Use the raw command to bind RAW devices to our Logical Volumes created in the previous task.
- We complete this section with a sample SQL script that creates a database named O920DB that utilizes our RAW deivces.
Removing any partitions on second IDE internal hard drive
I decided to use my second IDE 40GB hard drive as the one to store the Oracle database files. The device was recognized on my system as: /dev/hdb. Lets assume for the purpose of this document that the entire hard drive should be dedicated to Oracle database files and that no partitions will exist. If there are partitions on the /dev/hdb hard disk, there are several ways to remove them. The first way is to use the Linux fdisk utility. Using fdisk, you can simply walk through any of the primary / extended partitions and use the proper commands to remove them. Once you have removed all of the partitions, use the p command within fdisk to verify that no further partitions exist. When you are sure they are all removed, use the w command within fdisk to write your changes to the hard disk's partition table.
Another way to remove any entries in the hard disk's partition table is to use the dd command:
The following commands will destroy the partition table on the disk being operated on. Be very sure it is the correct disk before continuing!
# dd if=/dev/zero of=/dev/hdb bs=1K count=1
1+0 records in
1+0 records out
# blockdev --rereadpt /dev/hdb
At this point, you should have a hard drive recognized as /dev/hdb with no partitions.
Create the LVM physical volume
In this step, we will create an LVM Physical Volume called /dev/pv1 for the entire hard disk /dev/hdb.
Before continuing with the syntax for creating the LVM Physical Volume, I want to mention that within the configuration files/scripts section of this document, I included a shell script named create_hdb_lvm.sh that contains all of the commands to create the LVM Physical Volume, LVM Volume Group, and LVM Logical Volumes for the /dev/hdb hard drive. Create an LVM Physical Volume named /dev/pv1 for the entire /dev/hdb hard drive using the following command:
# pvcreate /dev/hdb
pvcreate -- physical volume "/dev/hdb" successfully created
Create the LVM volume group
In this step, we will create an LVM Volume Group that will contain the LVM Physical Volume /dev/pv1.
Like mentioned in the previous section, all commands for creating the LVM Logical Volumes are contained in the script create_hdb_lvm.sh. Create an LVM Volume Group named that contains the LVM Physical Volume /dev/pv1.
# vgcreate -l 256 -p 256 -s 128k /dev/pv1 /dev/hdb
vgcreate -- INFO: maximum logical volume size is 8 GB
vgcreate -- doing automatic backup of volume group "pv1"
vgcreate -- volume group "pv1" successfully created and activated
Create all LVM logical volumes
Now that we have a LVM Volume Group that contains the block device /dev/hdb, it is time to create all of the LVM Logical Volumes that will be used to house all of the Oracle database files.
Like mentioned in the previous section, all commands for creating the LVM Logical Volumes are contained in the script create_hdb_lvm.sh. Create all required LVM Logical Volumes as determined by the number of Oracle database files you will need for the database. In our example, we will need to create 24 LVM Logical Volumes in order to store the 24 Oracle database files for our O920DB database.
# lvcreate -L 900m /dev/pv1 # SYSTEM Tablespace - (800m)
lvcreate -- doing automatic backup of "pv1"
lvcreate -- logical volume "/dev/pv1/lvol1" successfully created
# lvcreate -L 120m /dev/pv1 # Control File 1 - (110m)
lvcreate -- doing automatic backup of "pv1"
lvcreate -- logical volume "/dev/pv1/lvol2" successfully created
# lvcreate -L 120m /dev/pv1 # Control File 2 - (110m)
lvcreate -- doing automatic backup of "pv1"
lvcreate -- logical volume "/dev/pv1/lvol3" successfully created
# lvcreate -L 120m /dev/pv1 # Control File 3 - (110m)
lvcreate -- doing automatic backup of "pv1"
lvcreate -- logical volume "/dev/pv1/lvol4" successfully created
# lvcreate -L 60m /dev/pv1 # redo_g01a.log - (50m)
lvcreate -- doing automatic backup of "pv1"
lvcreate -- logical volume "/dev/pv1/lvol5" successfully created
# lvcreate -L 60m /dev/pv1 # redo_g01b.log - (50m)
lvcreate -- doing automatic backup of "pv1"
lvcreate -- logical volume "/dev/pv1/lvol6" successfully created
# lvcreate -L 60m /dev/pv1 # redo_g01c.log - (50m)
lvcreate -- doing automatic backup of "pv1"
lvcreate -- logical volume "/dev/pv1/lvol7" successfully created
# lvcreate -L 60m /dev/pv1 # redo_g02a.log - (50m)
lvcreate -- doing automatic backup of "pv1"
lvcreate -- logical volume "/dev/pv1/lvol8" successfully created
# lvcreate -L 60m /dev/pv1 # redo_g02b.log - (50m)
lvcreate -- doing automatic backup of "pv1"
lvcreate -- logical volume "/dev/pv1/lvol9" successfully created
# lvcreate -L 60m /dev/pv1 # redo_g02c.log - (50m)
lvcreate -- doing automatic backup of "pv1"
lvcreate -- logical volume "/dev/pv1/lvol10" successfully created
# lvcreate -L 60m /dev/pv1 # redo_g03a.log - (50m)
lvcreate -- doing automatic backup of "pv1"
lvcreate -- logical volume "/dev/pv1/lvol11" successfully created
# lvcreate -L 60m /dev/pv1 # redo_g03b.log - (50m)
lvcreate -- doing automatic backup of "pv1"
lvcreate -- logical volume "/dev/pv1/lvol12" successfully created
# lvcreate -L 60m /dev/pv1 # redo_g03c.log - (50m)
lvcreate -- doing automatic backup of "pv1"
lvcreate -- logical volume "/dev/pv1/lvol13" successfully created
# lvcreate -L 250m /dev/pv1 # UNDOTBS Tablespace - (200m)
lvcreate -- doing automatic backup of "pv1"
lvcreate -- logical volume "/dev/pv1/lvol14" successfully created
# lvcreate -L 250m /dev/pv1 # TEMP Tablespace - (200m)
lvcreate -- doing automatic backup of "pv1"
lvcreate -- logical volume "/dev/pv1/lvol15" successfully created
# lvcreate -L 60m /dev/pv1 # DRSYS Tablespace - (50m)
lvcreate -- doing automatic backup of "pv1"
lvcreate -- logical volume "/dev/pv1/lvol16" successfully created
# lvcreate -L 60m /dev/pv1 # CWMLITE Tablespace - (50m)
lvcreate -- doing automatic backup of "pv1"
lvcreate -- logical volume "/dev/pv1/lvol17" successfully created
# lvcreate -L 200m /dev/pv1 # EXAMPLE Tablespace - (150m)
lvcreate -- doing automatic backup of "pv1"
lvcreate -- logical volume "/dev/pv1/lvol18" successfully created
# lvcreate -L 300m /dev/pv1 # PERFSTAT Tablespace - (250m)
lvcreate -- doing automatic backup of "pv1"
lvcreate -- logical volume "/dev/pv1/lvol19" successfully created
# lvcreate -L 60m /dev/pv1 # ODM Tablespace - (50m)
lvcreate -- doing automatic backup of "pv1"
lvcreate -- logical volume "/dev/pv1/lvol20" successfully created
# lvcreate -L 60m /dev/pv1 # XDB Tablespace - (50m)
lvcreate -- doing automatic backup of "pv1"
lvcreate -- logical volume "/dev/pv1/lvol21" successfully created
# lvcreate -L 150m /dev/pv1 # USERS Tablespace - (100m)
lvcreate -- doing automatic backup of "pv1"
lvcreate -- logical volume "/dev/pv1/lvol22" successfully created
# lvcreate -L 150m /dev/pv1 # INDX Tablespace - (100m)
lvcreate -- doing automatic backup of "pv1"
lvcreate -- logical volume "/dev/pv1/lvol23" successfully created
# lvcreate -L 100m /dev/pv1 # TOOLS Tablespace - (50m)
lvcreate -- doing automatic backup of "pv1"
lvcreate -- logical volume "/dev/pv1/lvol24" successfully created
Create RAW bindings
In this step, we will create (or edit) a script called /etc/init.d/dbora that contains all of the commands that will bind the volumes to RAW devices. Also included are the commands to change the ownership of the raw devices for use by the Oracle database user "oracle".
I put these commands in script since they will need to be executed on each machine startup. Keep in mind that in most cases, the commands to start and stop the database are included in the /etc/init.d/dbora file. You can simply put the commands to bind the volumes to raw and chown commands in the start) portion of your script.
A sample script named dbora is include in the configuration files/scripts section of this document.
# vgchange -a y /dev/pv1
vgchange -- volume group "pv1" successfully activated
# /usr/bin/raw /dev/raw/raw1 /dev/pv1/lvol1 # SYSTEM Tablespace
/dev/raw/raw1: bound to major 58, minor 0
# /usr/bin/raw /dev/raw/raw2 /dev/pv1/lvol2 # Control File 1
/dev/raw/raw2: bound to major 58, minor 1
# /usr/bin/raw /dev/raw/raw3 /dev/pv1/lvol3 # Control File 2
/dev/raw/raw3: bound to major 58, minor 2
# /usr/bin/raw /dev/raw/raw4 /dev/pv1/lvol4 # Control File 3
/dev/raw/raw4: bound to major 58, minor 3
# /usr/bin/raw /dev/raw/raw5 /dev/pv1/lvol5 # redo_g01a.log
/dev/raw/raw5: bound to major 58, minor 4
# /usr/bin/raw /dev/raw/raw6 /dev/pv1/lvol6 # redo_g01b.log
/dev/raw/raw6: bound to major 58, minor 5
# /usr/bin/raw /dev/raw/raw7 /dev/pv1/lvol7 # redo_g01c.log
/dev/raw/raw7: bound to major 58, minor 6
# /usr/bin/raw /dev/raw/raw8 /dev/pv1/lvol8 # redo_g02a.log
/dev/raw/raw8: bound to major 58, minor 7
# /usr/bin/raw /dev/raw/raw9 /dev/pv1/lvol9 # redo_g02b.log
/dev/raw/raw9: bound to major 58, minor 8
# /usr/bin/raw /dev/raw/raw10 /dev/pv1/lvol10 # redo_g02c.log
/dev/raw/raw10: bound to major 58, minor 9
# /usr/bin/raw /dev/raw/raw11 /dev/pv1/lvol11 # redo_g03a.log
/dev/raw/raw11: bound to major 58, minor 10
# /usr/bin/raw /dev/raw/raw12 /dev/pv1/lvol12 # redo_g03b.log
/dev/raw/raw12: bound to major 58, minor 11
# /usr/bin/raw /dev/raw/raw13 /dev/pv1/lvol13 # redo_g03c.log
/dev/raw/raw13: bound to major 58, minor 12
# /usr/bin/raw /dev/raw/raw14 /dev/pv1/lvol14 # UNDOTBS Tablespace
/dev/raw/raw14: bound to major 58, minor 13
# /usr/bin/raw /dev/raw/raw15 /dev/pv1/lvol15 # TEMP Tablespace
/dev/raw/raw15: bound to major 58, minor 14
# /usr/bin/raw /dev/raw/raw16 /dev/pv1/lvol16 # DRSYS Tablespace
/dev/raw/raw16: bound to major 58, minor 15
# /usr/bin/raw /dev/raw/raw17 /dev/pv1/lvol17 # CWMLITE Tablespace
/dev/raw/raw17: bound to major 58, minor 16
# /usr/bin/raw /dev/raw/raw18 /dev/pv1/lvol18 # EXAMPLE Tablespace
/dev/raw/raw18: bound to major 58, minor 17
# /usr/bin/raw /dev/raw/raw19 /dev/pv1/lvol19 # PERFSTAT Tablespace
/dev/raw/raw19: bound to major 58, minor 18
# /usr/bin/raw /dev/raw/raw20 /dev/pv1/lvol20 # ODM Tablespace
/dev/raw/raw20: bound to major 58, minor 19
# /usr/bin/raw /dev/raw/raw21 /dev/pv1/lvol21 # XDB Tablespace
/dev/raw/raw21: bound to major 58, minor 20
# /usr/bin/raw /dev/raw/raw22 /dev/pv1/lvol22 # USERS Tablespace
/dev/raw/raw22: bound to major 58, minor 21
# /usr/bin/raw /dev/raw/raw23 /dev/pv1/lvol23 # INDX Tablespace
/dev/raw/raw23: bound to major 58, minor 22
# /usr/bin/raw /dev/raw/raw24 /dev/pv1/lvol24 # TOOLS Tablespace
/dev/raw/raw24: bound to major 58, minor 23
# /bin/chmod 600 /dev/raw/raw1
# /bin/chmod 600 /dev/raw/raw2
# /bin/chmod 600 /dev/raw/raw3
# /bin/chmod 600 /dev/raw/raw4
# /bin/chmod 600 /dev/raw/raw5
# /bin/chmod 600 /dev/raw/raw6
# /bin/chmod 600 /dev/raw/raw7
# /bin/chmod 600 /dev/raw/raw8
# /bin/chmod 600 /dev/raw/raw9
# /bin/chmod 600 /dev/raw/raw10
# /bin/chmod 600 /dev/raw/raw11
# /bin/chmod 600 /dev/raw/raw12
# /bin/chmod 600 /dev/raw/raw13
# /bin/chmod 600 /dev/raw/raw14
# /bin/chmod 600 /dev/raw/raw15
# /bin/chmod 600 /dev/raw/raw16
# /bin/chmod 600 /dev/raw/raw17
# /bin/chmod 600 /dev/raw/raw18
# /bin/chmod 600 /dev/raw/raw19
# /bin/chmod 600 /dev/raw/raw20
# /bin/chmod 600 /dev/raw/raw21
# /bin/chmod 600 /dev/raw/raw22
# /bin/chmod 600 /dev/raw/raw23
# /bin/chmod 600 /dev/raw/raw24
# /bin/chown oracle:dba /dev/raw/raw1
# /bin/chown oracle:dba /dev/raw/raw2
# /bin/chown oracle:dba /dev/raw/raw3
# /bin/chown oracle:dba /dev/raw/raw4
# /bin/chown oracle:dba /dev/raw/raw5
# /bin/chown oracle:dba /dev/raw/raw6
# /bin/chown oracle:dba /dev/raw/raw7
# /bin/chown oracle:dba /dev/raw/raw8
# /bin/chown oracle:dba /dev/raw/raw9
# /bin/chown oracle:dba /dev/raw/raw10
# /bin/chown oracle:dba /dev/raw/raw11
# /bin/chown oracle:dba /dev/raw/raw12
# /bin/chown oracle:dba /dev/raw/raw13
# /bin/chown oracle:dba /dev/raw/raw14
# /bin/chown oracle:dba /dev/raw/raw15
# /bin/chown oracle:dba /dev/raw/raw16
# /bin/chown oracle:dba /dev/raw/raw17
# /bin/chown oracle:dba /dev/raw/raw18
# /bin/chown oracle:dba /dev/raw/raw19
# /bin/chown oracle:dba /dev/raw/raw20
# /bin/chown oracle:dba /dev/raw/raw21
# /bin/chown oracle:dba /dev/raw/raw22
# /bin/chown oracle:dba /dev/raw/raw23
# /bin/chown oracle:dba /dev/raw/raw24
Create the Oracle9i Database O920DB
If you have successfully made it to this point, you are almost done. The only part left now, is to create the O920DB database. I put together an example initO920DB.ora instance parameter file along with a set of CREATE DATABASE... scripts in an archive create_database920.tar in the configuration files/scripts section of this document.
Configuration files/scripts
[ Return to Table of Contents ]
Example:
.bash_profile
$HOME/.bash_profile for the "oracle" user account.
create_hdb_lvm.sh
An example shell script to create all Physical Volumes, Volume Groups and Logical Volumes for supporting the O920DB database.
dbora
An example shell script that binds all volumes to RAW devices on each machine startup.
initO920DB.ora
Sample instance parameter script for Oracle9i. Place this file in ~oracle/admin/O920DB/pfile before running the RUN_CRDB.sh script below.
create_database920.tar
An example "create database" set of scripts. Untar the file to ~oracle/admin/O920DB/create. If you decide to change the name of the ORACLE_SID, here are the files that need to be changed:
- crdb.sh
- create_database.sql
The main script to run is: RUN_CRDB.sh.