How to install Oracle Enterprise 10g R2 in a Debian GNU / Linux Xen guest, domU, into a Debian Xen host, dom0.
It is possible to install and run Oracle Enterprise Database 10g Release 2 (10.2.0.1.0) for Linux x86 in a Debian GNU / Linux 4.0 Etch Xen guest, domU, into a Debian GNU / Linux 4.0 Etch Xen host, dom0.
Why would you do this?
Oracle Enterprise Database 10g R2 is a resource hog and MUST run in an exclusive powerful machine.
Period.
You must not run any other service at it.
Nothing else.
For installation you will have to tweak kernel parameters and environment variables that impact other apps.
Even stronger security, beyond the database engine policies theirself, should be implemented at an external "heavy armored shield machine".
If you have one GOOD powerful server and storage available, you could setup separated Virtual Machines for your development, other for tests, other for integration, other for customer tests and acceptance, staging before the production with reduced costs. You could also have different VMs for each developer initial phase risky ideas.
You could even disable other VMs and or tweak memory of your VM while running critical performance tests.
Virtualization is very good for development. If you make mistakes, zap your breaked image and restart from a previously saved good image in few minutes.
Using different LVM partitions for engine and data, leaving spare LVM partitions for fast image backup / restores during the development, you will have more flexibility.
For real backups you will have to use DLTs or other reliable method.
Virtualization also allows you tweak memory for impact evaluation.
Debian GNU / Linux has a much smaller memory, disk, active services, security exposure footprints than Red Hat or Unbreakable Linux.
Debian is visibly more fast, tunable and manageable, also.
A bare minimal Debian 4.0 Etch could fit into 24 MB RAM and only NFS port active, while the RH 4.0 could use 196 MB RAM when ready to install Oracle and even loads a graphical interface on the server (a security heresy).
Where is the "less is more" IT motto?
It is not practical to selectively install Red Hat packages for the Oracle installations. Dependency control is weak with rpm and you could break your system. You should have to install pre-defined bloated X-window graphical rpm package selection.
If you want to run into a VM, and for development, these could be significant factors.
When running multiple Virtual Machines in a server, each memory byte and active service counts. Less is more.
Oracle has the Express Edition available as Debian packages, but it has limitations that could not allow your development (or production).
Oracle does not certify its products for Debian, yet, and it is unlikely to do so, as it sells Unbreakable Linux and ready Oracle VM images with preconfigured Unbreakable Linux and Oracle Enterprise Database.
But these are also bloated solutions, and we are back to square one.
An Oracle Enterprise Database installation is so complex (you MUST read the massive Oracle Installation Manual), painful and error prone that we recommend that you purchase ready Oracle VM images for customer tests and acceptance and for the production.
Or carefully backup images of your preconfigured Virtual Machine disk images.
I emphasize: you MUST read the massive Oracle Installation manual.
If you are using Oracle for production, it is so expensive that a few more (tens of) thousand dollars for some more gigabytes of first classs ECC RAM, more gigabytes at your FC SAN, more fastest latest and greatest multicore multicpu blades for your server, beyond the needed Oracle stack licenses, to run these bloated solutions are not of much impact. And you will have a ready binary certified solution.
Because Oracle is a binary closed source solution, you do not have means to guarantee 100% compatibility or look for trouble spots recompiling from sources. Only Oracle could do this.
Plan for a PostgreSQL migration.
Even so, the Oracle Enterprise Database 10g R2 is running on Debian 4.0 Etch guest domU Xen VM on a Debian 4.0 Etch host dom0 Xen server since October 8th 2007 without problems, except incomplete hardware info collection (it is a VM). Debian 4.0 Etch is LSB compliant and this helps a lot for this task.
It is a matter of computing how much cost your time to configure an Unbreakeble Linux Virtual Machine with Oracle Database Engine, against upgrading your hardware, your Oracle Database AND Unbreakable Linux annual licenses fees, cost of blindly using a "black box" that you are unable to control the maintenance and code, and the cost of total vendor lock-in.
Generally speaking, if you are in a hurry, the "easy way" is to pay in advance forever.
In the long term, it will always be effective to take control of your business yourself.
As you can see, using a complete FLOSS stack could give you CHOICES.
In a hurry, you could use a consultancy support contract.
In the long term, you could leverage your staff, by training, and take control yourself, if convenient.
CHOICES.
Acknowledgements
The installation process was performed and debugged with the invaluable help of an experienced Oracle DBA, Gerson Tessler.
How to install Oracle Enterprise Database in a Debian domU?
Preparation: the Debian dom0 server
Hardware
By importance order:
Memory:
Oracle Enterprise Database 10g R2 is a resource hog.
The server hardware should be really GOOD.
You need plenty (GigabyteS) of good (ECC) RAM.
More is more.
For Oracle Database, it seems that fast RAM is never enough.
Buy more, all you could fit in your server.
We installed into a 1 (one) gigabyte ECC RAM machine for the development with multiple VMs for other apps.
A painful and learning experience, as you will see.
Disks:
The storage subsystem should be the most reliable and fastest that (your) money could buy.
If you could use a first class fastest Fiber Channel SAN device, the better.
Oracle Database performance is heavily impacted by the storage subsystem.
Use, at least, a good fast SCSI big disk or array.
IDE or SATA desktop disks are painfully slow and unreliable.
Oh, yes, newest SATA disks have good BURST transfer speeds. But good fast SCSI disks and controllers have SUSTAINED transfer speeds and lightning burst speeds.
Use LVM for managing partitions, as it works well with Xen.
Do not use RAW partitions for Oracle Database. As of 2007, linux filesystems are so efficient that RAW partitions do not give reasonable performance gains over them and add too much management complexity and inflexibility.
CPU:
If you still have enough remaining money, buy the more multicores and fastest CPU(s) you could with it.
But first, invest at memory, then at storage subsystem purchases.
Software
The bare minimum Debian 4.0r1 Etch GNU / Linux dom0 Xen server.
At your server hardware, select the minimum install during the Debian Installer phase.
If you use a Net Install disk, you will automatically download and install the latest security updates.
If you use a regular CD/DVD install disk, you will have to security update your system as soon as possible.
Installed packages:
After the Debian minimum install, you will use some features of the powerful Debian package system for copying and installing the package selection.
Record copy the system configuration, as per Debian Reference Manual.
Server info:
For comparison if things go wrong, we reproduce some hardware HP ML 370 server info below.
# cat /proc/cpuinfo processor : 0 vendor_id : GenuineIntel cpu family : 15 model : 4 model name : Intel(R) Xeon(TM) CPU 3.20GHz stepping : 10 cpu MHz : 3192.160 cache size : 2048 KB fdiv_bug : no hlt_bug : no f00f_bug : no coma_bug : no fpu : yes fpu_exception : yes cpuid level : 5 wp : yes flags : fpu tsc msr pae mce cx8 apic mtrr mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc pni monitor ds_cpl cid cx16 xtpr lahf_lm bogomips : 7984.61 processor : 1 vendor_id : GenuineIntel cpu family : 15 model : 4 model name : Intel(R) Xeon(TM) CPU 3.20GHz stepping : 10 cpu MHz : 3192.160 cache size : 2048 KB fdiv_bug : no hlt_bug : no f00f_bug : no coma_bug : no fpu : yes fpu_exception : yes cpuid level : 5 wp : yes flags : fpu tsc msr pae mce cx8 apic mtrr mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc up pni monitor ds_cpl cid cx16 xtpr lahf_lm bogomips : 7984.61
xen_dom0_host:~# lspci -v
00:00.0 Host bridge: Intel Corporation E7320 Memory Controller Hub (rev 0c)
Subsystem: Intel Corporation E7320 Memory Controller Hub
Flags: bus master, fast devsel, latency 0
Capabilities: [40] Vendor Specific Information
00:02.0 PCI bridge: Intel Corporation E7525/E7520/E7320 PCI Express Port A (rev 0c) (prog-if 00 [Normal decode])
Flags: bus master, fast devsel, latency 0
Bus: primary=00, secondary=01, subordinate=01, sec-latency=0
Capabilities: [50] Power Management version 2
Capabilities: [58] Message Signalled Interrupts: Mask- 64bit- Queue=0/1 Enable-
Capabilities: [64] Express Root Port (Slot-) IRQ 0
00:03.0 PCI bridge: Intel Corporation E7525/E7520/E7320 PCI Express Port A1 (rev 0c) (prog-if 00 [Normal decode])
Flags: bus master, fast devsel, latency 0
Bus: primary=00, secondary=02, subordinate=02, sec-latency=0
Memory behind bridge: d8100000-d81fffff
Capabilities: [50] Power Management version 2
Capabilities: [58] Message Signalled Interrupts: Mask- 64bit- Queue=0/1 Enable-
Capabilities: [64] Express Root Port (Slot-) IRQ 0
00:1c.0 PCI bridge: Intel Corporation 6300ESB 64-bit PCI-X Bridge (rev 02) (prog-if 00 [Normal decode])
Flags: bus master, 66MHz, fast devsel, latency 48
Bus: primary=00, secondary=03, subordinate=03, sec-latency=48
I/O behind bridge: 00002000-00002fff
Memory behind bridge: d8200000-d82fffff
Prefetchable memory behind bridge: 00000000dc000000-00000000dfffffff
Capabilities: [50] PCI-X bridge device
00:1d.0 USB Controller: Intel Corporation 6300ESB USB Universal Host Controller (rev 02) (prog-if 00 [UHCI])
Subsystem: Hewlett-Packard Company Unknown device 25a1
Flags: bus master, medium devsel, latency 0, IRQ 16
I/O ports at 1400 [size=32]
00:1d.1 USB Controller: Intel Corporation 6300ESB USB Universal Host Controller (rev 02) (prog-if 00 [UHCI])
Subsystem: Hewlett-Packard Company Unknown device 25a1
Flags: bus master, medium devsel, latency 0, IRQ 17
I/O ports at 1420 [size=32]
00:1d.4 System peripheral: Intel Corporation 6300ESB Watchdog Timer (rev 02)
Subsystem: Hewlett-Packard Company Unknown device 0000
Flags: medium devsel
Memory at d8001000 (32-bit, non-prefetchable) [size=16]
00:1d.5 PIC: Intel Corporation 6300ESB I/O Advanced Programmable Interrupt Controller (rev 02) (prog-if 20 [IO(X)-APIC])
Subsystem: Intel Corporation Unknown device 25a1
Flags: bus master, fast devsel, latency 0
Capabilities: [50] PCI-X non-bridge device
00:1d.7 USB Controller: Intel Corporation 6300ESB USB2 Enhanced Host Controller (rev 02) (prog-if 20 [EHCI])
Subsystem: Hewlett-Packard Company Unknown device 24d0
Flags: bus master, medium devsel, latency 0, IRQ 18
Memory at d8001400 (32-bit, non-prefetchable) [size=1K]
Capabilities: [50] Power Management version 2
Capabilities: [58] Debug port
00:1e.0 PCI bridge: Intel Corporation 82801 PCI Bridge (rev 0a) (prog-if 00 [Normal decode])
Flags: bus master, fast devsel, latency 0
Bus: primary=00, secondary=04, subordinate=04, sec-latency=32
I/O behind bridge: 00003000-00003fff
Memory behind bridge: d8300000-d9ffffff
Prefetchable memory behind bridge: 50000000-500fffff
00:1f.0 ISA bridge: Intel Corporation 6300ESB LPC Interface Controller (rev 02)
Flags: bus master, medium devsel, latency 0
00:1f.1 IDE interface: Intel Corporation 6300ESB PATA Storage Controller (rev 02) (prog-if 8a [Master SecP PriP])
Subsystem: Hewlett-Packard Company Unknown device 25a1
Flags: bus master, medium devsel, latency 0, IRQ 19
I/O ports at <unassigned>
I/O ports at <unassigned>
I/O ports at <unassigned>
I/O ports at <unassigned>
I/O ports at 1440 [size=16]
Memory at 50100000 (32-bit, non-prefetchable) [size=1K]
00:1f.3 SMBus: Intel Corporation 6300ESB SMBus Controller (rev 02)
Subsystem: Hewlett-Packard Company Unknown device 25a1
Flags: medium devsel, IRQ 22
I/O ports at 1100 [size=32]
02:00.0 Ethernet controller: Broadcom Corporation NetXtreme BCM5721 Gigabit Ethernet PCI Express (rev 11)
Subsystem: Hewlett-Packard Company Unknown device 3260
Flags: bus master, fast devsel, latency 0, IRQ 16
Memory at d8100000 (64-bit, non-prefetchable) [size=64K]
Capabilities: [48] Power Management version 2
Capabilities: [50] Vital Product Data
Capabilities: [58] Message Signalled Interrupts: Mask- 64bit+ Queue=0/3 Enable-
Capabilities: [d0] Express Endpoint IRQ 0
03:01.0 RAID bus controller: Adaptec AAC-RAID (rev 01)
Subsystem: Hewlett-Packard Company AAR-2610SA
Flags: bus master, fast Back2Back, 66MHz, slow devsel, latency 32, IRQ 20
Memory at dc000000 (32-bit, prefetchable) [size=64M]
Capabilities: [80] Power Management version 2
03:04.0 SCSI storage controller: Marvell Technology Group Ltd. MV88SX6041 4-port SATA II PCI-X Controller (rev 09)
Subsystem: Hewlett-Packard Company Unknown device 103c
Flags: bus master, fast Back2Back, 66MHz, medium devsel, latency 32, IRQ 21
Memory at d8200000 (64-bit, non-prefetchable) [size=1M]
I/O ports at 2000 [size=256]
Capabilities: [40] Power Management version 2
Capabilities: [50] Message Signalled Interrupts: Mask- 64bit+ Queue=0/0 Enable-
Capabilities: [60] PCI-X non-bridge device
04:04.0 VGA compatible controller: ATI Technologies Inc Rage XL (rev 27) (prog-if 00 [VGA])
Subsystem: ATI Technologies Inc Rage XL
Flags: bus master, stepping, medium devsel, latency 66, IRQ 10
Memory at d9000000 (32-bit, non-prefetchable) [size=16M]
I/O ports at 3000 [size=256]
Memory at d8300000 (32-bit, non-prefetchable) [size=4K]
[virtual] Expansion ROM at 50000000 [disabled] [size=128K]
Capabilities: [5c] Power Management version 2Debconf configurations:
Read CAREFULLY the debconf saved configuration below. As the configuration was copied from a brazilian portuguese installation for a given hardware (an HP Proliant server), you could adapt or start from scratch yourself, ignoring the file completely.
Actually we recommend you start debconf configuration from scratch yourself, using the file as a GUIDE if things went wrong, for comparisons with another sucessfull but different hardware and language configuration.
You should save YOUR debconf selections file for backup purposes at YOUR hardware and skip to the package selection.
We installed at a HP server, using LVM.
Package selection:
Edit /etc/apt/sources.list to enable main, contrib and non-free sections of the repository as well as security repository.
You should use the Debian Reference Manual record/copy configuration topic .
# apt-get update # dselect update # dpkg --set-selections < xen_host_server_installed_packages.txt # apt-get -u dselect-upgrade
The bacula, postgresql, zabbix and bwm packages are not essential, but important for backup and monitoring.
The bind9 is needed by the domU guest running Oracle Enterprise Database if your server is using an intranet dns. The Oracle installer requires a standard dns easily reached, a condition not always met at intranets.
The selinux, python-semanage and python packages are related.
The kernel images may have been updated and you should edit for your machine architecture.
There are some obviously language dependant packages, like ibrazilian, aspell-pt-br, tz-brasil, wbrazilian, wportuguese.
You should analyze the package selection file BEFORE using it and edit it for your language, hardware and network.
acpid install adduser install apt install apt-file install apt-utils install aptitude install aspell install aspell-pt-br install aspell-pt-pt install at install bacula-common install bacula-console install bacula-director-common install bacula-director-sqlite3 install bacula-fd install bacula-sd install bacula-sd-pgsql install bacula-server install base-files install base-passwd install bash install bc install bind9-host install binutils install bridge-utils install bsdmainutils install bsdutils install busybox install bwm install console-common install console-data install console-tools install coreutils install cpio install cron install dc install debconf install debconf-i18n install debconf-utils install debian-archive-keyring install debianutils install debootstrap install dhcp3-client install dhcp3-common install dictionaries-common install diff install dmidecode install dnsutils install doc-debian install doc-linux-text install dpkg install dselect install e2fslibs install e2fsprogs install ed install eject install exim4 install exim4-base install exim4-config install exim4-daemon-light install file install findutils install finger install fping install ftp install gcc-4.1-base install gettext-base install gnupg install gpgv install grep install groff-base install grub install gzip install hostname install iamerican install ibrazilian install ibritish install ifupdown install info install initramfs-tools install initscripts install installation-report install iportuguese install iproute install iproute-doc install iptables install iputils-ping install ispell install klibc-utils install klogd install laptop-detect install less install libacl1 install libapt-pkg-perl install libaspell15 install libatm1 install libattr1 install libbeecrypt6 install libbind9-0 install libblkid1 install libbz2-1.0 install libc6 install libc6-i686 deinstall libc6-xen install libcap1 install libcomerr2 install libconfig-file-perl install libconsole install libdb4.2 install libdb4.3 install libdb4.4 install libdevmapper1.02 install libdns22 install libedit2 install libevent1 install libgc1c2 install libgcc1 install libgcrypt11 install libgdbm3 install libgnutls13 install libgpg-error0 install libgpmg1 install libgssapi2 install libidn11 install libisc11 install libisccc0 install libisccfg1 install libklibc install libkrb53 install libldap2 install liblocale-gettext-perl install liblockfile1 install liblwres9 install liblzo1 install libmagic1 install libncurses5 install libncursesw5 install libneon25 install libnewt0.52 install libnfsidmap2 install libopencdk8 install libpam-modules install libpam-runtime install libpam0g install libpci2 install libpcre3 install libpopt0 install libpq4 install libreadline5 install librpcsecgss3 install librpm4 install libsasl2 install libsasl2-2 install libselinux1 install libsemanage1 install libsepol1 install libsigc++-2.0-0c2a install libslang2 install libsqlite3-0 install libss2 install libssl0.9.8 install libstdc++6 install libtasn1-3 install libtasn1-3-bin install libtext-charwidth-perl install libtext-iconv-perl install libtext-template-perl install libtext-wrapi18n-perl install libusb-0.1-4 install libuuid1 install libvolume-id0 install libwrap0 install libxml2 install linux-image-2.6-686 install linux-image-2.6.18-4-686 install linux-image-2.6.18-4-xen-686 install linux-image-2.6.18-4-xen-vserver-686 install linux-image-2.6.18-5-686 install linux-modules-2.6.18-4-xen-686 install linux-modules-2.6.18-4-xen-vserver-686 install locales install login install logrotate install lsb-base install lsof install lvm-common install lvm2 install m4 install mailx install makedev install man-db install manpages install manpages-pt install mawk install mime-support install mktemp install module-init-tools install mount install mpack install mtools install mtr-tiny install mtx install mutt install myspell-pt-br install myspell-pt-pt install nano install ncurses-base install ncurses-bin install ncurses-term install net-tools install netbase install netcat install nfs-common install openbsd-inetd install openssh-client install openssh-server install openssl install passwd install patch install pciutils install perl install perl-base install perl-doc install perl-modules install pidentd install policycoreutils install popularity-contest install portmap install postgresql-8.1 install postgresql-client-8.1 install postgresql-client-common install postgresql-common install procmail install procps install python install python-central install python-minimal install python-newt install python-selinux install python-semanage install python-support install python2.4 install python2.4-minimal install readline-common install reiserfsprogs install reportbug install rpm install rpmstrap install sed install selinux-policy-refpolicy-targeted install sgml-base install sharutils install sqlite3 install ssl-cert install strace install sysklogd install sysv-rc install sysvinit install sysvinit-utils install tar install tasksel install tasksel-data install tcpd install tcsh install telnet install texinfo install time install traceroute install tz-brasil install tzdata install ucf install udev install update-inetd install usbutils install util-linux install util-linux-locales install vim-common install vim-tiny install w3m install wamerican install wbrazilian install wget install whiptail install whois install wportuguese install xen-hypervisor-3.0.3-1-i386-pae install xen-linux-system-2.6.18-4-xen-686 install xen-linux-system-2.6.18-4-xen-vserver-686 install xen-tools install xen-utils-3.0.3-1 install xen-utils-common install xfsprogs install xml-core install zabbix-agent install zlib1g install
The Debian GNU / Linux 4.0 Etch Oracle server guest, domU, Xen instance:
You should also perform a basic minimal install.
We used xen-tools, boot-strapping Debian 4.0 Etch inside the virtual machine.
xen_host_server:~# vgcreate -s 4M oracle_host_group /dev/sda5 xen_host_server:~# nano /etc/xen/xend-config.sxp enable network bridge as described at the file. xen_host_server:~# invoke-rc.d xend restart
We defined the Virtual Machine memory size considering the other Virtual Machines that must run at the Xen host and crossing with the minimal requirements of the Oracle Database. Use all RAM you could assign to it.
The xen_host_server was left with 280 MB RAM for some headroom for juggling with memory among VMs and this proved to be enough. At this setup with PostgreSQL, Bacula, Zabbix, it uses 256 MB RAM, being 147 MB for buffers. 128 MB could do the job.
xen_host_server:~# xen-create-image --hostname=XenOracleServer --ip=10.200.240.41 --netmask=255.255.252.0 --gateway=10.200.240.1 --passwd --kernel=/boot/vmlinuz-2.6.18-4-xen-686 --initrd=/boot/initrd.img-2.6.18-4-xen-686 --debootstrap --dist=etch --cache --mirror=http://ftp.us.debian.org/debian/ --lvm=oracle_host_group --memory=407MB --swap=1GB --size=8,31GB --force xen_host_server:~# xm create --console_autoconnect /etc/xen/XenOracleServer.cfg
This will show you the console of the Virtual Machine at your screen.
Then, edit /etc/apt/sources.list to enable main, contrib and non-free sections of the repository as well as security repository and install openssh-client and openssh-server to avoid direct connection to console next time.
The installed packages:
The dnsmasq is a simpler solution to the requirement of a DNS server by the Oracle Installer.
You could include language related packages.
adduser install alien install apt install apt-utils install aptitude install auto-apt install base-files install base-passwd install bash install bind9-host install binutils install bsdmainutils install bsdutils install bzip2 install coreutils install cpio install cpp install cpp-4.1 install cron install dbus install dclock install dctrl-tools install debconf install debconf-i18n install debconf-utils install debhelper install debian-archive-keyring install debianutils install defoma install devscripts install dh-make install dhcp3-client install dhcp3-common install diff install diffstat install dmidecode install dnsmasq install dnsutils install dpkg install dpkg-dev install dselect install e2fslibs install e2fsprogs install ed install fakeroot install file install findutils install fontconfig-config install gawk install gcc install gcc-4.1 install gcc-4.1-base install gettext install gettext-base install gnupg install gpgv install grep install grep-dctrl install groff-base install gsfonts install gsfonts-x11 install gzip install hostname install html2text install ifupdown install info install initscripts install intltool-debian install iptables install iputils-ping install jablicator install java-common install klogd install ksh install laptop-detect install lesstif2 install lesstif2-dev install libacl1 install libaio1 install libasound2 install libattr1 install libbeecrypt6 install libbind9-0 install libblkid1 install libbz2-1.0 install libc6 install libc6-dev install libc6-xen install libcap1 install libclass-accessor-perl install libcomerr2 install libconsole install libdb3 install libdb4.2 install libdb4.3 install libdb4.4 install libdbus-1-3 install libdevmapper1.02 install libdns22 install libdrm2 install libedit2 install libexpat1 install libfontconfig1 install libfontenc1 install libfreetype6 install libfs6 install libft-perl install libgcc1 install libgcrypt11 install libgdbm3 install libgl1-mesa-glx install libgnutls13 install libgpg-error0 install libice6 install libio-string-perl install libisc11 install libisccc0 install libisccfg1 install libkrb53 install libldap2 install liblocale-gettext-perl install libltdl3 install liblwres9 install liblzo1 install libmagic1 install libmudflap0 install libmudflap0-dev install libncurses5 install libncursesw5 install libneon25 install libnewt0.52 install libopencdk8 install libpam-modules install libpam-runtime install libpam0g install libparse-debianchangelog-perl install libpci2 install libpng12-0 install libpopt0 install libreadline5 install librpm4 install libsasl2 install libsasl2-2 install libselinux1 install libsepol1 install libsigc++-2.0-0c2a install libslang2 install libsm6 install libsqlite3-0 install libss2 install libssl0.9.8 install libssp0 install libstdc++6 install libtasn1-3 install libtext-charwidth-perl install libtext-iconv-perl install libtext-wrapi18n-perl install libtimedate-perl install libttf2 install libusb-0.1-4 install libuuid1 install libwrap0 install libx11-6 install libx11-data install libxau6 install libxaw7 install libxcursor1 install libxdmcp6 install libxext6 install libxfixes3 install libxfont1 install libxft2 install libxi6 install libxkbfile1 install libxml2 install libxmu6 install libxmuu1 install libxp6 install libxpm4 install libxrandr2 install libxrender1 install libxss1 install libxt6 install libxtrap6 install libxtst6 install libxv1 install libxxf86dga1 install libxxf86vm1 install lintian install linux-kernel-headers install locales install login install logrotate install lsb-base install lsb-rpm install make install makedev install man-db install manpages install mawk install mktemp install module-init-tools install mount install nano install ncurses-base install ncurses-bin install net-tools install netbase install netcat install odbcinst1debian1 install openbsd-inetd install openssh-client install openssh-server install passwd install patch install pciutils install perl install perl-base install perl-doc install perl-modules install po-debconf install procps install readline-common install resolvconf install rpm install sed install sgml-base install ssh install sun-java5-bin install sun-java5-demo install sun-java5-jdk install sun-java5-jre install sysklogd install sysv-rc install sysvinit install sysvinit-utils install tar install tasksel install tasksel-data install tcpd install traceroute install tzdata install ucf install unixodbc install unzip install update-inetd install util-linux install util-linux-locales install vim-common install vim-tiny install wget install whiptail install x11-common install xbase-clients install xfonts-encodings install xfonts-utils install xml-core install xutils install xutils-dev install zip install zlib1g install
The Oracle Database pre-installation tasks:
First, as already said, you MUST read the Oracle Installation Manual.
You can not use simple "cake recipes" for Oracle Installation.
You will have to read the manual and follow it.
We will cover more the obscure hints here and the differences for the Debian Etch installation.
The previously documented tasks are listed at the manual and some sites.
You should read them all, by order of relevance and correctness:
- Debian vs Oracle même pas peur.
- Instalação do Oracle Database 10g R2 no Debian Etch 4.
- Debian GNU / Linux survival guide: Oracle 10g Release 2.
But not actually perform these instructions yet.
First, you must make your Debian Etch "transmorph" to a Red Hat and THEN follow the Oracle Installation Manual.
But did not these sites actually install Oracle at Debian?
Oracle Installer and Oracle Database are like aliens to Linux concepts and culture.
Unfortunately, the Oracle Installer "seems" to install and the Database engine "seems" to work at first look.
You have to put a reasonable workload to spot the problems.
This proved to be the tricky and longer part:
To have an ACTUALLY working installation and running engine.
We have been running the engine at the customer since october 4th 2007 and observed very carefully.
The basic concept is to fool Oracle Installer and the Database Engine in order to it "thinks" is running at a Red Hat Enterprise Linux server, **but not ignoring its prerequisites verifications.**
DNS workaround:
Let's start with name resolution problems ( chapter 2.4 at the intallation manual).
We had to configure the xen domU to work at our intranet using some kind of DNS solution.
For some reason, Oracle Installer requires complete standard access to DNS, not always true for a lab server at an intranet.
It does not honor the /etc/hosts file.
So, we installed dnsmasq as a simple lightweight DNS server to feed the /etc/hostname through a standard DNS query.
The /etc/host.conf file:
#AFM 26set2007 oracle needs nslookup returning right values #first query /etc/hosts file, then dns servers order hosts, bind
The modifications at /etc/dnsmasq.conf:
# If you don't want dnsmasq to read /etc/resolv.conf or any other # file, getting its servers from this file instead (see below), then # uncomment this #AFM 26set2007 modifications for dnsmasq at same machine for oracle no-resolv # Add other name servers here, with domain specs if they are for # non-public domains. #AFM 26set2007 modifications for dnsmasq at same machine for oracle server=10.200.113.12
Red Hat release
We used the /etc/redhat-release file:
Red Hat Linux release 4.1
PCI
The Oracle Installer and the Database Engine collect hardware info.
Running at a Xen domU guest, it will be tricky.
At least, make a symbolic link from /bin/lspci to /sbin/lspci.
As a Xen domU, the output will be blank, but the command will not fail.
XenOracleServer:~# ln -s /bin/lspci /sbin/lspci
The other symbolic links.
Create the symbolic links cited at the french Linux Identitity article.
#ln -s /usr/bin/awk /bin/awk #ln -s /usr/bin/rpm /bin/rpm #ln -s /usr/bin/basename /bin/basename #ln -s /etc /etc/rc.d #ln -s /lib/libgcc_s.so.1 /lib/libgcc_s.so
The RPM
Debian uses dpkg for its package management. But it CAN use rpm to install rpm packages. Avoid this at all costs, if you could.
The strong dependency check of dpkg is not present with rpm and you could break your system with a bad rpm package. Alien is a Debian tool to try convert different package formats, but good dependencies lists are up to the original developer. You could use alien to convert a rpm package to a deb package and then use dpkg to install it.
We created the rpm base directories almost as described at the french article:
#mkdir /var/lib/rpm #touch /var/lib/rpm/Basenames #rpm --initdb #rpm --rebuilddb
AFTER the Oracle installation, you should get something similar to this:
oracle@XenOracleServer:~$ ls -la /var/lib/rpm total 404 drwxr-xr-x 2 root root 4096 2007-09-24 12:07 . drwxr-xr-x 21 root root 4096 2007-10-15 15:58 .. -rwxr-xr-x 1 root root 0 2007-09-21 14:43 Basenames -rwxr-xr-x 1 oracle oinstall 24576 2007-09-24 12:07 __db.001 -rwxr-xr-x 1 oracle oinstall 1318912 2007-09-24 12:07 __db.002 -rwxr-xr-x 1 oracle oinstall 450560 2007-09-24 12:07 __db.003 -rwxr-xr-x 1 oracle oinstall 12288 2007-09-24 12:07 Name -rwxr-xr-x 1 root root 12288 2007-09-21 14:38 Packages
Create the needed users and groups
Follow the suitable chapter 2.5 at the Oracle Installation Manual to create the needed users and groups and their modifications. Some users must be at more than one group.
Do not forget to verify the special user "nobody".
A special advice.
The "oracle home" is NOT the home of the oracle Linux user.
The names are confusing, but you must not be mislead by these.
The "oracle home" is the home of the database products, not of the user nor of the engine.
Carefully read the chapter 2.7 of the Oracle 10g R2 Installation Manual.
Pay special attention to directories and files ownership and permissions.
A single mistake and you may have to restart from a previously saved LVM image as the Oracle Installer mess things so badly and blindly that is easier to restart from scratch.
After creating the directories and groups following the Oracle Installation Manual, we modified some user and system files, as some variables were not properly set for some given Oracle daemons . It is an EXCLUSIVE Oracle server virtual machine.
oracle@XenOracleServer:~$ cat /home/oracle/.bash_profile
# ~/.bash_profile: executed by bash(1) for login shells.
# see /usr/share/doc/bash/examples/startup-files for examples.
# the files are located in the bash-doc package.
# the default umask is set in /etc/login.defs
#AFM 08Ago2007 uncommented for Oracle
umask 022
# include .bashrc if it exists
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# set PATH so it includes user's private bin if it exists
if [ -d ~/bin ] ; then
PATH=~/bin:"${PATH}"
fioracle@XenOracleServer:~$ cat /home/oracle/.bashrc
# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples
# If not running interactively, don't do anything
[ -z "$PS1" ] && return
# don't put duplicate lines in the history. See bash(1) for more options
export HISTCONTROL=ignoredups
# check the window size after each command and, if necessary,
# update the values of LINES and COLUMNS.
shopt -s checkwinsize
# make less more friendly for non-text input files, see lesspipe(1)
[ -x /usr/bin/lesspipe ] && eval "$(lesspipe)"
# set variable identifying the chroot you work in (used in the prompt below)
if [ -z "$debian_chroot" ] && [ -r /etc/debian_chroot ]; then
debian_chroot=$(cat /etc/debian_chroot)
fi
# set a fancy prompt (non-color, unless we know we "want" color)
case "$TERM" in
xterm-color)
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
;;
*)
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
;;
esac
# Comment in the above and uncomment this below for a color prompt
#PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD/$HOME/~}\007"'
;;
*)
;;
esac
# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.
#if [ -f ~/.bash_aliases ]; then
# . ~/.bash_aliases
#fi
# enable color support of ls and also add handy aliases
if [ "$TERM" != "dumb" ]; then
eval "`dircolors -b`"
alias ls='ls --color=auto'
#alias dir='ls --color=auto --format=vertical'
#alias vdir='ls --color=auto --format=long'
fi
# some more ls aliases
#alias ll='ls -l'
#alias la='ls -A'
#alias l='ls -CF'
# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
#AFM 08out2007 oracle modifications
ORACLE_BASE=/u01/app/oracle
ORACLE_HOME=$ORACLE_BASE/product/10.2.0
ORACLE_SID=customerbase
TNS_ADMIN=$ORACLE_HOME/network/admin
PATH=$HOME/bin:$ORACLE_HOME/bin:$PATH
export ORACLE_BASE
export ORACLE_HOME
export ORACLE_SID
export TNS_ADMIN
export PATH
unset USERNAMEoracle@XenOracleServer:~$ cat /etc/profile
# /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
# and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).
if [ "`id -u`" -eq 0 ]; then
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
else
PATH="/usr/local/bin:/usr/bin:/bin:/usr/games"
fi
if [ "$PS1" ]; then
if [ "$BASH" ]; then
PS1='\u@\h:\w\$ '
else
if [ "`id -u`" -eq 0 ]; then
PS1='# '
else
PS1='$ '
fi
fi
fi
export PATH
umask 022
#AFM 08Ago2007 changes for Oracle
if [ $USER = "oracle" ]; then
if [ $SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
fi
#AFM 08out2007 oracle modifications
ORACLE_BASE=/u01/app/oracle
ORACLE_HOME=$ORACLE_BASE/product/10.2.0
ORACLE_SID=customerbase
TNS_ADMIN=$ORACLE_HOME/network/admin
PATH=$HOME/bin:$ORACLE_HOME/bin:$PATH
export ORACLE_BASE
export ORACLE_HOME
export ORACLE_SID
export TNS_ADMIN
export PATH
unset USERNAMEConfiguring kernel parameters
You must follow the Oracle Installation Manual chapter 2.6 to edit the /etc/sysctl.conf file contents.
The parameters will be read next boot and persist between reboots.
If you want them read without rebooting, you could issue command:
#sysctl -p /etc/sysctl.conf
oracle@XenOracleServer:~$ cat /etc/sysctl.conf
#
# /etc/sysctl.conf - Configuration file for setting system variables
# See sysctl.conf (5) for information.
#
#kernel.domainname = example.com
#net/ipv4/icmp_echo_ignore_broadcasts=1
# Uncomment the following to stop low-level messages on console
#kernel.printk = 4 4 1 7
##############################################################3
# Functions previously found in netbase
#
# Uncomment the next line to enable Spoof protection (reverse-path filter)
#net.ipv4.conf.default.rp_filter=1
# Uncomment the next line to enable TCP/IP SYN cookies
#net.ipv4.tcp_syncookies=1
# Uncomment the next line to enable packet forwarding for IPv4
#net.ipv4.conf.default.forwarding=1
# Uncomment the next line to enable packet forwarding for IPv6
#net.ipv6.conf.default.forwarding=1
#AFM 18Sep2007 changes for oracle
kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
net.core.rmem_default = 1048576
net.core.rmem_max = 1048576
net.core.wmem_default = 262144
net.core.wmem_max = 262144
You should edit 2 files instead of the one documented for limits.
Edit /etc/pam.d/su :
oracle@XenOracleServer:~$ cat /etc/pam.d/su
#
# The PAM configuration file for the Shadow `su' service
#
# This allows root to su without passwords (normal operation)
auth sufficient pam_rootok.so
# Uncomment this to force users to be a member of group root
# before they can use `su'. You can also add "group=foo"
# to the end of this line if you want to use a group other
# than the default "root" (but this may have side effect of
# denying "root" user, unless she's a member of "foo" or explicitly
# permitted earlier by e.g. "sufficient pam_rootok.so").
# (Replaces the `SU_WHEEL_ONLY' option from login.defs)
# auth required pam_wheel.so
# Uncomment this if you want wheel members to be able to
# su without a password.
# auth sufficient pam_wheel.so trust
# Uncomment this if you want members of a specific group to not
# be allowed to use su at all.
# auth required pam_wheel.so deny group=nosu
# Uncomment and edit /etc/security/time.conf if you need to set
# time restrainst on su usage.
# (Replaces the `PORTTIME_CHECKS_ENAB' option from login.defs
# as well as /etc/porttime)
# account requisite pam_time.so
# This module parses environment configuration file(s)
# and also allows you to use an extended config
# file /etc/security/pam_env.conf.
#
# parsing /etc/environment needs "readenv=1"
session required pam_env.so readenv=1
# locale variables are also kept into /etc/default/locale in etch
# reading this file *in addition to /etc/environment* does not hurt
session required pam_env.so readenv=1 envfile=/etc/default/locale
# Defines the MAIL environment variable
# However, userdel also needs MAIL_DIR and MAIL_FILE variables
# in /etc/login.defs to make sure that removing a user
# also removes the user's mail spool file.
# See comments in /etc/login.defs
#
# "nopen" stands to avoid reporting new mail when su'ing to another user
session optional pam_mail.so nopen
# Sets up user limits, please uncomment and read /etc/security/limits.conf
# to enable this functionality.
# (Replaces the use of /etc/limits in old login)
#AFM 08Ago2007 uncommented for Oracle
session required pam_limits.so
# The standard Unix authentication modules, used with
# NIS (man nsswitch) as well as normal /etc /passwd and
# /etc/ shadow entries.
@include common-auth
@include common-account
@include common-session
Also edit /etc/pam.d/login :
oracle@XenOracleServer:~$ cat /etc/pam.d/login
#
# The PAM configuration file for the Shadow `login' service
#
# Outputs an issue file prior to each login prompt (Replaces the
# ISSUE_FILE option from login.defs). Uncomment for use
# auth required pam_issue.so issue=/etc/issue
# Disallows root logins except on tty's listed in /etc/securetty
# (Replaces the `CONSOLE' setting from login.defs)
auth requisite pam_securetty.so
# Disallows other than root logins when /etc/nologin exists
# (Replaces the `NOLOGINS_FILE' option from login.defs)
auth requisite pam_nologin.so
# This module parses environment configuration file(s)
# and also allows you to use an extended config
# file /etc/security/pam_env.conf.
#
# parsing /etc/environment needs "readenv=1"
session required pam_env.so readenv=1
# locale variables are also kept into /etc/default/locale in etch
# reading this file *in addition to /etc/environment* does not hurt
session required pam_env.so readenv=1 envfile=/etc/default/locale
# Standard Un*x authentication.
@include common-auth
# This allows certain extra groups to be granted to a user
# based on things like time of day, tty, service, and user.
# Please edit /etc/security/group.conf to fit your needs
# (Replaces the `CONSOLE_GROUPS' option in login.defs)
auth optional pam_group.so
# Uncomment and edit /etc/security/time.conf if you need to set
# time restrainst on logins.
# (Replaces the `PORTTIME_CHECKS_ENAB' option from login.defs
# as well as /etc/porttime)
# account requisite pam_time.so
# Uncomment and edit /etc/security/access.conf if you need to
# set access limits.
# (Replaces /etc/login.access file)
# account required pam_access.so
# Sets up user limits according to /etc/security/limits.conf
# (Replaces the use of /etc/limits in old login)
#AFM 18Sep2007 oracle changes
session required /lib/security/pam_limits.so
session required pam_limits.so
# Prints the last login info upon succesful login
# (Replaces the `LASTLOG_ENAB' option from login.defs)
session optional pam_lastlog.so
# Prints the motd upon succesful login
# (Replaces the `MOTD_FILE' option in login.defs)
session optional pam_motd.so
# Prints the status of the user's mailbox upon succesful login
# (Replaces the `MAIL_CHECK_ENAB' option from login.defs).
#
# This also defines the MAIL environment variable
# However, userdel also needs MAIL_DIR and MAIL_FILE variables
# in /etc/login.defs to make sure that removing a user
# also removes the user's mail spool file.
# See comments in /etc/login.defs
session optional pam_mail.so standard
# SELinux needs to intervene at login time to ensure that the process
# starts in the proper default security context.
# Uncomment the following line to enable SELinux
# session required pam_selinux.so multiple
# Standard Un*x account and session
@include common-account
@include common-session
@include common-password
oracle@XenOracleServer:~$
Also, you should edit /etc/security/limits.conf as documented in the manual.
oracle@XenOracleServer:~$ cat /etc/security/limits.conf
# /etc/security/limits.conf
#
#Each line describes a limit for a user in the form:
#
#<domain> <type> <item> <value>
#
#Where:
#<domain> can be:
# - an user name
# - a group name, with @group syntax
# - the wildcard *, for default entry
# - the wildcard %, can be also used with %group syntax,
# for maxlogin limit
#
#<type> can have the two values:
# - "soft" for enforcing the soft limits
# - "hard" for enforcing hard limits
#
#<item> can be one of the following:
# - core - limits the core file size (KB)
# - data - max data size (KB)
# - fsize - maximum filesize (KB)
# - memlock - max locked-in-memory address space (KB)
# - nofile - max number of open files
# - rss - max resident set size (KB)
# - stack - max stack size (KB)
# - cpu - max CPU time (MIN)
# - nproc - max number of processes
# - as - address space limit
# - maxlogins - max number of logins for this user
# - maxsyslogins - max number of logins on the system
# - priority - the priority to run user process with
# - locks - max number of file locks the user can hold
# - sigpending - max number of pending signals
# - msgqueue - max memory used by POSIX message queues (bytes)
# - nice - max nice priority allowed to raise to
# - rtprio - max realtime priority
#
#<domain> <type> <item> <value>
#
#* soft core 0
#* hard rss 10000
#@student hard nproc 20
#@faculty soft nproc 20
#@faculty hard nproc 50
#ftp hard nproc 0
#@student - maxlogins 4
#AFM 08Ago2007 changes for Oracle
* soft nproc 2047
* hard nproc 16384
* soft nofile 1024
* hard nofile 65536
# End of fileBEFORE the installation: Configuring the oracle User's Environment and X fowarding
We do not use xhost, and use ssh X11 fowarding instead.
So, you must check your VM sshd configuration.
oracle@XenOracleServer:~$ cat /etc/ssh/sshd_config
# Package generated configuration file
# See the sshd(8) manpage for details
# What ports, IPs and protocols we listen for
Port 22
# Use these options to restrict which interfaces/protocols sshd will bind to
#ListenAddress ::
#ListenAddress 0.0.0.0
Protocol 2
# HostKeys for protocol version 2
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
#Privilege Separation is turned on for security
UsePrivilegeSeparation yes
# Lifetime and size of ephemeral version 1 server key
KeyRegenerationInterval 3600
ServerKeyBits 768
# Logging
SyslogFacility AUTH
LogLevel INFO
# Authentication:
LoginGraceTime 120
PermitRootLogin yes
StrictModes yes
RSAAuthentication yes
PubkeyAuthentication yes
#AuthorizedKeysFile %h/.ssh/authorized_keys
# Don't read the user's ~/.rhosts and ~/.shosts files
IgnoreRhosts yes
# For this to work you will also need host keys in /etc/ssh_known_hosts
RhostsRSAAuthentication no
# similar for protocol version 2
HostbasedAuthentication no
# Uncomment if you don't trust ~/.ssh/known_hosts for RhostsRSAAuthentication
#IgnoreUserKnownHosts yes
# To enable empty passwords, change to yes (NOT RECOMMENDED)
PermitEmptyPasswords no
# Change to yes to enable challenge-response passwords (beware issues with
# some PAM modules and threads)
ChallengeResponseAuthentication no
# Change to no to disable tunnelled clear text passwords
#PasswordAuthentication yes
# Kerberos options
#KerberosAuthentication no
#KerberosGetAFSToken no
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes
# GSSAPI options
#GSSAPIAuthentication no
#GSSAPICleanupCredentials yes
X11Forwarding yes
X11DisplayOffset 10
PrintMotd no
PrintLastLog yes
TCPKeepAlive yes
#UseLogin no
#MaxStartups 10:30:60
#Banner /etc/issue.net
# Allow client to pass locale environment variables
AcceptEnv LANG LC_*
Subsystem sftp /usr/lib/openssh/sftp-server
UsePAM yes
Restart sshd daemon.
#invoke-rc.d sshd restart
Now you can open a "ssh -X" connection to your virtual machine.
It is tricky, but you have to perform some oracle user's environment tweaks just before the installer execution to set some variables and UNSET others for the installer, remarkably ORACLE_HOME and TNS_ADMIN.
You must follow the "Configuring the oracle User's Environment" , chapter 2.14, with some differences for us.
Do not disconnect or close the shell session before starting the Oracle Installer or you will have to reconfigure the environment variables valid for the shell session.
Start the Oracle Installer:
To start the installer, do not ignore prerequisites as said elsewhere. If you forgot something obvious, the Oracle Installer will alert you at start.
The installer will guide you.
At some point you will have to pause and open a new simultaneus shell connection, login as root and run 2 shell scripts indicated.
The output of the scripts should be similar to something below:
XenOracleServer:~# cd /u01/app/oracle/oraInventory/
XenOracleServer:/u01/app/oracle/oraInventory# sh /u01/app/oracle/oraInventory/orainstRoot.sh
Alterando permissões de/u01/app/oracle/oraInventory para 770.
Alterando o nome do grupo de /u01/app/oracle/oraInventory para oinstall.
A execução do script foi concluída
XenOracleServer:/u01/app/oracle/oraInventory#
XenOracleServer:/u01/app/oracle/oraInventory# cd /u01/app/oracle/product/10.2.0/XenOracleServer:/u01/app/oracle/product/10.2.0# sh /u01/app/oracle/product/10.2.0/root.sh
Running Oracle10 root.sh script...
The following environment variables are set as:
ORACLE_OWNER= oracle
ORACLE_HOME= /u01/app/oracle/product/10.2.0
Enter the full pathname of the local bin directory: [/usr/local/bin]:
Copying dbhome to /usr/local/bin ...
Copying oraenv to /usr/local/bin ...
Copying coraenv to /usr/local/bin ...
Creating /etc/oratab file...
Entries will be added to the /etc/oratab file as needed by
Database Configuration Assistant when a database is created
Finished running generic part of root.sh script.
Now product-specific root actions will be performed.
XenOracleServer:/u01/app/oracle/product/10.2.0#Automatic engine startup:
At this point, you should have the database engine running.
Access http://XenOracleServer:1158/em
But it will not automatically shutdown cleanly nor start automatically at next boot.
You could use the french article as guidance to create your startup / shutdown scripts.
You could use the http://albatordeb.blogspot.com/2007/04/oracle.html as another example.
You could use the http://www.vivaolinux.com.br/artigos/verArtigo.php?codigo=4468&pagina=1 as another good guidance.
In a future article we will present our solution.
Comentários
Usuários registrados têm permissão para criar comentários.
Translate this page.
Stumble It!
Save to del.icio.us
Add to Free Sw Daily
Add to Technorati Favorites