이 문서는 Oracle® 11g/12c 데이터베이스를 PostgreSQL용 Cloud SQL 버전 12로 마이그레이션하는 계획 및 수행과 관련된 핵심 정보와 지침을 제공하는 시리즈의 일부입니다. 이 시리즈에는 소개 설정 부분 외에도 다음 부분이 포함됩니다.
- Oracle 사용자를 PostgreSQL용 Cloud SQL로 마이그레이션: 용어 및 기능
- Oracle 사용자를 PostgreSQL용 Cloud SQL로 마이그레이션: 데이터 유형, 사용자, 테이블(이 문서)
- Oracle 사용자를 PostgreSQL용 Cloud SQL로 마이그레이션: 쿼리, 저장 프로시저, 함수, 트리거
- Oracle 사용자를 PostgreSQL용 Cloud SQL로 마이그레이션: 보안, 작업, 모니터링, 로깅
- Oracle 데이터베이스 사용자 및 스키마를 PostgreSQL용 Cloud SQL로 마이그레이션
데이터 유형
PostgreSQL용 Cloud SQL에서는 Oracle에서 제공하는 데이터 유형과 완전히 동일하거나 유사한 여러 데이터 유형을 제공합니다. 다음 표에는 Oracle 기본 데이터 유형과 해당 PostgreSQL용 Cloud SQL 데이터 유형을 비교한 가장 일반적인 PostgreSQL 데이터 유형이 나와 있습니다. 여기서 데이터 유형이 지원되지 않는 경우 다른 데이터 유형이 나열됩니다.
PostgreSQL용 Cloud SQL 12 기본 데이터 유형
PostgreSQL용 Cloud SQL 데이터 유형 계열 | PostgreSQL용 Cloud SQL 데이터 유형 이름 | 데이터 유형 사양 |
---|---|---|
문자열/문자 | CHAR(n) |
정확히 n 자를 저장합니다. CHARACTER(n) 별칭입니다. |
CHARACTER(n) |
정확히 n 자를 저장합니다. |
|
VARCHAR(n) |
가변 문자 수를 최대 n 자까지 저장합니다. CHARACTER
VARYING(n) 별칭입니다. |
|
CHARACTER VARYING(n) |
가변 문자 수를 최대 n 자까지 저장합니다. |
|
TEXT |
문자 수 상한을 지정할 필요가 없는 VARCHAR 의 특정 변형입니다. 저장할 수 있는 가장 긴 문자 문자열은 1GB입니다(모든 문자열 문자 데이터 유형에 동일). |
|
숫자 | SMALLINT |
최솟값은 -32768이고 최댓값은 32767입니다. |
INTEGER |
최솟값은 -2147483648이고 최댓값은 2147483647입니다. | |
BIGINT |
최솟값은 -2^63이고 최댓값은 2^63-1입니다. | |
REAL |
단일 정밀도 부동 소수점 수(4바이트)입니다. | |
DOUBLE PRECISION |
배정밀도 부동 소수점 수(8바이트)입니다. | |
DECIMAL (p,s) |
전체 자릿수가 p 이고 소수점 자릿수가 s 인 값을 저장할 수 있습니다. |
|
NUMERIC(p,s) |
전체 자릿수가 p 이고 소수점 자릿수가 s 인 값을 저장할 수 있습니다. |
|
SMALLSERIAL |
자동 증분 정수입니다. 최솟값은 1이고 최댓값은 32767입니다. | |
SERIAL |
자동 증분 정수입니다. 최솟값은 1이고 최댓값은 2147483647입니다. | |
BIGSERIAL |
자동 증분 정수입니다. 최솟값은 1이고 최댓값은 2^63-1입니다. | |
금융 | MONEY |
고정 소수부 정밀도의 통화 금액입니다. 최솟값은 -92233720368547758.08이고 최댓값은 +92233720368547758.07입니다. |
날짜 및 시간 | DATE |
- 시간 부분 없이 날짜 부분만 있는 값입니다. - 지원 범위는 4713 BC~5874897 AD로, 해상도는 1일입니다. |
TIMESTAMP (p) |
- 날짜 및 시간 부분이 모두 포함된 값입니다. - 지원되는 범위는 4713 BC~294276 AD입니다. - 해상도는 p 소수부 자리수(초 단위)입니다(지정되지 않은 경우 1마이크로초). |
|
TIMESTAMP (p) with time zone |
- 날짜, 시간, 시간대를 모두 포함하는 값입니다. - 지원되는 범위는 4713 BC~294276 AD입니다. - 해상도는 p 소수부 자리수(초 단위)입니다(지정되지 않은 경우 1마이크로초). |
|
TIME (p) |
- 시간 부분은 있지만 날짜 부분이 없는 값입니다. - 지원되는 범위는 00:00:00~24:00:00입니다. - 해상도는 p 소수부 자리수(초 단위)입니다(지정되지 않은 경우 1마이크로초). |
|
TIME (p) with time zone |
- 시간과 시간대는 있지만 날짜 부분이 없는 값입니다. - 지원되는 범위는 00:00:00~24:00:00입니다. - 해상도는 p 소수부 자리수(초 단위)입니다(지정되지 않은 경우 1마이크로초). |
|
INTERVAL (p) |
- 시간 간격 - 지원되는 범위는 -178000000~178000000입니다. - 해상도는 p 소수부 자리수(초 단위)입니다(지정되지 않은 경우 1마이크로초). |
|
JSON | JSON |
텍스트 JSON 데이터 |
JSONB |
바이너리 JSON 데이터입니다. | |
XML | XML |
XML 데이터입니다. |
기하 |
GEOMETRY |
다음 데이터 모델을 사용할 시기를 지정하는 열 유형입니다. |
POINT |
(x,y) 값입니다. |
|
LINE |
Ax +
By + C = 0 , A , B 가 모두 0이 아닌 (A, B, C) 튜플입니다.또는 다음 형식의 1포인트 및 2포인트:
|
|
LSEG |
선 세그먼트 ((x1,y1),(x2,y2)) 입니다. |
|
BOX |
직사각형 상자 ((x1,y1),(x2,y2)) 입니다. |
|
PATH |
포인트 ((x1,y1),...) 의 시퀀스입니다. |
|
POLYGON |
실제로 폐쇄된 경로로 표시되는 일련의 점입니다. | |
CIRCLE |
(x,y),r) (중심점 및 반경) |
|
논리 | BOOLEAN |
- true, false 또는 null 값을 포함합니다. - yes , true , t , on , 1 과 같은 값을 true로 사용합니다. |
비트/바이너리 데이터 | BIT (n) |
고정 길이 비트 문자열 |
BYTEA |
바이너리 데이터/바이트 배열입니다. | |
네트워크 주소 유형 | CIDER |
IPv4 및 IPv6 네트워크입니다. |
INET |
IPv4 및 IPv6 호스트와 네트워크입니다. | |
MACADDR |
MAC 주소입니다. | |
MACADDR8 |
MAC 주소(EUI-64 형식)입니다. | |
기타 | PG_LSN |
PostgreSQL용 Cloud SQL 로그 시퀀스 번호입니다. |
TSQUERY |
텍스트 검색어 | |
TSVECTOR |
텍스트 검색 문서 | |
TXID_SNAPSHOT |
사용자 수준 트랜잭션 ID 스냅샷 | |
UUID |
범용 고유 식별자 |
Oracle에서 PostgreSQL용 Cloud SQL 데이터 유형 변환
Oracle 데이터 유형 계열 | Oracle 데이터 유형 이름 | Oracle 데이터 유형 사양 | Oracle과 동등한 PostgreSQL용 Cloud SQL | PostgreSQL용 Cloud SQL 해당/대체 |
---|---|---|---|---|
문자열/문자 | CHAR(n) |
최대 크기는 2,000바이트입니다. | 예 | CHAR(n) |
CHARACTER(n) |
최대 크기는 2,000바이트입니다. | 예 | CHARACTER(n) |
|
NCHAR(n) |
최대 크기는 2,000바이트입니다. | 아니요 | CHAR(n) |
|
VARCHAR(n) |
최대 크기는 2,000바이트입니다. | 예 | VARCHAR(n) |
|
NCHAR VARYING(n) |
4,000바이트의 가변 길이 UTF-8 문자열 최대 크기입니다. |
아니요 | CHARACTER VARYING(n) |
|
VARCHAR2(n)
11g |
최대 크기는 4,000바이트입니다(PL/SQL의 경우 최대 크기는 32KB). | 예* | VARCHAR(n) |
|
VARCHAR2(n) |
최대 크기는 32,767바이트 MAX_STRING_SIZE= EXTENDED 입니다. |
예* | VARCHAR(n) |
|
NVARCHAR2(n) |
최대 크기는 4,000바이트입니다. | 아니요 | VARCHAR(n) |
|
LONG |
최대 크기는 2GB입니다. | 예* | TEXT |
|
RAW(n) |
최대 크기는 2,000바이트입니다. | 예* | BYTEA |
|
LONG RAW |
최대 크기는 2GB입니다. | 예* | BYTEA |
|
숫자 | NUMBER |
부동 소수점 수입니다. | 예* | NUMERIC(p,s) |
NUMBER(*) |
부동 소수점 수입니다. | 예* | DOUBLE PRECISION |
|
NUMERIC(p,s) |
가능한 정밀도 범위는 1~38입니다. | 예 | NUMERIC(p,s) |
|
FLOAT(p,s) |
부동 소수점 수입니다. | 예* | DOUBLE PRECISION |
|
DEC(p,s) |
고정 소수점 수입니다. | 예 | DEC(p,s) |
|
DECIMAL(p,s) |
고정 소수점 수입니다. | 예 | DECIMAL(p,s) |
|
INT |
38자릿수 정수입니다. | 예 | INT |
|
INTEGER |
38자릿수 정수입니다. | 예 | INTEGER |
|
SMALLINT |
38자릿수 정수입니다. | 예 | SMALLINT |
|
REAL |
부동 소수점 수입니다. | 예* | DOUBLE PRECISION |
|
DOUBLE PRECISION |
부동 소수점 수입니다. | 예 | DOUBLE PRECISION |
|
날짜 및 시간 | DATE |
날짜 및 시간 데이터(연도, 월, 일, 시간, 분, 초)를 저장합니다. | 예* | TIMESTAMP(0) |
TIMESTAMP(p) |
분할 부분이 포함된 날짜 및 시간입니다. | 예 | TIMESTAMP(p) |
|
TIMESTAMP(p) WITH TIME ZONE |
분할 부분과 시간대가 포함된 날짜 및 시간입니다. | 예 | TIMESTAMP (p) WITH TIME ZONE |
|
INTERVAL YEAR(p) TO MONTH |
날짜 간격입니다. | 예* | INTERVAL YEAR TO MONTH |
|
INTERVAL DAY(p) TO SECOND(s) |
날짜 및 시간 간격입니다. | 예* | INTERVAL DAY TO SECOND(s) |
|
논리 | BOOLEAN |
TRUE , FALSE , NULL 값 데이터베이스 테이블 열에 할당될 수 없습니다. |
예 | BOOLEAN |
XML | XMLTYPE |
XML 데이터입니다. | 아니요 | XML |
LOB | BFILE |
최대 크기가 4GB인 바이너리 파일에 대한 포인터입니다. | 아니요 | VARCHAR(255) |
CLOB |
최대 파일 크기가 4GB인 문자 대형 객체입니다. | 아니요 | TEXT |
|
BLOB |
최대 크기가 4GB인 바이너리 대형 객체입니다. | 아니요 | BYTEA |
|
NCLOB |
최대 파일 크기가 4GB인 가변 길이 유니코드 문자열입니다. | 아니요 | TEXT |
|
ROWID | ROWID |
물리적 행 주소입니다. | 아니요 | CTID |
UROWID(n) |
논리 행 주소의 범용 행 ID입니다. | 아니요 | CTID |
|
공간 | SDO_ GEOMETRY |
공간 객체의 도형 설명입니다. | 예 | Postgres에는 point , line , path , polygon , circle 등 다양한 도형 유형이 있습니다. |
SDO_TOPO_ GEOMETRY |
토폴로지 도형을 설명합니다. | 예 | PostGIS는 널리 사용되는 Postgres 확장 프로그램으로, 여러 가지 토폴로지 유형을 제공합니다. | |
SDO_GEORASTER |
래스터 그리드 또는 이미지 객체가 단일 행에 저장됩니다. | 예 | PostGIS는 널리 사용되는 Postgres 확장 프로그램으로, 래스터 파일을 데이터베이스에 로드하는 도구를 제공합니다. | |
미디어 유형 | ORDDicom |
Digital Imaging and Communications in Medicine(DICOM) 파일 저장 및 관리를 지원합니다. | 예(해결 방법 있음) | Postgres는 대형 객체를 저장할 수 있도록 바이너리 유형 bytea 를 제공합니다. |
ORDDoc |
모든 유형의 미디어 유형의 저장 및 관리를 지원합니다. | 예(해결 방법 있음) | Postgres는 대형 객체를 저장할 수 있도록 바이너리 유형 bytea 를 제공합니다. |
|
ORDImage |
이미지 데이터의 저장 및 관리를 지원합니다. | 예(해결 방법 있음) | Postgres는 대형 객체를 저장할 수 있도록 바이너리 유형 bytea 를 제공합니다. |
|
ORDVideo |
비디오 데이터의 저장 및 관리를 지원합니다. | 해결 방법 | Postgres는 대형 객체를 저장할 수 있도록 바이너리 유형 bytea 를 제공합니다. |
* PostgreSQL용 Cloud SQL의 해당 데이터 유형 대부분은 Oracle과 호환되지만 다른 이름을 사용합니다.
사용자 정의 유형
Oracle은 사용자 정의 유형(UDT)을 PL/SQL을 사용하여 관리되는 OBJECT TYPES
로 표시합니다. 사용자 정의 유형을 사용하면 기본 제공되는 Oracle 데이터 유형 목록을 기준으로 하고 이로부터 확장되는 애플리케이션 전용의 복합 데이터 유형을 사용자가 만들 수 있습니다.
Oracle 사용자 정의 유형 | Oracle 개요 또는 구현 | PostgreSQL용 Cloud SQL 지원 | PostgreSQL용 Cloud SQL 해당 또는 대체 솔루션 |
---|---|---|---|
추상 데이터 유형(ADT) | CREATE TYPE ADT_DEMO AS OBJECT ( |
부분적으로 다른 구문 사용 | PostgreSQL용 Cloud SQL 복합 유형은 속성 이름과 데이터 유형의 목록으로 지정됩니다.
|
VARRAY 유형 | CREATE TYPE VARRAY_DEMO AS VARRAY (5) OF VARCHAR2(25); |
아니요 | 해결 방법으로, PostgreSQL용 Cloud SQL을 사용하여 열을 배열로 정의할 수 있습니다.
|
중첩 테이블 유형 | CREATE TYPE NTT_DEMO AS OBJECT ( |
아니요 | 해결 방법으로, PostgreSQL용 Cloud SQL에서 복합 유형과 배열 열 정의 조합을 사용하여 Oracle의 중첩 테이블 유형과 비슷한 기능을 수행합니다.
|
불완전 유형 | 불완전한 유형은 속성과 메서드가 없는 유형입니다. 다른 유형에서 참조할 수 있습니다. 하지만 사용하기 전에 유형 정의를 제공해야 합니다.
|
아니요 | N/A |
사용자
이 섹션에서는 사용자를 만들고 사용자에게 권한을 할당하고 Oracle 테이블을 PostgreSQL용 Cloud SQL 테이블로 변환해야 하는 이유를 설명합니다.
사용자 만들기 및 권한
Oracle 데이터베이스 사용자 계정(Oracle '사용자'와 '스키마'가 동일)을 사용하여 인증을 수행하고 데이터베이스 세션에 연결할 수 있습니다. 승인 액세스는 특정 데이터베이스 객체/권한에 대한 각 사용자의 개별 수준에서 설정됩니다.
일반적으로 데이터베이스 사용자에는 두 가지 유형이 있습니다.
- 관리자: 데이터베이스 인스턴스, 사용자, 리소스를 관리합니다.
- 사용자 계정: 애플리케이션과 같은 논리적 작업을 수행합니다.
관리자는 데이터베이스 객체에 액세스할 수 있도록 사용자 및 애플리케이션 사용자 계정에 권한을 부여합니다. Oracle 데이터베이스 권한은 특정 작업(예: 세션 만들기/연결) 또는 특정 데이터베이스 객체(예: 특정 테이블의 SELECT
도는 특정 저장 프로시저의 EXECUTE
)에 대해 사용자에게 부여됩니다.
Oracle에는 사용자와 역할의 개념이 있습니다. 사용자는 데이터베이스로 인증하는 데 사용되고 역할은 전체 권한 부여가 가능한 권한 그룹을 제공합니다.
PostgreSQL용 Cloud SQL에서 사용자와 역할은 동일합니다. PostgreSQL용 Cloud SQL에서 사용자는 connect
권한이 있는 역할입니다. CREATE USER
또는 CREATE ROLE
문 중 하나를 사용하여 데이터베이스 사용자를 만들 수 있습니다. Oracle과 달리 PostgreSQL용 Cloud SQL에서 스키마와 사용자는 별도로 생성됩니다. 스키마는 객체 컬렉션(예: 테이블, 데이터 유형, 함수 등)이며 사용자가 소유합니다.
Oracle 사용자 만들기 | |
---|---|
CREATE USER user_name IDENTIFIED BY password; |
|
PostgreSQL용 Cloud SQL 사용자 만들기 | |
CREATE USER user WITH PASSWORD 'password';
또는
|
변환 고려사항
- 사용자는 루트 수준에서 정의되며 동일한 PostgreSQL용 Cloud SQL 클러스터에 포함된 모든 데이터베이스에 유효합니다. Oracle 12c의 '일반 사용자'와 유사합니다.
- PostgreSQL용 Cloud SQL
CREATE USER
구문은 Oracle과 다르며 있는 그대로 마이그레이션할 수 없습니다. PostgreSQL용 Cloud SQL의CREATE USER
는CREATE ROLE
의 별칭으로,LOGIN
옵션이 기본적으로 사용 설정된다는 점이 다릅니다.
테이블
Oracle 테이블은 열 데이터 유형, 테이블 제약조건, 색인, 파티션, Oracle 테이블 고유 기능 등과 같은 여러 요소로부터 생성됩니다. 성공적으로 PostgreSQL용 Cloud SQL 데이터베이스 테이블로 마이그레이션하려면 모든 Oracle 테이블 요소를 PostgreSQL용 Cloud SQL 테이블로 변환해야 합니다. 일부 요소는 수정 사항이 없거나 사소한 수정 사항만 포함된 상태로 지원되며, 다른 요소는 완전히 수정되어야 합니다.
Oracle 테이블을 PostgreSQL용 Cloud SQL 테이블로 변환하는 것은 중요도가 높은 핵심 단계이고 성능과 데이터 크기에 추가적인 영향을 주므로 마이그레이션 측면에서 볼 때 PL/SQL을 PostgreSQL용 Cloud SQL로 변환하기 위해서는 더 많은 노력이 필요합니다.
다음은 Oracle 테이블, PostgreSQL용 Cloud SQL 테이블과 관련 기능 간의 주요 차이점입니다. 이 시리즈의 남은 부분에서 이러한 차이점을 설명합니다.
- 테이블 구문 만들기
- 테이블 및 색인 메타데이터
- 제약조건 지원
- 데이터 유형 지원 및 제한 사항
- 색인
- 파티션 및 파티션 관리
- 테이블 및 색인 유지 관리
- 임시 테이블
- 뷰
- 표시 가능 열 및 표시 불가능 열(Oracle 12c)
- 테이블 및 열 문자 집합
다음 단계
- PostgreSQL용 Cloud SQL 사용자 계정을 자세히 알아봅니다.
- Google Cloud에 대한 참조 아키텍처, 다이어그램, 튜토리얼, 권장사항을 살펴봅니다. Cloud 아키텍처 센터 살펴보기