Oracle Database 11g XE in the Cloud

Oracle Database 11g XE has been in beta for several months now. On September 2, the production release was made available for Windows 32-bit and Linux 64-bit platforms. This lightweight version of the juggernaut database of world is geared towards students, developer and ISVs. You can find the full feature list here.

Having played around with the beta version I decided it was time to take a stab at deploying it in the cloud - more specifically Amazon AWS EC2. 
I started off by selecting the Oracle Linux 5.6 x86_64 - OVM (ami-42778a2b) to launch a micro-instance of Oracle Linux. The micro-instance has 613MB of physical memory, 2GB swap and 15GB EBS storage. 

[root@ip-10-242-49-142 ~]# cat /proc/meminfo | grep SwapTotal

SwapTotal: 2104504 kB

[root@ip-10-242-49-142 ~]# cat /proc/meminfo | grep MemTotal
MemTotal: 629760 kB

Once you download the installation archive from OTN and save it to your computer, you'll have to transfer it to your EC2 instance.

You will have to unzip the rpm package from the archive and then install the package.
Note: If you are familiar with the full database installation process and try to create your ORACLE_BASE before hand, the installer will complain.

root@ip-10-242-49-142 Disk1]# rpm -ivh oracle-xe-11.2.0-1.0.x86_64.rpm

Preparing... ########################################### [100%]

The install cannot proceed because ORACLE_BASE directory (/u01/app/oracle)

is not owned by "oracle" user. You must change the ownership of ORACLE_BASE
directory to "oracle" user and retry the installation.
error: %pre(oracle-xe-11.2.0-1.0.x86_64) scriptlet failed, exit status 1
error: install: %pre scriptlet failed (2), skipping oracle-xe-11.2.0-1.0

Follow the installation instructions to install the rpm as root:

[root@ip-10-242-49-142 Disk1]# rpm -ivh oracle-xe-11.2.0-1.0.x86_64.rpm

Preparing... ########################################### [100%]

1:oracle-xe ########################################### [100%]

Executing post-install steps...

You must run '/etc/init.d/oracle-xe configure' as the root user to configure the database.


Next run the configure script to set your listener and APEX ports and passwords for the SYS/SYSTEM users:
Note: Before you create your instance, make sure you apply the correct security groups to allow access to your database listener and APEX ports. Otherwise you will have to modify the default security group to allow access.

[root@ip-10-242-49-142 Disk1]# /etc/init.d/oracle-xe configure
Oracle Database 11g Express Edition Configuration
-------------------------------------------------
This will configure on-boot properties of Oracle Database 11g Express
Edition.  The following questions will determine whether the database should
be starting upon system boot, the ports it will use, and the passwords that
will be used for database accounts.  Press to accept the defaults.
Ctrl-C will abort.
Specify the HTTP port that will be used for Oracle Application Express [8080]:8181
Specify a port that will be used for the database listener [1521]:1523
Specify a password to be used for database accounts.  Note that the same
password will be used for SYS and SYSTEM.  Oracle recommends the use of
different passwords for each database account.  This can be done after
initial configuration:
Confirm the password:
Do you want Oracle Database 11g Express Edition to be started on boot (y/n) [y]:
Starting Oracle Net Listener...Done
Configuring database...Done
Starting Oracle Database 11g Express Edition instance...Done
Installation completed successfully.
[root@ip-10-242-49-142 Disk1]# 
In order to connect to your database instance remotely via SQL Developer or APEX you first need to disable the iptables firewall or setup rules to enable access to the ports. I disabled the firewall in my instance since security groups are already setup to allow access to only the these ports.

[root@ip-10-242-49-142 ~]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
RH-Firewall-1-INPUT all -- anywhere anywhere

Chain FORWARD (policy ACCEPT)
target prot opt source destination
RH-Firewall-1-INPUT all -- anywhere anywhere

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

Chain RH-Firewall-1-INPUT (2 references)
target prot opt source destination
ACCEPT all -- anywhere anywhere
ACCEPT icmp -- anywhere anywhere icmp any
ACCEPT esp -- anywhere anywhere
ACCEPT ah -- anywhere anywhere
ACCEPT udp -- anywhere 224.0.0.251 udp dpt:mdns
ACCEPT udp -- anywhere anywhere udp dpt:ipp
ACCEPT tcp -- anywhere anywhere tcp dpt:ipp
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited


You can stop iptables using:
[root@ip-10-242-49-142 ~]# service iptables stop
Flushing firewall rules: [ OK ]
Setting chains to policy ACCEPT: filter [ OK ]
Unloading iptables modules: [ OK ]
[root@ip-10-242-49-142 ~]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination

Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

   
To prevent the service from running on startup use chkconfig to disable iptables:

[root@ip-10-242-49-142 ~]# chkconfig iptables --list
iptables 0:off 1:off 2:on 3:on 4:on 5:on 6:off
[root@ip-10-242-49-142 ~]# chkconfig iptables off levels 2,3,4,5
[root@ip-10-242-49-142 ~]# chkconfig iptables --list
iptables 0:off 1:off 2:off 3:off 4:off 5:off 6:off


You should now be able to connect to the database using and Oracle client such as SQL Developer or SQL*Plus.



By default, remote HTTP access to the Database Start Page is disabled. In order to access disable it you need to execute the following procedure:


SQL> conn system/oracle11xe
Connected.
SQL> exec dbms_xdb.setlistenerlocalaccess(false);


PL/SQL procedure successfully completed.
Note: This enabled all information included usernames and passwords transmitted via HTTP to be sent unencrypted.

You should now be able to access your 11gXE start page using your public endpoint for your EC2 instance.


Deploying databases in the cloud has gotten a lot simpler thanks to Oracle Database11gXE. If you are a developer looking to build an application on top of Oracle database then this would be a big plus for  you. Given that this would cost less than an RDS instance of Oracle database and if you can live with the storage and CPU limitations and limited features then give it a go.


Comments

  1. What a brilliantly written blog post on this subject. It was incredibly easy for me to follow. Thank you for sharing this.

    Joel

    ReplyDelete
  2. Hi a great piece of work! I was searching this for many day and once i found this article it was all easy. Big thanks for writing this article.

    ReplyDelete

Post a Comment

Popular posts from this blog

Setup a Wordpress site in 10 Minutes using Oracle Container Cloud Service

Oracle Home Cloning: Tools and Techniques

Using XFS on Oracle Linux