programing

도커 오라클 인스턴스에 연결하는 방법

javamemo 2023. 10. 12. 21:28
반응형

도커 오라클 인스턴스에 연결하는 방법

저는 이 지침을 따르고 있습니다.

다음과 같은 도커 컨테이너를 만들었습니다.

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

출력은 다음과 같습니다.

#########################
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

ctrl+c로 죽입니다.그럼 다음을 실행합니다.

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
===========================================================

그런 다음 다음 연결을 시도합니다.

docker exec -ti oracle sqlplus pdbadmin@ORAPDB

결과는 다음과 같습니다.

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

그러면 사용자 이름을 묻습니다.어떤 사용자의 SYS, SYSTEM, PDBADMIN에 상관없이 연결이 되지 않습니다.오타가 아닌지 확인하기 위해 암호(F1f@f23_)를 여러 번 다시 입력했습니다.이에 대한 어떤 의견이라도 주시면 감사하겠습니다.

저도 그 사진들을 보고 이런 경험을 했습니다.먼저 플러그형 데이터베이스에 연결하려면 먼저 플러그형 데이터베이스를 열어야 합니다.

저는 이와 같은 것을 사용합니다.

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

네, 저도 오라클 데이터베이스를 도커로 설정한 후 동일한 오류가 발생했습니다.

먼저 인스턴스가 실행 중인지 확인하고 ORACLE_SID를 찾습니다.

enter image description here

Oracle SID는 ORCLCDB입니다.

ORACLE_SID에 대해 환경을 설정하지 않은 경우 다음과 같은 이점을 얻을 수 있습니다.

enter image description here

연결에 실패했습니다.

그러나 ORACLE_SID를 설정한 후에는 다음을 수행합니다.

enter image description here

이제 더 이상 연결 실패 오류가 아니라 다른 SYSDBA가 발생합니다.

sqlplus 명령어 전체에 "/ as sysdba"만 추가하면 됩니다.

컨테이너가 시작되고 데이터베이스가 생성되면 다음 방법 중 하나로 다른 데이터베이스와 마찬가지로 컨테이너에 연결할 수 있습니다.

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>

도커 컨테이너에서 SQL*Plus 실행

데이터베이스를 시작할 때 사용했던 것과 동일한 도커 이미지를 사용하여 sqlplus를 실행하여 데이터베이스에 연결할 수 있습니다.

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

또 다른 옵션은 도커 Exec을 사용하고 데이터베이스를 이미 실행 중인 동일한 컨테이너 내에서 sqlplus를 실행하는 것입니다.

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

Oracle Database Docker 이미지를 실행하려면 다음과 같이 docker run 명령을 사용합니다.

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.

유용한 : https://github.com/oracle/docker-images/tree/master/OracleDatabase

지침은 가 있었습니다. .


SQL*Plus 시작 및 데이터베이스 연결
https://docs.oracle.com/database/121/ADMQS/GUID-DE8A79BD-FAE4-4364-98FF-D2BD992A06E7.htm#ADMQS0361

기본적으로 오라클 컨테이너에 들어가서 sqlplus를 입력합니다.사용자 이름 프롬프트에 SYSAS SYSDBA를 입력한 다음 암호를 입력합니다.그런 다음 사용자와 테이블을 만듭니다.

TNS_ADMIN문제를 일으키고 있었습니다.ORA-12154. XE 컨테이너 내부의 인스턴스에 성공적으로 연결할 수 있었습니다.sqlplus test/test@//localhost:1521/XEPDB1, 밖에서 온 건 아닙니다

제거후TNS_ADMIN효과가 있었습니다.내 생각엔, sqlplus takes가TNS_ADMINsetting, 그리고 그것이 존재할 경우, 연결을 해결하기 위해 tnsnames.또는 데이터를 사용합니다.그러나 물론 내부 도커의 Oracle XE 인스턴스는 여기에 나열되지 않습니다.

또는 이 구문을 사용할 수도 있습니다. 이 구문은 tnsname.ora가 정의되어 있지만 작동합니다.sqlplus test/test@'(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=XEPDB1)))'

당신이 이걸 찾고 있는 것 같습니다.

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

언급URL : https://stackoverflow.com/questions/45554498/how-do-i-connect-to-docker-oracle-instance

반응형