Chuck
Chuck

Reputation: 213

How do I connect to docker Oracle instance

I am following these instructions.

I have created a docker container like this:

docker run --name oracle \
-p 1521:1521  \
-e ORACLE_SID=ORASID \
-e ORACLE_PDB=ORAPDB \
-e ORACLE_PWD=F1f@f23_ \
-v /mnt_point/oradata:/home/oracle/oradata \
oracle/database:12.2.0.1-ee

The output is:

#########################
DATABASE IS READY TO USE!
#########################
The following output is now a tail of the alert.log:
Completed: alter pluggable database ORAPDB open
2017-08-07T19:16:31.190780+00:00
ORAPDB(3):CREATE SMALLFILE TABLESPACE "USERS" LOGGING  DATAFILE  '/opt/oracle/oradata/ORASID/ORAPDB/users01.dbf' SIZE 5M REUSE AUTOEXTEND ON NEXT  1280K MAXSIZE UNLIMITED  EXTENT MANAGEMENT LOCAL  SEGMENT SPACE MANAGEMENT  AUTO
ORAPDB(3):Completed: CREATE SMALLFILE TABLESPACE "USERS" LOGGING  DATAFILE  '/opt/oracle/oradata/ORASID/ORAPDB/users01.dbf' SIZE 5M REUSE AUTOEXTEND ON NEXT  1280K MAXSIZE UNLIMITED  EXTENT MANAGEMENT LOCAL  SEGMENT SPACE MANAGEMENT  AUTO
ORAPDB(3):ALTER DATABASE DEFAULT TABLESPACE "USERS"
ORAPDB(3):Completed: ALTER DATABASE DEFAULT TABLESPACE "USERS"
2017-08-07T19:16:32.867558+00:00
ALTER SYSTEM SET control_files='/opt/oracle/oradata/ORASID/control01.ctl' SCOPE=SPFILE;
   ALTER PLUGGABLE DATABASE ORAPDB SAVE STATE
Completed:    ALTER PLUGGABLE DATABASE ORAPDB SAVE STATE

I kill it via ctrl+c. I then run:

docker start oracle
docker logs -f oracle

#########################
DATABASE IS READY TO USE!
#########################
The following output is now a tail of the alert.log:
ORAPDB(3):Undo initialization finished serial:0 start:508498668 end:508498772 diff:104 ms (0.1 seconds)
ORAPDB(3):Database Characterset for ORAPDB is AL32UTF8
ORAPDB(3):Opatch validation is skipped for PDB ORAPDB (con_id=0)
2017-08-07T19:25:39.799508+00:00
ORAPDB(3):Opening pdb with no Resource Manager plan active
Pluggable database ORAPDB opened read write
Starting background process CJQ0
Completed: ALTER DATABASE OPEN
2017-08-07T19:25:40.536753+00:00
CJQ0 started with pid=38, OS id=239
2017-08-07T19:25:42.538433+00:00
Shared IO Pool defaulting to 64MB. Trying to get it from Buffer Cache for process 77.
===========================================================
Dumping current patch information
===========================================================
No patches have been applied
===========================================================

I then attempt to connect like this:

docker exec -ti oracle sqlplus pdbadmin@ORAPDB

The result is:

ORA-12154: TNS:could not resolve the connect identifier specified

It then asks me for a username. Regardless of which user SYS, SYSTEM or PDBADMIN, I cannot connect. I have retyped the password (F1f@f23_) a multitude of times to make sure it was not a typo. Any thoughts on this would be appreciated.

Upvotes: 13

Views: 41461

Answers (6)

user10823113
user10823113

Reputation: 21

I think you are looking for this.

  datasource:
    url: jdbc:oracle:thin:@//localhost:1521/ORCLPDB1.localdomain
    username: SYS as SYSDBA
    password: Oradoc_db1

Upvotes: 1

Matthias Wiedemann
Matthias Wiedemann

Reputation: 1599

In my case, the definition of environment variable TNS_ADMIN was causing the issue with ORA-12154. I could successfully connect to the instance inside of the XE container: sqlplus test/test@//localhost:1521/XEPDB1, but not from outside.

