오라클 멀티테넌트 DB 접속 방법
Multi-Tenant 로 설치된 Oracle DB 에서 "sqlplus / as sysdba" 로 기본적으로 접속하면 local DB로 접속하게 됩니다. 물론 TWO_TASK 환경변수에 영향을 받습니다. 아무것도 설정이 되어 있지 않을 경우에는 local CDB로 접속되지만 다른 설정값이 있는 경우 설정된 값의 DB로 접속됩니다.
아래 화면은 TWO_TASK 가 설정되어 있지 않은 DB 서버에서 명령어를 수행한 화면입니다. Local DB 에 접속되는 것을
PDB 접속 방법
DB 서버 외부에서 접속할때는 어차피 다 SQL*Net 이나 JDBC 형태로 접속하기 때문에 싱글DB에 접속하는 것과 방법은 똑같습니다.
DB 서버 내부에서 SQL*Plus 로 접속하는 경우는 아래와 같이 4가지 방식을 사용할 수 있습니다.
1) CDB 에 접속한 후 alter session 커맨드로 세션 변경
2) tnsnames.ora 파일 세팅후 @TNS 로 접속
3) Easy Connect 방식으로 접속
4) TWO_TASK 설정해서 접속
1) CDB 에 접속한 후 alter session 커맨드로 세션 변경
sqlplus / as sysdba 로 CDB 에 접속한 후에, "alter session set container=<PDB명>;" 명령어로 접속하고자하는 PDB로 접속하는 방법입니다.
2) tnsnames.ora 파일 세팅후 @TNS 로 접속
tnsnames.ora 파일에 CDB나 PDB 정보를 설정하고, 그 이름을 사용해서 접속하는 방식입니다.
위는 sys 유저로 접속하는 예시라서 뒤에 "as sysdba" 가 붙었습니다.
scott 유저로 접속하는 경우는 "sqlplus scott/tiger@PDB1" 이라고 하면 됩니다.
3) Easy Connect 방식으로 접속
tnsnames 구성할 필요 없이 클라이언트 애플리케이션에서 직접 Oracle 데이터베이스에 대한 연결 주소를 지정할 수 있습니다 .
이 방법은 tnsnames.ora 파일을 생성하고 관리할 필요가 없다는 점에서 편리합니다. DB에 접속할 때 호스트 이름과 포트 번호를 지정하면 됩니다.
예를 들어, 호스트 이름이 shobeen이고 포트 번호가 1521인 서버에 있는 sales_us 데이터베이스에 연결하려고 한다면 다음과 같이 명령어를 실행하면 됩니다.
sqlplus system/admin@//shobeen:1521/sales_us
- 다음 형식을 사용하여 SQL 연결 URL 문자열을 지정
//host[:port][/service_name]
//shobeen:1521/sales_us
- Alternatively, specify the SQL connect information as an Oracle Net keyword-value pair.
- Oracle Net 설정과 같이 SQL 연결 정보를 지정
(CONNECT_DATA=(SERVICE_NAME=sales_us)))”
“(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp) (HOST=shobeen) (PORT=1521))
4) TWO_TASK 설정해서 접속
TWO_TASK 환경변수를 설정해서 하는 방식은 사실 위 2)번 방식으로 tnsnames.ora 파일이 세팅되어 있을때 사용가능한 방식입니다.
TWO_TASK 환경변수가 하는 역할이 sqlplus 접속시 뒤에 "@TNS명" 을 안붙혀도 붙힌 것처럼 효과를 주는 것밖에는 없기 때문입니다.
만약, tnsnames.ora 파일에 PDB1 이 TNS 로 등록되어 있지 않으면
"ORA-12154: TNS:could not resolve the connect identifier specified" 에러가 발생합니다.
SQL*Plus 접속이 많은 경우, 좀 더 편하게 접속하고자 하는 경우는
위 3)번 Easy Connect 방식의 접속 커맨드를 alias 로 아래와 같이 만들어서 .profile 같은 곳에 넣어두고
이 alias 를 사용하면 아주 편합니다.
alias pdb1='sqlplus sys@localhost/PDB1 as sysdba'
alias pdb2='sqlplus sys@localhost/PDB2 as sysdba'
alias pdb3='sqlplus sys@localhost/PDB3 as sysdba'
alias pdb1_scott='sqlplus scott/tiger@localhost/PDB1'