Computer >> 컴퓨터 >  >> 프로그램 작성 >> 데이터 베이스

다중 테넌트 데이터베이스 연결 해제 및 연결

이 블로그에서는 소스 컨테이너 데이터베이스(CDB)에서 하나의 플러그 가능 데이터베이스(PDB)를 분리하고 대상 CDB에 연결하는 방법에 대해 설명합니다. 이 블로그의 목적을 위해 PDB는 모든 애플리케이션 관련 데이터베이스를 저장하는 데이터베이스입니다.

소개

CDB에는 서로 다른 애플리케이션과 관련된 0개 이상의 PDB 데이터베이스가 포함되어 있으며 Oracle® 관련 메타데이터 및 일반 사용자를 저장하는 정확히 하나의 루트 컨테이너를 포함합니다. 루트 컨테이너의 이름은 CDB$ROOT입니다. . 루트 컨테이너에는 하나의 시드 PDB인 PDB$SEED도 포함됩니다. . 이 시드 PDB는 CDB가 새 PDB를 만드는 데 사용할 수 있는 시스템 제공 템플릿입니다. PDB는 컨테이너가 아닌 환경에서 사용하는 것과 동일한 데이터베이스입니다. 버전 12c에서 Oracle은 비즈니스 요구 사항에 따라 PDB를 추가할 수 있는 이 컨테이너 및 PDB 기능을 도입했습니다. 예를 들어, 영업 애플리케이션의 영업 부서 데이터와 HR 애플리케이션의 HR(인사) 부서 데이터를 포함하는 PDB 데이터베이스를 생성할 수 있습니다.

PDB를 분리한다는 것은 소스 CDB에서 PDB 데이터베이스를 분리하고 대상 CDB에 연결하는 것을 의미합니다.

이 블로그에서 소스 CDB, TEST12 , PDB1 두 개의 PDB가 있습니다. 및 PDB2 . 대상 CDB, DEV12 , 분리된 PDB를 수신합니다.

PDB 샘플 분리 및 연결

이 섹션에서는 PDB1의 플러그를 뽑는 방법을 배웁니다. 및 PDB2 소스 CDBTEST12에서 대상 CDB DEV12에 연결합니다. .

변경하기 전에 소스 PDB는 MOUNTED입니다. 다음 이미지와 같이:

다중 테넌트 데이터베이스 연결 해제 및 연결

대상 CDB와의 PDB 호환성 검증

플러그 작업을 시작하기 전에 플러그 인할 PDB가 새 호스트 CDB와 호환되는지 확인하십시오. 호환되지 않는 경우 다음 PL/SQL 블록을 실행하면 오류가 발생합니다.

. oraenv
[enter dev12 at the prompt]
sqlplus / as sysdba
set serveroutput on
DECLARE
   compatible BOOLEAN := FALSE;
BEGIN
   compatible := DBMS_PDB.CHECK_PLUG_COMPATIBILITY(
        pdb_descr_file => '/home/oracle/app/oradata/TEST12/pdb1/pdb1.xml ');
   if compatible then
      DBMS_OUTPUT.PUT_LINE('Is pluggable PDB1 compatible? YES');
   else DBMS_OUTPUT.PUT_LINE('Is pluggable PDB1 compatible? NO');
   end if;
END;
/

set serveroutput on
DECLARE
   compatible BOOLEAN := FALSE;
BEGIN
   compatible := DBMS_PDB.CHECK_PLUG_COMPATIBILITY(
        pdb_descr_file => '/home/oracle/app/oradata/pdb2/pdb2.xml');
   if compatible then
      DBMS_OUTPUT.PUT_LINE('Is pluggable PDB2 compatible? YES');
   else DBMS_OUTPUT.PUT_LINE('Is pluggable PDB2 compatible? NO');
   end if;
END;
/

PDB 닫기

다음 SQL*Plus® 문을 실행하여 플러그를 뽑을 수 있도록 PDB를 닫습니다.

. oraenv
[enter test12 at the prompt]
sqlplus / as sysdba
alter pluggable database pdb1 close immediate;
alter pluggable database pdb2 close immediate;

소스 PDB는 closed 마운트 상태여야 합니다. .

PDB 분리

PDB를 닫은 후 XML 매니페스트 파일을 생성합니다. 이 XML 파일에는 테이블스페이스의 이름과 전체 경로에 대한 정보와 언플러그된 PDB에 대한 데이터 파일이 포함되어 있습니다.

닫힌 PDB의 플러그를 뽑고 다음 명령을 실행하여 XML 파일의 경로와 이름을 지정하십시오.

alter pluggable database pdb1 unplug into '/home/oracle/app/oradata/TEST12/pdb1/pdb1.xml';
alter pluggable database pdb2 unplug into '/home/oracle/app/oradata/pdb2/pdb2.xml';