After removing TNS_ADMIN it worked. I think, sqlplus takes TNS_ADMIN setting, and if it exists, it takes the tnsnames.ora data to resolve the connection. But of course, the Oracle XE instance from inside docker is not listed there.

As an alternative, you could use this syntax, which works although there is a tnsnames.ora defined: sqlplus test/test@'(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=XEPDB1)))'

Upvotes: 1

Annie C
Annie C

Reputation: 804

This instruction worked for me:


Starting SQL*Plus and Connecting to the Database
https://docs.oracle.com/database/121/ADMQS/GUID-DE8A79BD-FAE4-4364-98FF-D2BD992A06E7.htm#ADMQS0361

Basically get into the oracle container, then enter sqlplus. type SYS AS SYSDBA at the user name prompt, and then password. After that, I create the user and tables.

Upvotes: 1

Peter Teoh
Peter Teoh

Reputation: 6713

Yes, I got the same error after setting up Oracle database in docker too.

So first check the instance is running (and look for the ORACLE_SID):

enter image description here

The Oracle SID is ORCLCDB.

If you don't have the environment set for ORACLE_SID, you get:

enter image description here

Connection failed.

But after you set your ORACLE_SID:

enter image description here

And now you no longer get the connection failure error, but a different SYSDBA instead.

Just add "/ as sysdba" to your entire sqlplus command and you are good to go.

Upvotes: 6

William Friesen
William Friesen

Reputation: 153

I've encountered this with those images, too. You will first have to open the pluggable database before you can connect to it.

I do that with something like this:

docker exec -ti oracle sqlplus / as sysdba
alter pluggable database pdb1 open;

Upvotes: 10

Ikrom
Ikrom

Reputation: 484

Once the container has been started and the database created you can connect to it just like to any other database by one of the following methods:

1) sqlplus sys/<your password>@//localhost:1521/<your SID> as sysdba
2) sqlplus system/<your password>@//localhost:1521/<your SID>
3) sqlplus pdbadmin/<your password>@//localhost:1521/<Your PDB name>

Running SQL*Plus in a Docker container

You may use the same Docker image you used to start the database, to run sqlplus to connect to it, for example:

docker run --rm -ti oracle/database:12.2.0.1-ee sqlplus pdbadmin/<yourpassword>@//<db-container-ip>:1521/ORCLPDB1

Another option is to use docker exec and run sqlplus from within the same container already running the database:

docker exec -ti <container name> sqlplus pdbadmin@ORCLPDB1

To run your Oracle Database Docker image use the docker run command as follows:

docker run --name <container name> \
-p <host port>:1521 -p <host port>:5500 \
-e ORACLE_SID=<your SID> \
-e ORACLE_PDB=<your PDB name> \
-e ORACLE_PWD=<your database passwords> \
-e ORACLE_CHARACTERSET=<your character set> \
-v [<host mount point>:]/opt/oracle/oradata \
oracle/database:12.2.0.1-ee

Parameters:
   --name:        The name of the container (default: auto generated)
   -p:            The port mapping of the host port to the container port. 
                  Two ports are exposed: 1521 (Oracle Listener), 5500 (OEM Express)
   -e ORACLE_SID: The Oracle Database SID that should be used (default: ORCLCDB)
   -e ORACLE_PDB: The Oracle Database PDB name that should be used (default: ORCLPDB1)
   -e ORACLE_PWD: The Oracle Database SYS, SYSTEM and PDB_ADMIN password (default: auto generated)
   -e ORACLE_CHARACTERSET:
                  The character set to use when creating the database (default: AL32UTF8)
   -v /opt/oracle/oradata
                  The data volume to use for the database.
                  Has to be owned by the Unix user "oracle" or set appropriately.
                  If omitted the database will not be persisted over container recreation.
   -v /opt/oracle/scripts/startup | /docker-entrypoint-initdb.d/startup
                  Optional: A volume with custom scripts to be run after database startup.
                  For further details see the "Running scripts after setup and on startup" section below.
   -v /opt/oracle/scripts/setup | /docker-entrypoint-initdb.d/setup
                  Optional: A volume with custom scripts to be run after database setup.
                  For further details see the "Running scripts after setup and on startup" section below.

useful: https://github.com/oracle/docker-images/tree/master/OracleDatabase

Upvotes: 3

Related Questions