상세 컨텐츠

본문 제목

2023년 12월 8일 1교시 데일리 체크

오라클 아키텍처

by 병아리 엔지니어 2023. 12. 11. 07:40

본문

데일리 체크 = 일종의 아침 루틴

 

 

데일리 체크 리스트
1. 리스너에 대한 상태 정보를 가장 먼저 확인하기 lsnrctl status
2. 혹시 리스너가 중단되어 있으면 (내려가 있으면) 클라이언트 쪽에 오류가 나는데
(The Network Adapter could not 어쩌고저쩌고)
3. 해결방법: 리스너 시작
lsnrctl start
4. 오라클이 사용하고 있는 프로세스 확인
ps -ef | grep oracle

위 명령어를 수행했을 때 아래와 같은 화면이 나오면 DB 가 켜져 있는 것

뜨지 않는다면: 빨리 DB를 스타트업시켜야 한다.

 

 

 

★ daily check list


리눅스 때와는 달리 이제는 루트에서 작업하면 안되고 oracle 에서 작업을 해야 한다.
(루트는 sql+에 대한 권한이 없어서 +를 띄울 수 없다.
왜냐하면 오라클 소프트웨어 설치도 오라클로 했고
오너쉽도 루트가  오라클로 바꿔주었기 때문에)

 


[root@oracle ~]# sqlplus / as sysdba
bash: sqlplus: command not found...
루트에서 작업을 하려고 하면 : 에러가 난다.


[root@oracle ~]# su - oracle
그래서 일단 먼저 오라클 유저에 접속하고

 

 


[oracle@oracle ~]$ sqlplus / as sysdba
그 다음에 SQL+에 접속해야 한다.

SQL*Plus: Release 11.2.0.4.0 Production on Thu Dec 7 19:44:59 2023

Copyright (c) 1982, 2013, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

 


SQL> !

!는 SQL+ 에서 나가서 다시 OS로 가라는 명령어

 


[oracle@oracle ~]$ id
uid=1001(oracle) gid=1001(oinstall) groups=1001(oinstall),1002(dba),1003(oper) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

유저 아이디, 그룹 아이디, 그룹 등을 확인

 


[oracle@oracle ~]$ . oraenv
오라클의 environment 를 호출하는 명령어 : 오라클의 SID 를 입력하라고 뜬다.
한 시스템에 오라클 소프트웨어는 하나인데 DB를 여럿 만드는 경우에
저 명령어로 접속해야 할 DB 설정할 수 있다.

 

(여기서 . 하고 oraenv 사이는 꼭 띄어쓰기)


ORACLE_SID = [ora11g] ?
접속해야 할 DB 이름이 ora11g 이므로

물음표 오른쪽에 ora11g 라고 쓰기

ORACLE_SID = [ora11g] ? ora11g
The Oracle base remains unchanged with value /u01/app/oracle

 

 

 

 

데일리 체크 1단계. 리스너 체크


[oracle@oracle ~]$ lsnrctl status
리스너가 떠 있는지 확인: 이게 안 되어 있으면 클라이언트들이 서버에 접속을 할 수가 없다.

 



[oracle@oracle ~]$ lsnrctl stop
클라이언트 접속 불허, 네트워크 끊기 (리스너 중지시키기)


LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 07-DEC-2023 19:48:26

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

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=oracle)(PORT=1521)))
The command completed successfully



[oracle@oracle ~]$ lsnrctl status
(리스너를 끊어놓은 채로) 리스너 상태 정보 보기

LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 07-DEC-2023 19:48:43

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

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=oracle)(PORT=1521)))
TNS-12541: TNS:no listener                           <<< no listner 라고 뜸
 TNS-12560: TNS:protocol adapter error
  TNS-00511: No listener      <<< no listner
   Linux Error: 111: Connection refused
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
TNS-12541: TNS:no listener   <<< no listner
 TNS-12560: TNS:protocol adapter error
  TNS-00511: No listener       <<< no listner
   Linux Error: 2: No such file or directory

 

no listner는 리스너가 죽어있다는 뜻
이 상태에서 sql developer 를 켜보면 : 오류가 난다.

 


이런 식


network 오류
요청한 작업을 수행하는 중 오류 발생:
IO 오류: The Network Adapter could not establish the connection

업체 코드 17002

이럴 때는 다시 퍼티 창으로 가서

 


[oracle@oracle ~]$ lsnrctl start
리스너를 다시 살리면 된다. (리스너 시작)

 


[oracle@oracle ~]$ lsnrctl status
다시 상태 정보를 확인하면: 아까 no listner 하고 나서 리스너 상태 확인했을 때하고 똑같다.

