Docker Run Oracle DB 18c XE: Difference between revisions

From Chorke Wiki
Jump to navigation Jump to search
No edit summary
 
(36 intermediate revisions by the same user not shown)
Line 1: Line 1:
{|
{|
| valign="top" |
| valign="top" |
'''Linux:'''
'''Linux:'''
export ORACLE_HOME=/srv/oracle
<source lang="bash>
export ACADEMIA_HOME=$HOME/.chorke/academia
export ORACLE_18C_HOME=${ACADEMIA_HOME}/var/oracle18c
 
sudo mkdir -p ${ORACLE_18C_HOME}/oradata
sudo chown -R 54321:54321 ${ORACLE_18C_HOME}/oradata
</source>


| valign="top" |
| valign="top" |
'''MacOS:'''
'''MacOS:'''
export ORACLE_HOME=$HOME/oracle
<source lang="bash>
export ACADEMIA_HOME=$HOME/.chorke/academia
export ORACLE_18C_HOME=${ACADEMIA_HOME}/var/oracle18c
 
sudo mkdir -p ${ORACLE_18C_HOME}/oradata
sudo chown -R 54321:54321 ${ORACLE_18C_HOME}/oradata
</source>
 
|}
|}


Line 28: Line 41:
--env ORACLE_PWD=oracle \
--env ORACLE_PWD=oracle \
--env ORACLE_CHARACTERSET=AL32UTF8 \
--env ORACLE_CHARACTERSET=AL32UTF8 \
oracle/database:18.4.0-xe
--volume ${ORACLE_18C_HOME}/oradata:/opt/oracle/oradata \
container-registry.oracle.com/database/express:18.4.0-xe
</source>
</source>


===Volumes Location===
===With Volumes===
{| class="wikitable sortable"
{| class="wikitable sortable"
|-
|-
! Local location !! Container location  !! Usage
! Local location !! Container location  !! Usage
|-
|-
| <code>$ORACLE_HOME/oracle18c/oradata</code> || <code>/opt/oracle/oradata</code> || Oracle 18c XE Data
| <code>${ORACLE_18C_HOME}/oradata</code> || <code>/opt/oracle/oradata</code> || Oracle 18c XE Data
|-
|-
| <code>$ORACLE_HOME/oracle18c/scripts/setup</code> || <code>/opt/oracle/scripts/setup</code> ||  Setup Scripts
| <code>${ORACLE_18C_HOME}/scripts/setup</code> || <code>/opt/oracle/scripts/setup</code> ||  Setup Scripts
|-
|-
| <code>$ORACLE_HOME/oracle18c/scripts/startup</code> || <code>/opt/oracle/scripts/startup</code> || Startup Scripts
| <code>${ORACLE_18C_HOME}/scripts/startup</code> || <code>/opt/oracle/scripts/startup</code> || Startup Scripts
|}
|}


Line 50: Line 64:
--env ORACLE_PWD=oracle \
--env ORACLE_PWD=oracle \
--env ORACLE_CHARACTERSET=AL32UTF8 \
--env ORACLE_CHARACTERSET=AL32UTF8 \
--volume $ORACLE_HOME/oracle18c/oradata:/opt/oracle/oradata \
--volume ${ORACLE_18C_HOME}/oradata:/opt/oracle/oradata \
--volume $ORACLE_HOME/oracle18c/scripts/setup:/opt/oracle/scripts/setup \
--volume ${ORACLE_18C_HOME}/scripts/setup:/opt/oracle/scripts/setup \
--volume $ORACLE_HOME/oracle18c/scripts/startup:/opt/oracle/scripts/startup \
--volume ${ORACLE_18C_HOME}/scripts/startup:/opt/oracle/scripts/startup \
oracle/database:18.4.0-xe
container-registry.oracle.com/database/express:18.4.0-xe
</source>
 
===With Volumes And Network===
 
docker network ls
docker network create oracle_network
 
<source lang="bash>
docker run --detach \
--name oracle18c \
--publish 1521:1521 \
--publish 5500:5500 \
--env ORACLE_PWD=oracle \
--env ORACLE_CHARACTERSET=AL32UTF8 \
--volume ${ORACLE_18C_HOME}/oradata:/opt/oracle/oradata \
--volume ${ORACLE_18C_HOME}/scripts/setup:/opt/oracle/scripts/setup \
--volume ${ORACLE_18C_HOME}/scripts/startup:/opt/oracle/scripts/startup \
--network oracle_network \
container-registry.oracle.com/database/express:18.4.0-xe
</source>
 
