[Oracle] DB Link 사용갯수 늘리기 (ORA-02020 대응)

[Oracle] DB Link 사용갯수 늘리기 (ORA-02020 대응)
Photo by BoliviaInteligente / Unsplash

A. 사용환경

  • Oracle 버전 : Oracle Database 19.3

B. 시작하기 전에..

현재 수행 중인 프로젝트에서 다수의 Oracle Database를 동시에 관리해야하는 업무를 부여받았다. 기존에는 대형서버로 구성된 단일 DB로 관리했으므로 DB툴을 이용해서 관리하는 것이 어렵지 않았는데, 여러 개의 DB로 쪼개지고 OGG를 이용해서 Sync를 맞추는 등의 복잡한 구조가 되다보니 전체 DB현황을 DB툴만 가지고는 관리하기가 어려운 상황이 되어버렸다.

문서화로 대응하거나 관리툴을 직접 만드는 방법 등을 고민하다가... 그냥 PC에 오라클 서버를 설치하고 DB Link로 각 DB를 붙인 뒤에 쿼리로 전체 DB(대략 15개 정도의 DB)를 유지보수할 수 있는 방법으로 진행하고 있다.

문제는 Oracle에서 DB Link를 동시에 사용할 수 있는 갯수가 4개로 되있어서 그 이상의 DB Link를 사용하려니 에러(ORA-02020)가 발생하더라..

C. 현황파악

SELECT a.name, a.value, a.ISDEFAULT
--     , a.*
  FROM "V$PARAMETER" a
 WHERE name = 'open_links'
;

v$parameter에 관련 설정값을 확인해본다.

|NAME      |VALUE|ISDEFAULT|
|----------|-----|---------|
|open_links|4    |TRUE     |

한 쿼리에서 사용가능한 DB Link의 갯수는 기본이 4개이다. 이제 바꿔보자..

D. 설정변경

SELECT a.name, a.value
--     , a.*
  FROM "V$PARAMETER" a
 WHERE name LIKE '%spfile%'
;

파라미터를 어디에 보관하는지 확인하기 위해서 spfile이라는 파라미터를 검색해본다.(거의 다음,다음 형태로 설치해서... 아마 spfile에 파라미터 값을 보관하고 있을 것이라고 생각하긴 했다.)

|NAME  |VALUE                              |
|------|-----------------------------------|
|spfile|C:\ORABIN\DATABASE\SPFILEORA193.ORA|

spfile의 경로를 반환한다.(직접 저 파일을 직접 수정할 생각은 없었고, 단지 설정을 변경하기 전에 기존 설정파일을 백업하기 위해서 경로를 재확인했다.)

해당 파일을 복사해서 오늘 날짜로 백업한다.(간혹 설정 변경하고 정상적으로 db 기동이 안되는 경우가 있어서... 습관적으로 설정변경 전에는 항상 설정파일을 백업해두는 편이다.)

직접 캡처

설정파일 백업이 완료되었으면, 설정을 바꿔본다.

ALTER system SET open_links=20 SCOPE=spfile;

alter system 명령어를 수행한 뒤에 v$parameter의 open_links 값을 확인해도 변경되어 있지 않다.

db를 재기동해야 적용된다.

E. 변경사항 적용

변경할 설정을 위해서 재기동한다. 윈도우 OS에 설치한 db이므로 터미널(cmd.exe)을 열고...

C:\Users\Administrator>sqlplus "/as sysdba"

SQL*Plus: Release 19.0.0.0.0 - Production on 목 1월 25 14:54:31 2024
Version 19.3.0.0.0

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


다음에 접속됨:
Oracle Database 19c Standard Edition 2 Release 19.0.0.0.0 - Production
Version 19.3.0.0.0

SQL> shutdown immediate;
데이터베이스가 닫혔습니다.
데이터베이스가 마운트 해제되었습니다.
ORACLE 인스턴스가 종료되었습니다.
SQL>

정상적으로 db가 종료됬다면... 다시 올리자!

SQL> startup mount
ORACLE 인스턴스가 시작되었습니다.

Total System Global Area 5167381760 bytes
Fixed Size                  9039104 bytes
Variable Size             922746880 bytes
Database Buffers         4227858432 bytes
Redo Buffers                7737344 bytes
데이터베이스가 마운트되었습니다.
SQL> set line 200
SQL> show parameters open_links

NAME                                 TYPE                   VALUE
------------------------------------ ---------------------- ------------------------------
open_links                           integer                20
open_links_per_instance              integer                4
SQL>

정상적으로 open_links 파라미터 값이 20으로 변경되었음을 확인할 수 있다.

인제 사용가능하도록 db를 오픈한다.

SQL> alter database open;

데이타베이스가 변경되었습니다.

SQL>

F. 마치면서..

이제 DB Link를 이용해서 하나의 DB서버(내 PC의 Oracle 서버)에 접속해서 관리대상 DB서버(대략 15개정도)를 관리할 수 있는 쿼리들을 만들어볼 시간이다!(이제부터 노가다...)

G. 참고문서

  1. ORA-02020: too many database links in use 에러 조치 방법, 안나푸르나, CDL, 2012/01/13