(노 리스너의 향연 - 상태를 바꿨는데도 감지를 못함)
리스너가 내부적으로 작업하는 데 시간이 좀 걸리기 때문에

그때까지 기다려야 한다.

그래서 조금 지난 뒤에 다시 확인해보면...

 


Services Summary...
Service "ora11g" has 1 instance(s).
  Instance "ora11g", status READY, has 1 handler(s) for this service...
Service "ora11gXDB" has 1 instance(s).
  Instance "ora11g", status READY, has 1 handler(s) for this service...
The command completed successfully
이런 식으로 ora11g 라고 올라와있는 것을 볼 수 있다.

데일리 체크 2단계. 접속해야 할 데이터베이스 체크

 

 


[oracle@oracle ~]$ sqlplus / as sysdba
우리가 관리해야 할 DB에 DBA 로 접속해보기

 

 

 

SQL> ! ps -ef | grep oracle
오라클과 관련된 프로세스들 확인

이게 떠 있다면 : DB가 떠 있는 것

 



SQL> exit

SQL + 에서 빠져나가서

 



[oracle@oracle ~]$ ps -ef | grep oracle
sql+ 가 아니라 OS 에서도 확인해볼 수 있다.
현재 오라클이 사용하고 있는 프로세스 확인

백그라운드 프로세스들이 떠 있는지 확인하기

 


SQL> select * from v$instance;

DB 인스턴스의 상태 확인

startup_t status 부분이 open 으로 되어있는지 보기

 

 

 

INSTANCE_NUMBER INSTANCE_NAME
--------------- ----------------
HOST_NAME
----------------------------------------------------------------
VERSION           STARTUP_T STATUS       PAR    THREAD# ARCHIVE LOG_SWITCH_WAIT
----------------- --------- ------------ --- ---------- ------- ---------------
LOGINS     SHU DATABASE_STATUS   INSTANCE_ROLE      ACTIVE_ST BLO
---------- --- ----------------- ------------------ --------- ---
              1 ora11g
oracle
11.2.0.4.0        12-DEC-23 OPEN         NO           1 STOPPED
ALLOWED    NO  ACTIVE            PRIMARY_INSTANCE   NORMAL    NO

 