==SQL Plus==
===Docker===
'''XEPDB1:''' (pluggable)
───────────────────
docker exec -it --user=oracle oracle18c bash
sqlplus sys@XEPDB1 as sysdba
sho con_name
 
'''CDB$ROOT:'''
─────────
docker exec -it --user=oracle oracle18c bash
sqlplus sys@XE as sysdba
sho con_name
 
'''Direct SQLPlus:'''
───────────────
docker exec -it --user=oracle oracle18c sqlplus sys@XEPDB1 as sysdba
docker exec -it --user=oracle oracle18c sqlplus sys@XE as sysdba
 
===Remote===
sqlplus sys/oracle@//10.19.83.10:1521/XE as sysdba
sqlplus sys/oracle@//10.19.83.10:1521/XEPDB1 as sysdba
 
==Query==
<source lang="sql">
DESC V$DATABASE;
SELECT DBID, NAME, CREATED FROM V$DATABASE;
SELECT USERNAME AS "SCHEMA_NAME" FROM SYS.ALL_USERS ORDER BY USERNAME;
SELECT USERNAME AS "SCHEMA_NAME" FROM SYS.DBA_USERS ORDER BY USERNAME;
</source>
 
<source lang="sql">
-- docker exec -it --user=oracle oracle18c sqlplus sys@XE as sysdba
ALTER SESSION SET "_oracle_script"=true;
CREATE USER academia_dev IDENTIFIED BY academia_dev;
GRANT CONNECT, RESOURCE, DBA TO academia_dev;
</source>
 
<source lang="sql">
-- docker exec -it --user=oracle oracle18c sqlplus academia_dev@XE
SELECT COUNT(tname) FROM tab;
</source>
 
==Pluggable DB==
<source lang="bash">
tnsping XE
sqlplus /nolog
</source>
 
<source lang="sql">
CONNECT / as sysdba
SHOW parameter pga
SHOW parameter sga_target
 
SELECT name FROM v$containers;
ALTER session SET container=XEPDB1;
ALTER profile DEFAULT limit password_life_time UNLIMITED;
 
-- cl scr
-- cdb => container database
-- pdb => pluggable database
 
SHOW con_name;
COLUMN name FORMAT a20;
SELECT name, con_id, open_mode FROM v$pdbs;
SELECT name as "Service Name" FROM v$active_services WHERE con_id = 3;
</source>
 
<source lang="ini" highlight="13-20" line>
# tnsnames.ora Network Configuration File: /opt/oracle/product/18c/dbhomeXE/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
 
XE =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = pc00)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = XE)
    )
  )
 
XEPDB1 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = pc00)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = XEPDB1)
    )
  )
 
LISTENER_XE =
  (ADDRESS = (PROTOCOL = TCP)(HOST = pc00)(PORT = 1521))
 
ORACLR_CONNECTION_DATA =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
    (CONNECT_DATA =
      (SID = CLRExtProc)
      (PRESENTATION = RO)
    )
  )
</source>
 
<source lang="bash">
lsnrctl reload
: <<'END_COMMENT'
LSNRCTL for Linux: Version 18.0.0.0.0 - Production on 28-MAY-2022 23:49:15
 
Copyright (c) 1991, 2018, Oracle.  All rights reserved.
 
Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
The command completed successfully
END_COMMENT
</source>
 
<source lang="sql">
CONNECT / as sysdba
ALTER session SET container=XEPDB1;
 
SHOW con_name;
COLUMN name FORMAT a20;
SELECT name, con_id, open_mode FROM v$pdbs;
 
ALTER PLUGGABLE DATABASE open;    -- if open_mode is mounted
SELECT name, con_id, open_mode FROM v$pdbs;    -- check again
ALTER USER hr IDENTIFIED BY hr ACCOUNT UNLOCK; -- unlock user
-- CONNECT hr/hr@//iis0.dev.shahed.biz:1521/xepdb1
CONNECT hr/hr@XEPDB1
SHOW USER
</source>
</source>


Line 72: Line 238:
  docker-machine ip default
  docker-machine ip default
  docker-machine ls
  docker-machine ls
