In my last blog, you learned to create a
containerized Oracle database for your development/testing purpose. You also know how to connect to your container and run command in the container.
Connecting to SQLPlus
Running a SQL script Using SQLPlus
Here is the output you will get
Most applications require some reference data e.g. example,my OrderApp application based on Apache Tom EE requires catalog data to be pre-populated before I can test my application.
One of the readers asked me how can we run a SQL
script on his local or shared drive to seed the containerized database.
In this blog, I will show how you can execute scripts with
SQL*Plus inside the container to seed your dockerized Oracle database.
Connecting to SQLPlus
In the last blog, we learned that ORACLE_HOME for the
database running in the container is /u01/app/oracle/product/12.1.0/dbhome_1.
I can
connect to the database by running the following command:
docker exec -it
orcldb /u01/app/oracle/product/12.1.0/dbhome_1/bin/sqlplus system/welcome1@ORCL
SQL*Plus: Release 12.1.0.2.0 Production on Sat
Jan 20 06:22:58 2018
Copyright (c) 1982, 2014, Oracle. All rights reserved.
Last Successful login time: Sun Jan 14 2018
03:09:54 +00:00
Connected to:
Oracle Database 12c Standard Edition Release
12.1.0.2.0 - 64bit Production
SQL>
You might remember ORCL was the instance name that provided for my database.
Also note that when I run the command, SQL*Plus is getting executed inside the container.
Also note that when I run the command, SQL*Plus is getting executed inside the container.
Running a SQL script Using SQLPlus
As the command is getting executed inside the container
running the Oracle database, the SQL script has to be accessible from the
container.
My Script
My application depends upon a user in the PDB. My script creates the user, creates tables in that user's schema and populates data in those tables.
I have a script named user.sql that I want to execute and here are the contents of /Users/dpanda/orderapp2/orcl/sql/user.sql script.
I have a script named user.sql that I want to execute and here are the contents of /Users/dpanda/orderapp2/orcl/sql/user.sql script.
create user orderapp identified by orderapp2
default tablespace users temporary tablespace
temp
/
alter user orderapp quota unlimited on users
/
grant connect, resource to orderapp
/
connect orderapp/orderapp@pdb1
@/u04/app/sql/sample_oow_tomcat_create.sql
@/u04/app/sql/sample_oow_productline.sql
commit;
exit;
As
I am invoking the SQL*Plus inside the container, I have to specify the drive
inside the container.
Mapping Volume from the Container to Local or Shared Drive
You
might remember from the last blog that when I started the Database container, I
mapped the drive in /u04/app in the container to /Users/dpanda/orderapp2/orcl by
using –v option as below:
docker run -d --env-file db.properties -p 1521:1521 -p 5500:5500
--name orcldb --net appnet --shm-size="4g" -v
/Users/dpanda/orderapp2/orcl:/u04/app:/u04/app
container-registry.oracle.com/database/standard
The
script directory has to be specified as /u04/app/sql as my script is located in
/Users/dpanda/orderapp2/orcl/sql directory on my MAC .
Here
is the docker command I can use to run my script:
docker
exec -it orcldb
/u01/app/oracle/product/12.1.0/dbhome_1/bin/sqlplus
system/welcome1@PDB1 @/u04/app/sql/user
As you can see, I can connecting to the pdb1 database by executing SQLPlus command and running the user.sql script.
Here is the output you will get
SQL*Plus: Release 12.1.0.2.0 Production on Sat
Jan 13 06:16:32 2018
Copyright (c) 1982, 2014, Oracle. All rights reserved.
Last Successful login time: Sat Jan 13 2018
06:16:19 +00:00
Connected to:
Oracle Database 12c Standard Edition Release
12.1.0.2.0 - 64bit Production
User created.
User altered.
Grant
succeeded.
…..
1 row created.
1 row created.
1 row created.
Commit complete.
Disconnected from Oracle Database 12c Standard
Edition Release 12.1.0.2.0 - 64bit Production
Hope
this helps to automate your script to seed your containerized Oracle database.
In
a future blog, I will demonstrate how can you Oracle Instant Client in a Docker
container to automate your scripts.