다음 명령을 실행하여 닫힌 PDB를 삭제하고 데이터 파일을 유지합니다.

drop pluggable database pdb1 keep datafiles;
drop pluggable database pdb2 keep datafiles;

다음 명령을 실행하여 분리된 PDB의 상태를 확인하십시오.

select pdb_name, status from cdb_pdbs where pdb_name in ('PDB1', 'PDB2');
[you will see no rows]
exit

PDB 연결

COPY 방법, NOCOPY 또는 CLONE MOVE 방법을 사용하여 PDB를 대상 CDB에 연결할 수 있습니다.

COPY 방식으로 연결

COPY 방법을 사용하여 PDB를 연결하려면 새 데이터 파일의 대상을 생성 및 정의하고 연결되지 않은 PDB를 대상 CDB에 연결한 다음 연결되지 않은 PDB의 데이터 파일을 복사합니다.

다음 명령을 실행하여 대상 디렉터리를 만듭니다.

mkdir /home/oracle/app/oradata/DEV12/pdb1
sqlplus / as sysdba

연결 해제된 PDB의 데이터 파일을 사용하여 PDB를 CDB에 연결하고 다음 명령을 실행하여 데이터 파일을 새 위치에 복사합니다.

create pluggable database pdb_plug_copy using '/home/oracle/app/oradata/TEST12/pdb1/pdb1.xml '
COPY
FILE_NAME_CONVERT=('/home/oracle/app/oradata/TEST12/pdb1','/home/oracle/app/oradata/DEV12/pdb1');

다음 명령을 실행하여 연결된 PDB의 상태 및 개방 모드를 확인하십시오.

select pdb_name, status from cdb_pdbs where pdb_name='PDB_PLUG_COPY';
select open_mode from v$pdbs where name='PDB_PLUG_COPY';
List the data files of the plugged PDB.
select name from v$datafile where con_id=3;
exit

이러한 작업의 결과는 다음 이미지에 표시됩니다.

다중 테넌트 데이터베이스 연결 해제 및 연결
NOCOPY 방식으로 연결

이 방법은 연결되지 않은 PDB의 데이터 파일을 사용하여 복사본을 만들거나 사용하지 않고 PDB를 대상 CDB에 연결합니다.

NOCOPY 메소드를 사용하여 PDB를 연결하려면 다음 명령을 실행하십시오.

create pluggable database pdb_plug_nocopy using '/home/oracle/app/oradata/pdb2/pdb2.xml'
NOCOPY
TEMPFILE REUSE;

이 작업은 몇 초 정도 걸립니다. 언플러그된 PDBnow의 원본 데이터 파일은 새 호스트 CDB의 새 플러그인된 PDB에 속합니다. XML 파일에 지정된 임시 파일과 동일한 이름의 파일이 대상 위치에 존재합니다. 따라서 TEMPFILE_REUSE 조항이 필요합니다.

다음 명령을 실행하여 연결된 PDB의 상태 및 개방 모드를 확인하십시오.

select pdb_name, status from cdb_pdbs where pdb_name='PDB_PLUG_NOCOPY';
select open_mode from v$pdbs where name='PDB_PLUG_NOCOPY';

이러한 작업의 결과는 다음 이미지에 표시됩니다.

다중 테넌트 데이터베이스 연결 해제 및 연결

다음 명령을 실행하여 연결된 PDB의 데이터 파일을 나열합니다.

select name from v$datafile where con_id=3;
select name from v$datafile where con_id=4;
exit
CLONE MOVE 방법으로 연결

CLONE MOVE 방법을 사용하여 PDB를 연결하려면 새 데이터 파일의 대상을 생성 및 정의하고 연결 해제된 PDB의 데이터 파일을 사용하여 PDB를 대상 CDB에 연결한 다음 데이터 파일을 다른 위치로 이동합니다.

다음 명령을 실행하여 대상 디렉터리를 만듭니다.

mkdir /home/oracle/app/oradata/DEV12/clone
sqlplus / as sysdba

PDB를 CDB에 연결하고 다음 명령을 실행하여 데이터 파일을 새 위치로 이동합니다.

create pluggable database pdb_plug_move using '/home/oracle/app/oradata/TEST12/pdb1/pdb1.xml '
MOVE
FILE_NAME_CONVERT=('/home/oracle/app/oradata/TEST12/pdb1','/home/oracle/app/oradata/DEV12/clone ');

GUID(Global Unique Identifier)가 고유하지 않기 때문에 오류 메시지가 표시됩니다. PDB1 다음 이미지와 같이 GUID와 충돌을 일으키는 COPY 방법을 사용하여 이미 연결되어 있습니다.