docker run --detach \
--name oracle11g \
--publish 1521:1521 \
--publish 8090:8080 \
--env ORACLE_ENABLE_XDB=true \
--env ORACLE_ALLOW_REMOTE=true \
wnameless/oracle-xe-11g-r2:latest


==References==
==References==
* [https://ambar-prajapati.medium.com/installing-free-18c-oracle-database-express-edition-on-windows-10-home-and-professional-editions-2d1f40baf0f6 Install Oracle DB 18c XE on Windows 10 Home]
* [https://blogs.oracle.com/oraclemagazine/deliver-oracle-database-18c-express-edition-in-containers Docker Build and Run Oracle Database 18c XE]
* [https://blogs.oracle.com/oraclemagazine/deliver-oracle-database-18c-express-edition-in-containers Docker Build and Run Oracle Database 18c XE]
* [https://stackoverflow.com/questions/47767563 ORA-65096: invalid common user or role name]
* [https://matthiashoys.wordpress.com/2019/12/12/installation-of-apex-19-2-on-oracle-18c-xe-express-edition/ Installation of APEX 19.2 on Oracle 18c XE]
* [https://docs.oracle.com/en/database/oracle/oracle-database/18/xeinw/starting-and-stopping-oracle-database-xe.html Start and Stop Oracle Database 18c XE]
* [[Docker Run Oracle DB 21c XE]]
* [https://github.com/oracle/docker-images Docker Images from Oracle]

Latest revision as of 18:30, 28 May 2022

Linux:

export ACADEMIA_HOME=$HOME/.chorke/academia
export ORACLE_18C_HOME=${ACADEMIA_HOME}/var/oracle18c

sudo mkdir -p ${ORACLE_18C_HOME}/oradata
sudo chown -R 54321:54321 ${ORACLE_18C_HOME}/oradata

MacOS:

export ACADEMIA_HOME=$HOME/.chorke/academia
export ORACLE_18C_HOME=${ACADEMIA_HOME}/var/oracle18c

sudo mkdir -p ${ORACLE_18C_HOME}/oradata
sudo chown -R 54321:54321 ${ORACLE_18C_HOME}/oradata

Build

cd $ACADEMIA_WSS/unix/dokr_wss/
mkdir academia-dokr-ora18c
cd academia-dokr-ora18c/

git clone https://github.com/oracle/docker-images.git .
cd OracleDatabase/SingleInstance/dockerfiles/
./buildDockerImage.sh -v 18.4.0 -x

Run

docker run --detach \
--name oracle18c \
--publish 1521:1521 \
--publish 5500:5500 \
--env ORACLE_PWD=oracle \
--env ORACLE_CHARACTERSET=AL32UTF8 \
--volume ${ORACLE_18C_HOME}/oradata:/opt/oracle/oradata \
container-registry.oracle.com/database/express:18.4.0-xe

With Volumes

Local location Container location Usage
${ORACLE_18C_HOME}/oradata /opt/oracle/oradata Oracle 18c XE Data
${ORACLE_18C_HOME}/scripts/setup /opt/oracle/scripts/setup Setup Scripts
${ORACLE_18C_HOME}/scripts/startup /opt/oracle/scripts/startup Startup Scripts
docker run --detach \
--name oracle18c \
--publish 1521:1521 \
--publish 5500:5500 \
--env ORACLE_PWD=oracle \
--env ORACLE_CHARACTERSET=AL32UTF8 \
--volume ${ORACLE_18C_HOME}/oradata:/opt/oracle/oradata \
--volume ${ORACLE_18C_HOME}/scripts/setup:/opt/oracle/scripts/setup \
--volume ${ORACLE_18C_HOME}/scripts/startup:/opt/oracle/scripts/startup \
container-registry.oracle.com/database/express:18.4.0-xe

With Volumes And Network

docker network ls
docker network create oracle_network
docker run --detach \
--name oracle18c \
--publish 1521:1521 \
--publish 5500:5500 \
--env ORACLE_PWD=oracle \
--env ORACLE_CHARACTERSET=AL32UTF8 \
--volume ${ORACLE_18C_HOME}/oradata:/opt/oracle/oradata \
--volume ${ORACLE_18C_HOME}/scripts/setup:/opt/oracle/scripts/setup \
--volume ${ORACLE_18C_HOME}/scripts/startup:/opt/oracle/scripts/startup \
--network oracle_network \
container-registry.oracle.com/database/express:18.4.0-xe

SQL Plus

Docker

XEPDB1: (pluggable)
───────────────────
docker exec -it --user=oracle oracle18c bash
sqlplus sys@XEPDB1 as sysdba
sho con_name
CDB$ROOT:
─────────
docker exec -it --user=oracle oracle18c bash
sqlplus sys@XE as sysdba
sho con_name
Direct SQLPlus:
───────────────
docker exec -it --user=oracle oracle18c sqlplus sys@XEPDB1 as sysdba
docker exec -it --user=oracle oracle18c sqlplus sys@XE as sysdba

Remote

sqlplus sys/oracle@//10.19.83.10:1521/XE as sysdba
sqlplus sys/oracle@//10.19.83.10:1521/XEPDB1 as sysdba

Query

DESC V$DATABASE;
SELECT DBID, NAME, CREATED FROM V$DATABASE;
SELECT USERNAME AS "SCHEMA_NAME" FROM SYS.ALL_USERS ORDER BY USERNAME;
SELECT USERNAME AS "SCHEMA_NAME" FROM SYS.DBA_USERS ORDER BY USERNAME;
-- docker exec -it --user=oracle oracle18c sqlplus sys@XE as sysdba
ALTER SESSION SET "_oracle_script"=true;
CREATE USER academia_dev IDENTIFIED BY academia_dev;
GRANT CONNECT, RESOURCE, DBA TO academia_dev;
-- docker exec -it --user=oracle oracle18c sqlplus academia_dev@XE
SELECT COUNT(tname) FROM tab;

Pluggable DB

tnsping XE
sqlplus /nolog
CONNECT / as sysdba
SHOW parameter pga
SHOW parameter sga_target

SELECT name FROM v$containers;
ALTER session SET container=XEPDB1;
ALTER profile DEFAULT limit password_life_time UNLIMITED;

-- cl scr
-- cdb => container database
-- pdb => pluggable database

SHOW con_name;
COLUMN name FORMAT a20;
SELECT name, con_id, open_mode FROM v$pdbs;
SELECT name as "Service Name" FROM v$active_services WHERE con_id = 3;
# tnsnames.ora Network Configuration File: /opt/oracle/product/18c/dbhomeXE/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.

XE =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = pc00)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = XE)
    )
  )

XEPDB1 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = pc00)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = XEPDB1)
    )
  )