QUESTION. 나 이거 오류나... ㅠㅠ
-bash: syntax error near unexpected token `from'
라는데 이유가 뭘까?

ANSWER. 얘야... OS가 아니라 SQL+  로 접속해서 확인했어야지...

 

 


이제 리스너도 떠있고 DB 도 켜져 있으므로

sqld 로 접속하면 접속이 되고 (상태: 성공)

 

 


sqld 에서 select * from v$instance; 입력하면
status가 open 으로 표시되어 있다.

반 친구 (헤르미온느) 질문:

만약 lsnrctl start 했을 때 리스너 시작이 안되고

Connected to an idle instance 어쩌고 하는 메시지가 뜨면

이건 버추얼 박스를 X 눌러서 저장해서 끄지 않고

 

(이렇게 하지 않고)

 

 

 

(이렇게 해서 끈 것)

 

이렇게 끄면 리스너를 시작해도 시작이 되지 않고

Connected to an idle instance 어쩌고 하는 메시지가 뜬다.

이건 DB 가 내려갔다는 뜻인데

해결 방법은: SQL+ 에서 startup 명령어를 입력해서 DB를 띄우면 된다.

퍼티 창 SQL+ 에서

 

이렇게, startup 명령어를 입력하면 DB가 올라오는데
이게 (현장에서는 더더욱) 한참 걸린다고 한다...

그래서 DBA 들은 일찍일찍 출근해야 한다고...

 

아무튼 그래서 결론은?

리스너가 내려갔을 때는 OS 에서 lsnrctl start 명령어 입력하라고...

 

 

★ 리스너란?

- 네트워크 길

- 리스너를 켜는 것  = 네트워크 스위치를 올리는 것

- 서버와 클라이언트가 소통을 해야 하는데

- 그러려면 네트워크 길이 연결되어 있어야 한다.

- 오라클에서는 그 네트워크 길 설정을 리스너에게 맡긴다.

- 리스너는 호스트 정보, 포트 정보, SID 정보, 프로토콜 정보 등을 가지고 있다.

- 리스너는 리모트 지역에서 접속하는 클라이언트들을 위한 것

- 리스너가 떠야만 클라이언트들이 접속할 수 있다.

 

참고로

SQL D 를 통해 오라클에 접속하는 것 = 리모트 (리스너를 통해 접속하는 것)
파이썬 프로그램을 통해 SQLD 에 접속하는 것도 리모트

하지만 퍼티로 들어가는 것은 리모트로 접속하는 것이 아니라

서버로 직접 들어가는 것이므로 네트워크 길이 굳이 필요가 없다.

 

 

(여기까지가 반 친구 질문)

 

그러면 다시 퍼티 창으로 돌아와서...

 


[oracle@oracle ~]$ sqlplus / as sysdba                                     
오라클로 접속

 



SQL> l

알파벳 l(엘), 대문자 아이 아님

맨 마지막으로 수행한 SQL 문장 보기


SP2-0223: No lines in SQL buffer.

아무 문장도 수행한 게 없다는 뜻

 


SQL> select * from v$instance;

그래서 아무 문장이나 수행해보고

다시 알파벳 l 을 입력해 보면



SQL> l
  1* select * from v$instance
맨 마지막으로 select * from v$instance 라는 문장을 수행했다고 나온다.

 

★ define_ 명령어 설정하기

 

SQL> define

SQL 의 환경설정 보기

 

 

지금은 define_editor 가 제대로 vi 로 되어 있지만

만약 DEFINE _EDITOR 부분이

         = "ed" (CHAR)

라고 되어 있을 때는: 아래의 방법으로 바꿔줄 수 있다.

 


SQL> define_editor="vi"
editor 사용 명령어를 vi 로 바꾸기

 

다시 한번 SQL+ 에서 define 명령어를 입력해서 확인해보면

 


DEFINE _EDITOR         = "vi" (CHAR)
제대로 고쳐져 있는 것이 보인다.

 

 

 


SQL> ed
맨 마지막으로 수행한 문장 편집하기

 

ed 하면 vi 편집기가 열리면서 맨 마지막으로 수행한 문장(select * from v$instance)을 편집할 수 있게 되는데

 


/ 는 그대로 놔두는 것

 

select * from v$instance

일부러 잘못 편집해보기 : 원래의 문장에서 * 을 지우고 대신 open 을 써넣었는데

v$instance 테이블에는 당연히 open 이라는 컬럼은 없으므로 오류가 난다.

 

그리고 문장 끝에 세미콜론 쓰지 말 것! 문법 오류가 난다.

 

 

편집이 다 끝났으면

 

SQL+ 에서

/ 명령어 입력하고 엔터키 누르기

 


ERROR at line 1:
ORA-00904: "OPEN": invalid identifier
open 이라는 컬럼은 없다고 하면서 오류가 발생
(이런 오류를 '시멘틱 오류' 라고 한다)

 

 

 

 

(47:17 부터 약 9분간)

SQL prompt 창 & 퍼티 창 = user process

여기서 SQL 문장을 Server process 에 던지게 되는데

(server process 는 나의 비서, SQL 문 처리기라고 생각하면 된다)

 

server process는 PGA 라는 메모리를 만들고

그 안에 또 커서라는 SQL 실행 메모리 영역을 확보한 다음

유저가 던진 SQL 문장을 받아서 그 커서 영역에서 처리하게 된다.

 

제일 처음으로는 syntax (문법 / 철자 등) 를 체크하고

그 다음으로 하는 것이 sementic (의미 분석) 체크인데

이 단계에서는 해당 테이블이 존재하는지, 그 테이블 안에 특정 컬럼이 존재하는지 등을 따진다.

그런데 v$instance 라는 테이블 안에는 open 이라는 컬럼이 없으므로 sementic 오류가 발생한 것

 




그리고
다시 SQL+ 로 들어가서 define 해보면
다시 vi 편집기가 ed 로 되어 있다.


그러면 또 define_editor="vi" 해서 매번 바꾸기가 너무 귀찮으므로


오라클 홈 디렉토리로 가서

 


[oracle@oracle ~]$ cd $ORACLE_HOME/sqlplus/admin
[oracle@oracle admin]$ pwd
/u01/app/oracle/product/11.2.0.4/db_1/sqlplus/admin


여기서 ls 하면

 



[oracle@oracle admin]$ ls
glogin.sql  help  libsqlplus.def  plustrce.sql  pupbld.sql

파일들이 여러 개 보이는데 그 중에서

 

 

glogin.sql
이 파일이 define 환경변수 설정하는 파일

 

 

[oracle@oracle admin]$ vi glogin.sql

vi glogin.sql 하고

 

 


define_editor="vi"
문서 맨 마지막 줄에 얘 추가

 


저장하고 나오기

 

 


다시 cd 해서 홈 디렉토리로 가고

 



다시 exit 해서 SQL+ 로 빠져나간 다음

 

 

SQL+ 에서 define 하면

 

DEFINE _EDITOR         = "vi" (CHAR)

이렇게, define_editor 부분이 vi 로 잘 고쳐져 있는 것이 보인다.

관련글 더보기