다중 테넌트 데이터베이스 연결 해제 및 연결

이 문제를 해결하려면 AS CLONE으로 다음 코드를 실행하세요. 절:

create pluggable database pdb_plug_move
AS CLONE using '/home/oracle/app/oradata/TEST12/pdb1/pdb1.xml '
MOVE
FILE_NAME_CONVERT=('/home/oracle/app/oradata/TEST12/pdb1','/home/oracle/app/oradata/DEV12/clone');

다음 명령을 실행하여 연결된 PDB의 상태 및 개방 모드를 확인하십시오.

select pdb_name, status from cdb_pdbs where pdb_name='PDB_PLUG_MOVE';
select open_mode from v$pdbs where name='PDB_PLUG_MOVE';

다음 명령을 실행하여 연결된 PDB의 데이터 파일을 나열합니다.

select name from v$datafile where con_id=5;

이러한 작업의 결과는 다음 이미지에 표시됩니다.

다중 테넌트 데이터베이스 연결 해제 및 연결

연결된 PDB 열기

PDB를 열고 플러그 작업을 완료하려면 다음 명령을 실행하십시오.

alter pluggable database pdb_plug_nocopy open;
alter pluggable database pdb_plug_copy open;
alter pluggable database pdb_plug_move open;

플러그인된 PDB에 연결하고 다음 명령을 실행하여 연결된 컨테이너 이름을 확인합니다.

connect sys/*****@localhost:1521/pdb_plug_nocopy AS SYSDBA
show con_name
connect sys/******@localhost:1521/pdb_plug_copy AS SYSDBA
show con_name
connect sys/******@localhost:1521/pdb_plug_move AS SYSDBA
show con_name
exit

PDB를 소스 CDB로 다시 이동

다음 명령을 실행하여 모든 연결 가능한 데이터베이스를 닫습니다.

. oraenv
[enter dev12 at the prompt]
sqlplus / as sysdba
alter pluggable database all close immediate;

pdb_plug_copy의 플러그를 뽑습니다. 데이터베이스를 사용하여 pdb1 다음 명령을 실행하여 데이터베이스:

alter pluggable database pdb_plug_copy unplug into '/home/oracle/app/oradata /pdb_plug_copy.xml';

pdb_plug_copy 삭제 다음 명령을 실행하여 데이터베이스:

 drop pluggable database pdb_plug_copy;

pdb_plug_nocopy의 플러그를 뽑고 놓습니다. 데이터베이스를 사용하여 pdb2를 다시 생성할 수 있습니다. 다음 명령을 실행하여 데이터베이스:

alter pluggable database pdb_plug_nocopy unplug into '/home/oracle/app/oradata /pdb_plug_nocopy.xml';
drop pluggable database pdb_plug_nocopy keep datafiles;

pdb_plug_move 삭제 다음 명령을 실행하여 데이터베이스:

drop pluggable database pdb_plug_move;

pdb1를 연결합니다. 데이터베이스를 TEST12로 다시 다음 명령을 실행하여 CDB:

connect sys/*****@localhost:1521/test12 as sysdba
create pluggable database pdb1 AS CLONE using '/u01/app/oracle/oradata/pdb_plug_copy.xml'
MOVE
FILE_NAME_CONVERT=(' /home/oracle/app/oradata/DEV12/pdb1',' /home/oracle/app/oradata/TEST12/pdb1');

pdb2를 연결합니다. 데이터베이스를 다시 TEST12로 다음 명령을 실행하여 CDB:

create pluggable database pdb2 using '/u01/app/oracle/oradata/pdb_plug_nocopy.xml' nocopy tempfile reuse;

pdb1 열기 및 pdb2 다음 명령을 실행하여:

alter pluggable database pdb2 open;
alter pluggable database pdb1 open;
exit

결론

PDB를 분리하고 연결하면 서버 간 파일 전송을 단순화하고 인적 오류 가능성을 줄일 수 있습니다. 예를 들어 모든 PDB 데이터베이스에 대해 패치를 한 번에 적용할 수 있는 반면 컨테이너가 아닌 환경에서는 모든 데이터베이스에 개별적으로 패치를 적용해야 합니다. 백업 및 기타 유지 관리 작업은 컨테이너 및 PDB 환경에서 훨씬 쉽습니다. 하나 이상의 파일을 전송하는 것을 실수로 잊어버리는 일이 없기 때문에 서버 간에 하나의 파일을 전송하는 것이 더 간단합니다.

이 블로그가 버전 12c PDB 및 비컨테이너 데이터베이스에 대한 CDB의 이점에 대해 더 나은 아이디어를 제공했으면 합니다.

피드백 탭을 사용하여 의견을 남기거나 질문하십시오.

데이터베이스 서비스에 대해 자세히 알아보십시오.