LISTENER_XE =
  (ADDRESS = (PROTOCOL = TCP)(HOST = pc00)(PORT = 1521))

ORACLR_CONNECTION_DATA =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
    (CONNECT_DATA =
      (SID = CLRExtProc)
      (PRESENTATION = RO)
    )
  )
lsnrctl reload
: <<'END_COMMENT'
LSNRCTL for Linux: Version 18.0.0.0.0 - Production on 28-MAY-2022 23:49:15

Copyright (c) 1991, 2018, Oracle.  All rights reserved.

Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
The command completed successfully
END_COMMENT
CONNECT / as sysdba
ALTER session SET container=XEPDB1;

SHOW con_name;
COLUMN name FORMAT a20;
SELECT name, con_id, open_mode FROM v$pdbs;

ALTER PLUGGABLE DATABASE open;     -- if open_mode is mounted
SELECT name, con_id, open_mode FROM v$pdbs;    -- check again
ALTER USER hr IDENTIFIED BY hr ACCOUNT UNLOCK; -- unlock user
-- CONNECT hr/hr@//iis0.dev.shahed.biz:1521/xepdb1
CONNECT hr/hr@XEPDB1
SHOW USER

Good To Know

docker logs oracle18c
docker stop oracle18c
docker start oracle18c
docker restart oracle18c
docker exec -it oracle18c /bin/bash
docker exec -it --user=oracle oracle18c bash
docker network ls
docker network create oracle_network
docker-machine create --driver virtualbox default
docker-machine start default
docker-machine stop default
docker-machine ip default
docker-machine ls
docker run --detach \
--name oracle11g \
--publish 1521:1521 \
--publish 8090:8080 \
--env ORACLE_ENABLE_XDB=true \
--env ORACLE_ALLOW_REMOTE=true \
wnameless/oracle-xe-11g-r2:latest

References