프린트 하기

OS 환경 : Oracle Linux 8.4 (64bit)

 

DB 환경 : Oracle Database 23.4.0.24.05 ai Free

 

방법 : 오라클 23ai 신기능 sqlplus 추가 명령

오라클 23ai 에서 sqlplus 에 추가된 기능들을 소개하고 테스트해봄

 

 

테스트
1. config 명령
2. show connection 명령
3. ping 명령
4. set errordetails 명령어
5. oerr 명령
6. history 명령어

 

 

1. config 명령
tnsnames.ora에 저장된 tns 정보를 확인할 수 있고, 이 정보를 json 파일로 내보낼수도 있음

 

 

구문

1
SQL> CONFIG EXPORT TNS [<tnsnames.ora file location>] [ AZURE ] [ [ FILE ] [<JSON filename>] ]

 

 

tns 정보 확인

1
2
3
4
5
6
7
8
9
10
11
12
13
14
SQL> config export tns
Generating config store JSON for Local Net Naming configuration file /opt/oracle/product/23ai/dbhomeFree/network/admin/tnsnames.ora
 
{
    "FREE2": {
        "connect_descriptor": "(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = ora23_2)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = FREE2)))"
    },
    "FREE": {
        "connect_descriptor": "(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = ora23)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = FREE)))"
    },
    "LISTENER_FREE": {
        "connect_descriptor": "(ADDRESS = (PROTOCOL = TCP)(HOST = ora23)(PORT = 1521))"
    }
}

현재 tns_admin 경로에 있는 tnsnames.ora 파일의 내용을 불러옴

 

 

tns 정보 확인(다른 위치)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
SQL> config export tns /home/oracle
Generating config store JSON for Local Net Naming configuration file /home/oracle/tnsnames.ora
 
{
    "FREE": {
        "connect_descriptor": "(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = ora23)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = FREE)))"
    },
    "LISTENER_FREE": {
        "connect_descriptor": "(ADDRESS = (PROTOCOL = TCP)(HOST = ora23)(PORT = 1521))"
    },
    "ora19": {
        "connect_descriptor": "(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = ora19)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = oracle19)))"
    }
}

/home/oracle 에 존재하는 tnsnames.ora 파일을 읽어옴

 

 

json 형식으로 저장

1
2
3
SQL> config export tns file mytns.json
Generating config store JSON for Local Net Naming configuration file /opt/oracle/product/23ai/dbhomeFree/network/admin/tnsnames.ora
Config store JSON file generated successfully (/home/oracle/mytns.json)

현재 tns_admin 경로에 있는 tnsnames.ora 파일의 내용을 json 형식으로 sqlplus를 실행한 경로(/home/oracle)에 저장함

 

 

mytns.json 파일 확인

1
2
3
4
5
6
7
8
9
10
11
12
$ cat mytns.json
{
    "FREE2": {
        "connect_descriptor": "(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = ora23_2)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = FREE2)))"
    },
    "FREE": {
        "connect_descriptor": "(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = ora23)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = FREE)))"
    },
    "LISTENER_FREE": {
        "connect_descriptor": "(ADDRESS = (PROTOCOL = TCP)(HOST = ora23)(PORT = 1521))"
    }
}

 

 

2. show connection 명령(약어 show conn)
tnsnames.ora 파일에 존재하는 tns alias 이름들을 확인할 수 있고, 개별 tns alias 들의 정보를 확인할 수 있음

 

 

구문

1
SQL> SHOW CONN[ECTION] NETS[ERVICENAMES] [net_service_name_1 net_service_name_2 .. net_service_name_n]

 

 

tnsnames.ora 파일에 존재하는 모든 tns alias 확인

1
2
3
4
5
SQL> show connection nets
Local Net Naming configuration file: /opt/oracle/product/23ai/dbhomeFree/network/admin/tnsnames.ora
FREE2
FREE
LISTENER_FREE

 

 

tnsnames.ora 파일에 존재하는 개별 tns alias 세부정보 확인

1
2
3
SQL> show connection nets free
Local Net Naming configuration file: /opt/oracle/product/23ai/dbhomeFree/network/admin/tnsnames.ora
free = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = ora23)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = FREE)))

 

 

3. ping 명령
현재 접속된 db나 tns alias에 ping 보내 가용성을 확인함

 

 

구문

1
SQL> PING [[LISTENER] connect_identifier]

 

 

현재 접속된 db의 ping 확인

1
2
SQL> ping
Ok (0.643 msec)

 

 

tnsnames.ora 파일에 존재하는 정상적인 tns alias 에 ping

