데이터베이스 연구실.log

데이터베이스 링크

개인 및 공용 DB 링크의 접속, 권한, 관리 방법이며 non-CDB 복제 후 최종 전환 결과는 확인 불가

DATABASE LINKCREATE DATABASE LINK@dblinktnsping원격 복제NON$CDB

#핵심 요약

데이터베이스 링크는 한 데이터베이스에서 다른 데이터베이스에 접속하는 경로임
CREATE DATABASE LINK <이름> CONNECT TO <원격 사용자> IDENTIFIED BY <비밀번호> USING '<접속 식별자>'로 만들고, 객체@링크이름으로 원격 객체를 씀

실습에서는 이 링크로 원격 서버의 non-CDB를 로컬 CDB의 PDB로 복제했음
소스 데이터베이스를 읽기 전용으로 열고, 대상 CDB 루트에서 CREATE PLUGGABLE DATABASE ... FROM NON$CDB@<링크>를 실행함

링크의 원격 사용자에게 실습에서는 CREATE SESSION과 CREATE PLUGGABLE DATABASE 권한을 줬음

#개념과 동작 원리

#링크를 이용한 원격 복제 절차

  1. 소스 non-CDB(또는 원격 PDB)를 읽기 전용으로 엶
  2. 대상 CDB 루트에 CREATE PLUGGABLE DATABASE 권한이 있는 공통 사용자로 접속함
  3. 그 권한을 가진 원격 사용자로 접속하는 데이터베이스 링크를 대상 쪽에 만듦
  4. CREATE PLUGGABLE DATABASE로 링크를 통해 복제함
    non-CDB면 실습 이름 자리에 NON$CDB, 원격 PDB면 그 PDB 이름을 씀
    새 PDB 이름은 대상 CDB의 다른 컨테이너와 겹치면 안 됨
  5. 소스가 non-CDB였다면 새 PDB에서 noncdb_to_pdb.sql을 실행함
  6. 새 PDB를 읽기, 쓰기로 열고 수업 자료를 다시 정상으로 엶

복제된 PDB는 SYSTEM, SYSAUX, UNDO, 임시 테이블스페이스, 카탈로그, SYS와 SYSTEM 공통 사용자, 새 서비스 이름을 가짐
SNAPSHOT COPY 같은 추가 옵션은 수업 자료가 Administrator's Guide를 참고하라고만 적었음

#주요 용어와 구성 요소

구문 의미
개인 링크 정의한 스키마에서 사용하는 링크임
공용 링크 PUBLIC으로 정의하며 DB 사용자들이 사용할 수 있는 링크임
고정 사용자 링크 CONNECT TO의 원격 계정으로 접속하며 실제 객체 작업은 원격 계정 권한에 따름
USER_DB_LINKS, ALL_DB_LINKS, DBA_DB_LINKS 자기 소유, 접근 가능, 관리자 범위의 링크 정의를 확인하는 뷰임

#필수 명령어 또는 SQL

항목 실행 조건
작업 대상 src_link의 원격 dual 조회와 non-CDB 복제, 원격 사용자, DB 열림 상태
필요 권한 본문의 사용자 생성, 기동, 복제는 SYSDBA 예시이며 일반 링크 생성, 원격 조회 권한은 별도임
바꿀 입력값 <REMOTE_HOST>, <REMOTE_SERVICE>, <PASSWORD>와 로컬, 원격 링크 사용자, 새 PDB명
결과 해석 리스너 응답, 원격 조회 기록과 PDB 전환 성공은 별개이며 최종 업그레이드, 전환 출력은 확인 불가

#원격 쪽: 링크용 사용자

SQL*Plus (SYSDBA, 원격 non-CDB)객체 또는 설정을 변경함
CREATE USER remoteclone IDENTIFIED BY <PASSWORD>;
GRANT CREATE SESSION, CREATE PLUGGABLE DATABASE TO remoteclone;

결과 해석: 개별 실행 출력은 기재 없음

#대상 쪽: 연결 확인과 링크 생성

OS 셸 (대상 서버, oracle 사용자)조회만 함
tnsping <REMOTE_HOST>:1521/<REMOTE_SERVICE>

결과 해석:

실습 기록: Easy Connect 어댑터로 해석해 원격 리스너에 "OK"로 응답했음

SQL*Plus (SYSDBA, 대상 CDB$ROOT)객체 또는 설정을 변경함
CREATE DATABASE LINK src_link
  CONNECT TO remoteclone IDENTIFIED BY <PASSWORD>
  USING '<REMOTE_HOST>:1521/<REMOTE_SERVICE>';
SQL*Plus (SYSDBA, 대상 CDB$ROOT)조회만 함
SELECT sysdate FROM dual@src_link;

결과 해석:

실습 기록: "Database link created." 뒤 원격의 SYSDATE가 조회됐음

#원격 쪽: 읽기 전용으로 열기

SQL*Plus (SYSDBA, 원격 non-CDB)인스턴스 또는 서비스 중단이 필요함
SHUTDOWN IMMEDIATE
STARTUP MOUNT
ALTER DATABASE OPEN READ ONLY;
ALTER SYSTEM REGISTER;

결과 해석:

실습 기록: V$DATABASE.OPEN_MODE가 READ ONLY였음

#대상 쪽: 링크로 복제

SQL*Plus (SYSDBA, 대상 CDB$ROOT)객체 또는 설정을 변경함
CREATE PLUGGABLE DATABASE pdbrem FROM NON$CDB@src_link;
ALTER PLUGGABLE DATABASE pdbrem OPEN RESTRICTED;
SQL*Plus (SYSDBA, pdbrem)객체 또는 설정을 변경함
ALTER SESSION SET CONTAINER = pdbrem;
@$ORACLE_HOME/rdbms/admin/noncdb_to_pdb.sql

결과 해석:

실습 기록: 생성은 성공했고 OPEN RESTRICTED에서 "Warning: PDB altered with errors."가 나왔음
실습에서는 noncdb_to_pdb.sql이 10~20분 걸리며 중단하면 안 된다고 적었음

#구문과 옵션 설명

개인 링크 생성에는 CREATE DATABASE LINK, 공용 링크 생성에는 CREATE PUBLIC DATABASE LINK가 필요함
원격에는 CREATE SESSION과 사용할 객체 권한이 별도로 필요함
DROP DATABASE LINK는 자기 스키마의 개인 링크를 삭제하며 공용 링크는 PUBLIC 지정과 DROP PUBLIC DATABASE LINK 권한이 필요함

#사용 조건과 주의사항

링크 정의에 원격 비밀번호가 들어감
개인, 공용 링크의 소유 범위와 생성, 삭제 권한은 아래 구분을 따름

원격 DB를 읽기 전용으로 바꾸려면 재기동이 필요함(실습은 SHUTDOWN 뒤 MOUNT에서 READ ONLY로 열었음)

TNSPING에 응답이 와도 원격 사용자 인증과 객체 접근은 실패할 수 있음
일반 원격 조회용 권한과 PDB 복제에 필요한 권한, 호환성 조건은 구분함

SEO_HKabsumveritas@gmail.comBuilt with Claude Code & Codex

마지막 갱신 개인 학습 기록이며 운영 환경 적용 전 공식 문서 확인 필요

두 글자 이상 입력, 위아래 화살표로 이동하고 Enter로 열기