기본 키가 없는 테이블 마이그레이션

이 페이지에서는 기본 키가 없는 Oracle 테이블을 마이그레이션하는 방법을 설명합니다.

  • 자동 기본 키 생성에서는 Database Migration Service가 기본 키가 없는 소스 테이블을 처리하는 방법을 설명합니다.

  • 누락된 기본 키 수동 추가에서는 변환된 스키마에서 누락된 기본 키를 추가하는 데 사용할 수 있는 쿼리 예를 보여줍니다.

자동 기본 키 생성 개요

기본 키가 없는 테이블은 일관된 복제를 보장하지 않습니다. Database Migration Service는 기본 키가 있는 테이블만 마이그레이션합니다. 소스 데이터베이스에 기본 키가 없는 테이블이 포함되어 있는 경우 Database Migration Service는 다음과 같은 방법으로 이를 처리할 수 있습니다.

  • 소스 코드와 스키마를 변환할 때 Database Migration Service 는 대상 테이블에 ROWID 열을 추가하여 누락된 기본 키를 자동으로 만들 수 있습니다. 이 자동화된 프로세스를 사용하려면 소스 테이블이 다음 요구사항을 충족해야 합니다.
    • 기본 키가 아직 없습니다.
    • null 허용 열이 없는 UNIQUE 제약조건이 없습니다.
    • null 허용 열이 없는 UNIQUE 색인이 없습니다.
    테이블이 이러한 요구사항을 충족하지 않는 경우 변환된 PostgreSQL 스키마의 테이블에 누락된 기본 키를 수동으로 추가해야 합니다.
  • 기존 변환 작업공간에서 Database Migration Service는 기본 키를 자동으로 만들지 않습니다. 기존 변환 작업공간을 사용하는 경우, 변환된 PostgreSQL 스키마의 테이블에 누락된 기본 키를 수동으로 추가해야 합니다.

누락된 기본 키 수동 추가

기본 키가 없는 Oracle 테이블을 마이그레이션하려면 다음 단계를 따르세요.

  1. 변환 작업공간을 사용하여 소스 코드와 스키마를 변환합니다.
  2. SQL 클라이언트로 대상 Cloud SQL 인스턴스에 연결합니다. 다음 방법을 사용할 수 있습니다.
    • psql 클라이언트. 이 방법을 사용하여 인스턴스 비공개 IP에 연결할 수 있지만 Compute Engine 가상 머신을 만들어야 할 수도 있습니다.
    • gcloud sql connect 명령어. 이 명령어는 공개 IP 주소가 사용 설정된 Cloud SQL 인스턴스에서만 작동합니다.
  3. 테이블에 누락된 기본 키 제약조건을 만듭니다. 기본 키에 대한 자세한 내용은 PostgreSQL 문서의 기본 키를 참조하세요.

    다음 섹션을 펼쳐 샘플 SQL 명령어를 확인할 수도 있습니다.

    기존 열을 사용하여 기본 키 만들기

    테이블에 열 또는 열 조합을 기반으로 하는 논리적 기본 키가 이미 있을 수 있습니다. 예를 들어 고유 제약조건 또는 색인이 구성된 열이 있을 수 있습니다. 이러한 열을 사용하여 소스 데이터베이스의 테이블에 새 기본 키를 생성합니다. 예를 들면 다음과 같습니다.

    ALTER TABLE TABLE_NAME
    ADD PRIMARY KEY (COLUMN_NAME);

    다음을 바꿉니다.

    • TABLE_NAME을 기본 키가 없는 테이블의 이름으로 바꿉니다.
    • COLUMN_NAME을 기본 키로 사용할 수 있는 고유 제약조건 또는 색인이 있는 열의 이름으로 바꿉니다.

    모든 열을 사용하여 기본 키 만들기

    기본 키로 사용할 수 있는 기존 제약조건이 없는 경우 테이블의 모든 열을 사용하여 기본 키를 만듭니다. PostgreSQL 인스턴스에서 허용하는 기본 키의 최대 길이를 초과하지 않도록 하세요.

    이 방법으로 복합 기본 키를 만들 때는 사용할 모든 열 이름을 명시적으로 나열해야 합니다. 이 목적으로 문을 사용하여 모든 열 이름을 가져올 수는 없습니다. 예를 들면 다음과 같습니다.

    ALTER TABLE TABLE_NAME
    ADD PRIMARY KEY (COLUMN_NAME_1, COLUMN_NAME_2, COLUMN_NAME_3, ...);

    다음을 바꿉니다.

    • TABLE_NAME을 기본 키가 없는 테이블의 이름으로 바꿉니다.
    • COLUMN_NAME_1, COLUMN_NAME_2 등을 기본 키를 만드는 데 사용할 열의 이름으로 바꿉니다.

    ROWID 의사 열로 고유 제약조건 만들기

    Oracle 데이터베이스는 ROWID 의사 열을 사용하여 테이블의 각 행 위치를 저장합니다. 기본 키가 없는 Oracle 테이블을 마이그레이션하려면 대상 PostgreSQL 데이터베이스에 ROWID 열을 추가하면 됩니다. Database Migration Service 는 소스 Oracle ROWID 의사 열의 해당 숫자 값으로 열을 채웁니다.

    열을 추가하고 기본 키로 설정하려면 다음을 실행합니다.

    ALTER TABLE TABLE_NAME ADD COLUMN rowid numeric(33,0) NOT NULL;
    CREATE SEQUENCE TABLE_NAME_rowid_seq INCREMENT BY -1 START WITH -1 OWNED BY TABLE_NAME.rowid;
    ALTER TABLE TABLE_NAME ALTER COLUMN rowid SET DEFAULT nextval('TABLE_NAME_rowid_seq');
    ALTER TABLE TABLE_NAME ADD CONSTRAINT CONSTRAINT_DISPLAY_NAME PRIMARY KEY (rowid);

    다음을 바꿉니다.

    • TABLE_NAME을 열을 추가할 테이블의 이름으로 바꿉니다.
    • CONSTRAINT_DISPLAY_NAMEPRIMARY KEY 제약조건의 식별자로 바꿉니다.

다음 단계