1
2
3
4
SQL> ping free
Local Net Naming configuration file: /opt/oracle/product/23ai/dbhomeFree/network/admin/tnsnames.ora
Attempting to contact: (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = ora23)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = FREE)))
Ok (0.670 msec)

ping 속도 확인 가능

 

 

tnsnames.ora 파일에 존재하는 비정상적인 tns alias 에 ping

1
2
3
4
5
SQL> ping free2
Local Net Naming configuration file: /opt/oracle/product/23ai/dbhomeFree/network/admin/tnsnames.ora
Attempting to contact: (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = ora23_2)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = FREE2)))
SP2-1683: Ping failed with error TNS-12545.
Help: https://docs.oracle.com/error-help/db/sp2-1683/

에러 발생함

 

 

tnsnames.ora 파일에 존재하지 않는 tns alias 에 ping

1
2
3
SQL> ping free2
SP2-1679: Connect identifier (free2) was not found.
Help: https://docs.oracle.com/error-help/db/sp2-1679/

에러 발생함

 

 

ip로 ping 시도

1
2
3
4
5
6
SQL> ping 1.1.1.1
Local Net Naming configuration file: /opt/oracle/product/23ai/dbhomeFree/network/admin/tnsnames.ora
Attempting to contact: (DESCRIPTION=(CONNECT_DATA=(SERVICE_NAME=))(ADDRESS=(PROTOCOL=tcp)(HOST=1.1.1.1)(PORT=1521)))
(대기 약 20초)
SP2-1683: Ping failed with error TNS-12541.
Help: https://docs.oracle.com/error-help/db/sp2-1683/

tns alias 가 아닌 ip로 ping 시도시 약 20초간 대기 후 에러메세지 발생함
대기 중에는 어떤 커맨드로도 취소되지 않음(Ctrl+C, Ctrl+Z 등)

 

 

4. set errordetails 명령어
참고 : 오라클 23ai 신기능 일반 에러 메세지 개선 ( https://positivemh.tistory.com/1115 )

 

 

5. oerr 명령
오라클 에러 코드에 대한 설명을 확인할 수 있음
기존에 shell 환경에서 사용가능하던 명령어였지만 23ai부터 sqlplus 안에서도 사용이 가능함

 

 

구문

1
SQL> OERR [error_code|<facility name> <error number>]

 

 

19c 쉘에서 oerr 명령(ora와 에러번호 사이에 공백이 들어감)

1
2
3
4
5
$ oerr ora 00060
00060, 00000, "deadlock detected while waiting for resource"
// *Cause:  Transactions deadlocked one another while waiting for resources.
// *Action: Look at the trace file to see the transactions and resources
//          involved. Retry if necessary.

 

 

23ai sqlplus에서 oerr 명령(ora와 에러번호 사이에 '-'이 들어감)

1
2
3
4
5
6
SQL> oerr ora-00060
Message: "deadlock detected while waiting for resource"
Help: https://docs.oracle.com/error-help/db/ora-00060/
Cause:  Transactions deadlocked one another while waiting for resources.
Action: Look at the trace file to see the transactions and resources
        involved. Retry if necessary.

 

 

6. history 명령어
23ai 신기능은 아니고 12.2 버전부터 나온 기능이지만 유용한 기능임
참고 : 오라클 19c sqlplus 의 history 명령어 ( https://positivemh.tistory.com/1107 )

 

 

결론 :
오라클 23ai 부터 sqlplus 의 기능도 향상되어 업무를 조금 더 효율적으로 처리할 수 있게됨

 

 

참조 : 

https://oracle-base.com/articles/23/sqlplus-new-features-23
https://docs.oracle.com/en/database/oracle/oracle-database/23/sqpug/changes-this-release-sqpug.html#GUID-B891207E-99B0-4796-AA76-E1AF4B587436
https://docs.oracle.com/en/database/oracle/oracle-database/23/sqpug/HISTORY.html#GUID-CCF9B047-3122-4644-BA06-5FA4B5812E9F
https://docs.oracle.com/en/database/oracle/oracle-database/12.2/sqpug/release-changes.html#GUID-476F5AFD-231A-47BD-8A75-5E5EA27896E3
https://docs.oracle.com/en/database/oracle/oracle-database/23/sqpug/config.html#GUID-BA14D871-2310-4206-B335-52E8783D04B6
https://docs.oracle.com/en/database/oracle/oracle-database/23/sqpug/show-connection.html#GUID-5231AA9A-85CC-4AB8-AC7B-4C2251763452
 https://docs.oracle.com/en/database/oracle/oracle-database/23/sqpug/ping.html#GUID-60C4A1C5-535A-4C9B-88F7-DDE2C198FD6E