Oracle 사용자를 MySQL용 Cloud SQL로 마이그레이션: 용어 및 기능

이 문서는 2세대 인스턴스인 MySQL용 Cloud SQL 버전 5.7로의 Oracle® 11g/12c 데이터베이스 마이그레이션 계획 및 수행과 관련된 주요 정보 및 안내를 제공하는 시리즈 중 하나입니다. 이 시리즈는 다음 문서로 구성되어 있습니다.

용어

이 섹션에서는 Oracle과 MySQL용 Cloud SQL 간 데이터베이스 용어의 유사점과 차이점을 설명합니다. 또한 각 데이터베이스 플랫폼의 핵심 요소를 검토하고 비교합니다. 아키텍처 차이에 따라 Oracle 버전 11g와 12c를 구분하여 비교했습니다. 예를 들어 Oracle 12c에는 멀티 테넌트 기능이 있습니다. 여기에서 참조하는 MySQL용 Cloud SQL 버전은 5.7.x입니다.

Oracle 11g와 MySQL용 Cloud SQL의 용어 차이점

Oracle 11g 설명 MySQL용 Cloud SQL 주요 차이점
인스턴스 하나의 Oracle 11g 인스턴스는 하나의 데이터베이스만 보유할 수 있습니다. 인스턴스 하나의 MySQL 인스턴스는 여러 데이터베이스를 보유할 수 있습니다.
데이터베이스 하나의 데이터베이스는 단일 인스턴스에 해당합니다. 데이터베이스 이름은 인스턴스 이름과 동일합니다. 데이터베이스 여러 데이터베이스 또는 단일 데이터베이스가 여러 애플리케이션을 제공합니다.
스키마 스키마와 사용자는 데이터베이스 객체의 소유자로 간주되므로 동일한 의미로 사용됩니다. 스키마를 지정하거나 스키마에 할당하지 않고 사용자를 만들 수 있습니다. 스키마 스키마는 데이터베이스라고도 하며, 데이터베이스 객체는 특정 스키마/데이터베이스 아래에 생성됩니다.
사용자 스키마와 사용자는 데이터베이스 객체의 소유자로 간주되므로 동일한 의미로 사용됩니다(예: 인스턴스 → 데이터베이스 → 스키마/사용자 → 데이터베이스 객체). 사용자 특정 스키마/데이터베이스의 데이터베이스 객체를 연결하거나 수정할 수 있는 특정 권한을 가진 데이터베이스 사용자입니다(예: 인스턴스 → 데이터베이스/스키마 → 데이터베이스 객체).
역할 그룹으로 연결할 수 있고 데이터베이스 사용자에게 할당할 수 있는 데이터베이스 권한 집합으로 정의됩니다. MySQL 권한 MySQL 5.7은 역할 관리를 지원하지 않습니다. GRANT 절을 사용하여 사용자가 다른 수준(읽기/쓰기 등)에서 데이터베이스 객체에 대한 권한을 갖도록 권한을 구성할 수 있습니다.
관리자/시스템 사용자 최고 수준의 액세스 권한을 갖는 Oracle 관리자입니다.

SYS
SYSTEM
수퍼유저 배포된 MySQL용 Cloud SQL에는 root@'%' 사용자(모든 호스트에서 연결 가능) 및 mysql.sys(localhost에서만 연결 가능)라는 추가 사용자가 있습니다.
사전/메타데이터 Oracle은 다음 메타데이터를 사용합니다.

USER_TableName
ALL_TableName
DBA_TableName
사전/메타데이터 MySQL은 사전/메타데이터에 여러 데이터베이스/스키마를 사용합니다.

MYSQL
INFORMATION_SCHEMA
PERFORMANCE_SCHEMA
SYS
이러한 각 데이터베이스는 시스템 데이터베이스이기도 하며 MySQL용 Cloud SQL 배포마다 생성됩니다.
시스템 동적 뷰 Oracle 동적 뷰입니다.

V$ViewName
시스템 동적 뷰 MySQL 동적 뷰는 여러 시스템 데이터베이스에서 찾을 수 있습니다.

INFORMATION_SCHEMA
PERFORMANCE_SCHEMA
SYS
테이블스페이스 Oracle 데이터베이스의 기본 논리 스토리지 구조로, 각 테이블스페이스는 하나 이상의 데이터 파일을 보유할 수 있습니다. 테이블스페이스 Oracle과 마찬가지로 MySQL 테이블스페이스는 논리 단위이지만, 여러 데이터 파일(여러 테이블의 데이터 보유)이 있을 수 있는 Oracle 테이블스페이스와 달리 하나의 테이블만 나타냅니다.

MySQL은 할당된 데이터 파일로 새 테이블스페이스를 만든 다음 새로 생성된 테이블스페이스에 연결된 새 테이블을 만듭니다. 크기 및 한도와 같은 테이블스페이스 구성 설정은 테이블스페이스 생성 중에 설정되는 것이 아니라 데이터베이스 매개변수를 사용하여 설정됩니다.
데이터 파일 데이터를 보유하고 있는 Oracle 데이터베이스의 물리적 요소로 특정 테이블스페이스로 정의됩니다.

단일 데이터 파일은 초기 크기 및 최대 크기로 정의되며 여러 테이블의 데이터를 보유할 수 있습니다.

Oracle 데이터 파일은 .dbf 서픽스를 사용하지만 필수는 아닙니다.
데이터 파일 MySQL용 Cloud SQL은 값이 'ON'(기본값)인 innodb_file_per_table 매개변수를 사용합니다. 이 구성은 각 테이블 및 전용 테이블스페이스에 새 데이터 파일을 생성합니다.

MySQL 데이터 파일은 .ibd(데이터) 및 .frm(메타데이터) 파일을 사용합니다.
시스템 테이블스페이스 전체 Oracle 데이터베이스의 데이터 사전 테이블 및 뷰 객체를 포함합니다. 시스템 테이블스페이스 Oracle과 동일하며, 사전/메타데이터 테이블을 포함합니다. ibdata1 데이터 파일에 연결된 innodb_system 테이블스페이스에 저장됩니다.
임시 테이블스페이스 세션 기간 동안 유효한 스키마 객체를 포함합니다 또한 서버 메모리에 맞지 않는 작업은 실행하지 않습니다. 임시 테이블스페이스 용도는 Oracle과 동일하지만, ibtmp1 데이터 파일에 연결된 MySQL innodb_temporary 테이블스페이스에 저장됩니다.
테이블스페이스
실행취소
자동 실행취소 관리 모드(기본값)에서 데이터베이스를 실행할 때 Oracle에서 롤백 작업을 관리하는 데 사용하는 특수 유형의 시스템 영구 테이블스페이스입니다. 테이블스페이스 실행취소 Oracle과 마찬가지로 MySQL 실행취소 테이블스페이스에는 롤백을 위한 실행취소 로그가 포함됩니다. 기본적으로 이 옵션은 OFF로 설정되며 향후 MySQL 출시 버전에서 지원 중단됩니다.
ASM Oracle Automatic Storage Management는 고성능의 통합 데이터베이스 파일 시스템 및 디스크 관리자이며, ASM으로 구성된 Oracle 데이터베이스에서 자동으로 실행됩니다. 지원되지 않음 MySQL은 다양한 데이터 처리 구현을 설명하는 데 스토리지 엔진이라는 용어를 사용하며, Oracle ASM은 지원하지 않습니다. MySQL용 Cloud SQL은 스토리지 자동 증가, 성능, 확장성 등 스토리지 자동화를 제공하는 여러 기능을 지원합니다.
테이블/뷰 사용자가 만든 기본 데이터베이스 객체입니다. 테이블/뷰 Oracle과 동일합니다.
구체화된 뷰 특정 SQL 문으로 정의되며 특정 구성에 따라 수동 또는 자동으로 새로고침할 수 있습니다. MySQL에서 지원되지 않음 대안으로 Oracle의 구체화된 뷰 대신 트리거/뷰를 사용할 수 있습니다.
시퀀스 Oracle 고유 값 생성기입니다. 자동 증가 MySQL은 Oracle 시퀀스를 지원하지 않으며, 자동 시퀀스 생성 기능의 대안으로 AUTO_INCREMENT를 사용합니다.
동의어 다른 데이터베이스 객체의 대체 식별자 역할을 하는 Oracle 데이터베이스 객체입니다. 지원되지 않음 MySQL은 Oracle 동의어를 지원하지 않습니다. 이 경우 적절한 권한을 설정하여 뷰를 사용할 수 있습니다.
파티션 나누기 Oracle은 대규모 테이블을 관리 가능한 작은 조각으로 분할하기 위한 여러 파티션 나누기 솔루션을 제공합니다. 파티션 나누기 MySQL은 성능 향상을 위해 훨씬 더 제한적인 파티션 나누기를 지원하는 동시에 Oracle 파티션과 같은 데이터 관리 및 유지보수 작업을 그대로 유지합니다.
플래시백 데이터베이스 Oracle에서 독점 제공하는 기능으로, Oracle 데이터베이스를 과거의 특정 시점으로 초기화하여 실수로 수정하거나 손상된 데이터를 쿼리하고 복원하는 데 사용할 수 있습니다. 지원되지 않음 대안으로 Cloud SQL 백업 및 point-in-time recovery를 사용하여 데이터베이스를 이전 상태로 복원할 수 있습니다(예: 테이블 삭제 전 복원).
sqlplus 데이터베이스 인스턴스를 쿼리하고 관리하는 데 사용할 수 있는 Oracle 명령줄 인터페이스입니다. mysql 쿼리 및 관리하는 데 사용할 수 있는 MySQL 동일 명령줄 인터페이스입니다. 적절한 권한이 있는 모든 클라이언트에서 Cloud SQL에 연결할 수 있습니다.
PL/SQL Oracle은 절차적 언어를 ANSI SQL로 확장했습니다. MySQL MySQL에는 구문과 구현이 서로 다른 자체의 확장된 절차적 언어가 있지만 이 확장 언어에 대한 이름을 추가로 지정하지는 않습니다.
패키지 및 패키지 본문 저장 프로시져와 함수를 동일한 논리 참조로 그룹화하는 Oracle 전용 기능입니다. 지원되지 않음 MySQL은 저장 프로시져와 함수를 그룹 할당을 사용하는 단일 객체로 지원합니다.
저장 프로시져 및 함수 PL/SQL을 사용하여 코드 기능을 구현합니다. 저장 프로시져 및 함수 저장 프로시져와 함수는 독점 제공되는 절차적 언어 구현을 통해 MySQL에서 지원됩니다.
트리거 테이블에서 DML 구현을 제어하는 데 사용되는 Oracle 객체입니다. 트리거 Oracle과 동일합니다.
PFILE/SPFILE Oracle 인스턴스 및 데이터베이스 수준 매개변수는 SPFILE(이전 버전에서는 PFILE)라는 바이너리 파일에 보관되며, 이 파일은 매개변수를 수동으로 설정하기 위한 텍스트 파일로 사용할 수 있습니다. MySQL용 Cloud SQL 데이터베이스 플래그 데이터베이스 플래그 유틸리티를 통해 MySQL용 Cloud SQL 매개변수를 설정하거나 수정할 수 있습니다. MySQL 클라이언트 명령줄 인터페이스(예: mysql> SET GLOBAL ...)에서는 MySQL용 Cloud SQL의 데이터베이스 매개변수를 변경할 수 없습니다. 이러한 매개변수를 변경하려면 데이터베이스 플래그 유틸리티만 사용해야 합니다.
SGA/PGA/AMM 데이터베이스 인스턴스에 할당되는 메모리를 제어하는 Oracle 메모리 매개변수입니다. INNODB_BUFFER_POOL_SIZE MySQL에는 자체 메모리 매개변수가 있습니다. 이에 상응하는 매개변수는 INNODB_BUFFER_POOL_SIZE일 수 있습니다. MySQL용 Cloud SQL에서 이 매개변수는 선택한 인스턴스 유형에 따라 사전 정의되고 값을 적절하게 변경합니다.
결과 캐시 세션 수준에서 데이터베이스 매개변수와 힌트를 사용하여 관리할 수 있는 버퍼 캐시에서 행을 검색하여 SQL I/O 작업을 줄입니다. 쿼리 캐시 기본 용도는 Oracle 결과 캐시와 동일하며 데이터베이스 수준과 세션 수준에서 관리할 수 있습니다.
데이터베이스 힌트 성능을 향상시키기 위해 최적화 도구의 동작에 영향을 주는 SQL 문에 대한 영향을 제어합니다. Oracle에는 50가지가 넘는 데이터베이스 힌트가 있습니다. 데이터베이스 힌트 Oracle과 비교할 때 MySQL은 제한된 수의 데이터베이스 힌트를 지원합니다(최적화 도구 힌트 및 색인 힌트). MySQL은 다른 데이터베이스 힌트, 구문, 이름 지정을 사용합니다.
RMAN Oracle 복구 관리자 유틸리티입니다. 재해 복구 등 여러 시나리오를 지원하기 위해 확장 기능으로 데이터베이스 백업을 수행하는 데 사용됩니다(클로닝 등). MySQL용 Cloud SQL 백업 MySQL용 Cloud SQL은 전체 백업을 적용하는 2가지 방법 즉, 주문형 백업 및 자동 백업을 제공합니다.
Data Pump(EXPDP/IMPDP) 내보내기/가져오기, 데이터베이스 백업(스키마 또는 객체 수준), 스키마 메타데이터, 스키마 SQL 파일 생성 등 다양한 기능에 사용할 수 있는 Oracle 덤프 생성 유틸리티입니다.

mysqldump/mysqlimport
클라이언트로 원격 연결되고 덤프 파일(SQL)을 생성할 수 있는 MySQL 덤프(내보내기) 유틸리티입니다. 나중에 덤프 파일을 압축하여 Cloud Storage로 옮길 수 있습니다. mysqldump 유틸리티는 내보내기 단계 전용입니다.
SQL*Loader 텍스트 파일, CSV 파일 등의 외부 파일에서 데이터를 업로드할 수 있는 도구입니다.

mysqlimport/
LOAD FILE INFILE
mysqlimport 유틸리티를 사용하면 텍스트 또는 CSV 파일(Oracle에서는 추가 파일 형식 지원)을 해당하는 구조의 데이터베이스 테이블에 로드할 수 있습니다.
데이터 가드 대기 인스턴스를 사용하는 Oracle 재해 복구 솔루션으로, 사용자가 대기 인스턴스에서 '읽기' 작업을 수행할 수 있게 해줍니다. MySQL용 Cloud SQL 고가용성 및 복제 재해 복구 또는 고가용성을 달성하기 위해 MySQL용 Cloud SQL은 읽기 복제본을 사용하여 장애 조치 복제본 아키텍처와 읽기 전용 작업(읽기/쓰기 분리)을 제공합니다.
액티브 데이터 가드/골든 게이트 대기(DR), 읽기 전용 인스턴스, 양방향 복제(멀티 소스), 데이터 웨어하우징 등 여러 가지 용도로 사용할 수 있는 Oracle의 기본 복제 솔루션입니다. MySQL용 Cloud SQL 읽기 복제본 읽기/쓰기 분리로 클러스터링을 구현하는 MySQL용 Cloud SQL 읽기 복제본입니다. 현재 골든 게이트 양방향 복제 또는 이기종 복제와 같은 멀티 소스 구성은 지원되지 않습니다.
RAC Oracle Real Application Cluster를 나타냅니다. Oracle에서 독점 제공하는 클러스터링 솔루션으로, 단일 스토리지 단위로 여러 데이터베이스 인스턴스를 배포하여 고가용성을 제공합니다. 지원되지 않음 Google Cloud SQL에서는 아직 멀티 소스 아키텍처를 지원하지 않습니다. 클러스터링 아키텍처에서 읽기/쓰기 분리와 고가용성을 얻으려면 Cloud SQL 고가용성 및 읽기 복제본을 사용합니다.
Grid/Cloud Control(OEM) 데이터베이스 및 기타 관련 서비스를 웹 앱 형식으로 관리하고 모니터링하는 Oracle 소프트웨어입니다. 이 도구는 실시간 데이터베이스 분석을 통해 높은 워크로드를 파악하는 데 유용합니다. MySQL용 Cloud SQL 콘솔, Cloud Monitoring MySQL용 Cloud SQL을 사용하여 시간 및 리소스 기반 그래프의 세부정보 등을 모니터링합니다. 또한 Cloud Monitoring을 사용하여 고급 모니터링 기능에 관한 특정 MySQL 모니터링 측정 항목 및 로그 분석을 보유합니다.
REDO 로그 데이터의 모든 변경사항을 저장하는 2개 이상의 사전 할당되고 정의된 파일로 구성된 Oracle 트랜잭션 로그입니다. redo 로그는 인스턴스가 실패할 경우 데이터를 보호하기 위한 용도로 사용됩니다. REDO 로그 MySQL에도 redo 로그가 있으며, 이 로그는 장애 복구 도중 불완전한 트랜잭션의 redo 로그 메커니즘으로 작성된 데이터를 수정하는 데 사용됩니다.
보관처리 로그 보관처리 로그는 백업 및 복제 작업 등을 지원합니다. Oracle은 각 redo 로그 전환 작업 후 보관처리 로그(사용 설정된 경우)에 씁니다. binlog 트랜잭션 로그 보관의 MySQL 구현으로, 주로 복제 용도로 사용됩니다. Cloud SQL에 기본적으로 사용 설정되어 있습니다.
제어 파일 Oracle 제어 파일에는 데이터 파일, redo 로그 이름, 위치, 현재 로그 시퀀스 번호, 인스턴스 체크포인트 정보 등 데이터베이스에 대한 정보가 포함됩니다. MySQL MySQL 아키텍처에는 Oracle 구현과 유사한 제어 파일이 없습니다. 이는 현재 바이너리 로그 위치를 확인하기 위해 MySQL 매개변수와 SHOW MASTER STATUS 명령어를 사용하여 제어됩니다.
SCN Oracle SCN(System Change Number)은 ACID 트랜잭션 모델을 충족하기 위해 모든 Oracle 데이터베이스 구성요소의 데이터 일관성을 유지하는 기본 방법입니다. 로그 시퀀스 번호 데이터베이스 일관성을 위해 MySQL 구현은 LSN(로그 시퀀스 번호)을 사용합니다.
AWR Oracle AWR(Automatic Workload Repository)은 Oracle 데이터베이스 인스턴스 성능에 대한 세부정보를 제공하는 상세 보고서이며 성능 진단을 위한 DBA 도구로 간주됩니다.

performance_schema
MySQL에는 Oracle AWR에 해당하는 보고서가 없으며, MySQL은 performance_schema에서 수집한 성능 데이터를 수집합니다. 대안으로 MySQL Workbench 성능 대시보드를 사용할 수 있습니다.

DBMS_SCHEDULER
사전 정의된 작업을 설정하고 시간을 지정하는 데 사용되는 Oracle 유틸리티입니다.

EVENT_SCHEDULER
MySQL 데이터베이스 내부 스케줄러 기능입니다. 기본적으로 이 기능은 OFF로 설정됩니다.
투명 데이터 암호화 디스크에 저장된 데이터를 저장 데이터 보호로 암호화합니다. Cloud SQL 고급 암호화 표준 MySQL용 Cloud SQL은 전송 중 데이터는 물론 저장 데이터의 보안에 256비트 고급 암호화 표준(AES-256)을 사용합니다.
고급 압축 데이터베이스 스토리지 사용 공간을 늘리고, 스토리지 비용을 줄이고, 데이터베이스 성능을 개선하기 위해 Oracle은 데이터(테이블/색인) 고급 압축 기능을 제공합니다. InnoDB 테이블 압축 MySQL은 ROW_FORMAT 매개변수를 COMPRESSED로 설정한 후 테이블을 만들어 테이블 압축을 제공합니다. 색인 압축에 대해 자세히 알아보세요.
SQL Developer SQL 및 PL/SQL 문을 관리하고 실행하기 위한 Oracle의 무료 SQL GUI입니다(MySQL에서도 사용 가능). MySQL Workbench SQL 및 MySQL 코드 문을 관리하고 실행하기 위한 MySQL의 무료 SQL GUI입니다.
알림 로그 일반적인 데이터베이스 작업 및 오류에 대한 Oracle 기본 로그입니다. MySQL 오류 로그 Cloud Logging 로그 뷰어에서 MySQL 오류 로그를 볼 수 있습니다.
DUAL 테이블 주로 SYSDATE 또는 USER와 같은 유사 열 값을 검색하기 위한 Oracle 특수 테이블입니다. DUAL 테이블 MySQL을 사용하면 어떤 테이블의 데이터에도 의존하지 않는 SQL 문에서 DUAL를 테이블로 지정할 수 있습니다.
외부 테이블 Oracle은 사용자가 데이터베이스 외부의 파일에 소스 데이터가 있는 외부 테이블을 만들도록 허용합니다. 지원되지 않음 이에 직접 상응하는 항목이 없습니다.
리스너 수신 데이터베이스 연결을 리슨하는 작업과 관련된 Oracle 네트워크 프로세스입니다. Cloud SQL 승인 네트워크 MySQL은 Cloud SQL 승인 네트워크 구성 페이지에서 허용된 원격 소스의 연결을 수락합니다.
TNSNAMES 연결 별칭을 사용하여 연결을 설정하기 위한 데이터베이스 주소를 정의하는 Oracle 네트워크 구성 파일입니다. 존재하지 않음 MySQL은 Cloud SQL 인스턴스 연결 이름 또는 비공개/공개 IP 주소를 사용한 외부 연결을 수락합니다. Cloud SQL 프록시는 특정 IP 주소를 허용하거나 SSL을 구성하지 않고도 MySQL용 Cloud SQL(2세대 인스턴스)에 연결하기 위한 추가 보안 액세스 방법입니다.
인스턴스 기본 포트 1521 인스턴스 기본 포트 3306
데이터베이스 링크 로컬/원격 데이터베이스 객체와 상호작용하는 데 사용할 수 있는 Oracle 스키마 객체입니다. 지원되지 않음 대안으로 애플리케이션 코드를 사용하여 연결하거나 원격 데이터베이스에서 데이터를 검색할 수 있습니다.

Oracle 12c와 MySQL용 Cloud SQL의 용어 차이점

Oracle 12c 설명 MySQL용 Cloud SQL 주요 차이점
인스턴스 하나의 Oracle 인스턴스에 하나의 데이터베이스만 보유할 수 있는 Oracle 11g와 달리, Oracle 12c 인스턴스에는 여러 데이터베이스를 플러그인 가능한 데이터베이스(PDB)로 보유할 수 있는 멀티 테넌트 기능이 도입되었습니다. 인스턴스 MySQL용 Cloud SQL은 여러 서비스와 애플리케이션을 제공하는 다양한 이름의 데이터베이스를 보유할 수 있습니다.
CDB 멀티 테넌트 컨테이너 데이터베이스(CDB)는 하나 이상의 PDB를 지원할 수 있으며, 역할과 같이 모든 PDB에 영향을 주는 CDB 전역 객체를 만들 수 있습니다. MySQL 인스턴스 MySQL 인스턴스는 Oracle CDB와 비슷합니다. 둘 다 PDB에 시스템 레이어를 제공합니다.
PDB PDB(플러그인 가능한 데이터베이스)는 서비스와 애플리케이션을 서로 격리하는 데 사용되고 포팅 가능한 스키마 모음으로 사용할 수 있습니다. MySQL 데이터베이스/스키마 MySQL 데이터베이스는 다수의 데이터베이스 사용자는 물론 여러 서비스 및 애플리케이션을 지원할 수 있습니다.
세션 시퀀스 Oracle 12c부터는 세션 수준(세션 내에서만 고유한 값 반환) 또는 전역 수준(예: 임시 테이블 사용)에서 시퀀스를 만들 수 있습니다. 자동
증가
MySQL에서는 시퀀스가 지원되지 않지만, 사용자는 대안으로 AUTO_INCREMENT 열 속성을 사용할 수 있습니다.
ID 열 Oracle 12c IDENTITY 유형은 수동으로 별도의 시퀀스 객체를 만들지 않고도 시퀀스를 생성하고 테이블 열에 연결합니다. 자동 증가 AUTO_INCREMENT 열 속성을 사용하여 Oracle 12c ID 열과 동일한 기능을 시뮬레이션합니다(자동 시퀀스 생성 기능의 대안).
샤딩 Oracle 샤딩은 하나의 Oracle 데이터베이스를 여러 개의 작은 데이터베이스(샤드)로 분할하여 OLTP 환경의 확장성, 가용성, 지리적 분산을 지원하는 솔루션입니다. 지원되지 않음(기능) MySQL에는 이에 상응하는 샤딩 기능이 없습니다. 샤딩은 지원 애플리케이션 레이어와 함께 MySQL(데이터 플랫폼)을 사용하여 구현할 수 있습니다.
인메모리 데이터베이스 Oracle은 OLTP 및 혼합된 워크로드의 데이터베이스 성능을 개선할 수 있는 기능 모음을 제공합니다. 지원되지 않음 MySQL에는 이에 상응하는 기능이 없습니다. 대안으로 Memorystore를 사용할 수 있습니다.
수정 Oracle의 고급 보안 기능인 수정을 통해 열을 마스킹하면 사용자 및 애플리케이션이 민감한 데이터를 표시하지 않도록 할 수 있습니다. 지원되지 않음 MySQL에는 이에 상응하는 기능이 없습니다.

기능

Oracle 11g/12c 및 MySQL용 Cloud SQL 데이터베이스는 서로 다른 아키텍처(인프라 및 확장된 절차적 언어)에서 작동하지만 관계형 데이터베이스의 동일한 기본 요소를 공유합니다. 데이터베이스 객체, 멀티 사용자 동시 실행 워크로드, 트랜잭션(ACID와 호환)을 지원합니다. 또한 비즈니스 요구에 따라 여러 격리 수준을 지원하는 잠금 경합을 관리하고, 온라인 트랜잭션 처리(OLTP) 작업 및 온라인 분석 처리(OLAP)를 위한 관계형 데이터 저장소로 지속적인 애플리케이션 요구사항을 제공합니다.

다음 섹션에서는 Oracle과 MySQL용 Cloud SQL 간의 주요 기능 차이를 간략하게 설명합니다. 필요에 따라 자세한 기술 비교 결과가 포함되는 경우도 있습니다.

기존 데이터베이스 만들기 및 보기

Oracle 11g/12c MySQL용 Cloud SQL 5.7
일반적으로 Oracle Database Creation Assistant(DBCA) 유틸리티를 사용하여 데이터베이스를 만들고 기존 데이터베이스를 봅니다. 수동으로 생성된 데이터베이스 또는 인스턴스를 사용하려면 추가 매개변수를 지정해야 합니다.

SQL> CREATE DATABASE ORADB
     USER SYS IDENTIFIED BY password
     USER SYSTEM IDENTIFIED BY password
     EXTENT MANAGEMENT LOCAL
     DEFAULT TEMPORARY TABLESPACE temp
     UNDO TABLESPACE undotbs1
     DEFAULT TABLESPACE users;
이 예시와 같이 CREATE DATABASE Name; 형식의 문을 사용합니다.

mysql> CREATE DATABASE MYSQLDB;
Oracle 12c MySQL용 Cloud SQL 5.7
Oracle 12c에서는 컨테이너 데이터베이스(CDB) 템플릿에서 또는 기존 PDB에서 PDB를 클론하여 시드에서 PDB를 만들 수 있습니다. 여러 매개변수를 사용합니다.


SQL> CREATE PLUGGABLE DATABASE PDB
     ADMIN USER usr IDENTIFIED BY passwd
     ROLES = (dba)
     DEFAULT TABLESPACE sales
     DATAFILE '/disk1/ora/dbs/db/db.dbf'
     SIZE 250M AUTOEXTEND ON
     FILE_NAME_CONVERT =
     ('/disk1/oracle/dbs/pdbseed/',
      '/disk1/oracle/dbs/salespdb/')
      STORAGE (MAXSIZE 2G)
      PATH_PREFIX =
      '/disk1/oracle/dbs/salespdb/';
이 예시와 같이 CREATE DATABASE Name; 형식의 문을 사용합니다.

mysql> CREATE DATABASE MYSQLDB;
모든 PDB를 나열합니다.

SQL> SHOW is PDBS;
모든 기존 데이터베이스를 나열합니다.

mysql> SHOW DATABASES;
다른 PDB에 연결합니다.

SQL> ALTER SESSION SET CONTAINER=pdb;
다른 데이터베이스에 연결합니다.

mysql> use databaseName;
또는

mysql> \u databaseName;
특정 PDB를 열거나 닫습니다(열기/읽기 전용).

SQL> ALTER PLUGGABLE DATABASE pdb CLOSE;
단일 데이터베이스에서는 지원되지 않습니다.

모든 데이터베이스는 동일한 MySQL용 Cloud SQL 인스턴스에 있습니다. 따라서 모든 데이터베이스가 상위이거나 하위가 됩니다.

Cloud SQL 콘솔을 통한 데이터베이스 관리

  • Cloud Console에서 스토리지 > SQL > 인스턴스 > 데이터베이스 > 보기/만들기로 이동합니다.

    MySQL 데이터베이스를 만들거나 확인하기 위한 Console 페이지

시스템 데이터베이스 및 스키마

Oracle 데이터베이스 인스턴스는 데이터베이스 메타데이터 객체의 소유자 역할이 있는 특정 시스템 스키마(예: SYS/SYSTEM)를 가져옵니다.

반면 MySQL에는 Oracle 스키마와 달리 메타데이터 레이어를 제공하는 몇 가지 시스템 데이터베이스가 있습니다. 데이터베이스 이름은 대소문자를 구분합니다.

  • Mysql

    mysql 시스템 데이터베이스에는 다음과 같이 MySQL 서버가 실행되는 데 필요한 정보가 저장됩니다.

    • 시스템 권한 테이블
    • 객체 정보 테이블
    • 로그 시스템 테이블
    • 복제 시스템 테이블
    • 최적화 도구 시스템 테이블
    • 시간대 시스템 테이블
  • INFORMATION_SCHEMA

    INFORMATION_SCHEMA는 기본 데이터베이스 데이터 사전 및 시스템 카탈로그 역할을 합니다. 데이터베이스 또는 테이블의 이름, 열 데이터 유형, 액세스 권한 등 MySQL 서버에 대한 내부 데이터베이스 정보인 데이터베이스 메타데이터에 대한 액세스를 제공합니다.

  • performance_schema

    MySQL 인스턴스에 대한 통계 정보를 수집하는 시스템 데이터베이스입니다. performance_schema 시스템 데이터베이스에는 매우 세부적인 수준에서의 서버 실행 모니터링을 위한 측정항목이 있습니다. 이 스키마는 런타임 시 서버 내부 실행을 검사하며, 데이터베이스 성능 문제를 분석하기 위한 기본 소스 역할을 할 수 있습니다.

    performance_schema는 기본적으로 MySQL용 Cloud SQL을 사용하여 사용 설정되지 않습니다. 스키마를 사용 설정하려면 gcloud 명령줄 도구를 사용하세요.

    gcloud sql instances patch INSTANCE_NAME --database-flags performance_schema=on
    

    이 구성을 완료하려면 인스턴스를 재부팅해야 합니다. Cloud Console에서 MySQL용 Cloud SQL 데이터베이스 플래그 페이지를 사용하여 --database-flags 매개변수를 수정할 수 없습니다.

  • sys

    sys 스키마는 MySQL 버전 5.5.7부터 지원되며 주로 performance_schema 시스템 테이블에 뷰를 보관합니다. 이 스키마는 performance_schema 데이터를 더 쉽게 이해할 수 있는 형식으로 요약하는 뷰의 보다 읽기 쉬운 집합으로 제공합니다. 또한 sys 스키마에는 performance_schema 구성 및 진단 보고서 생성과 같은 작업을 수행하기 위한 몇 가지 저장 프로시져와 함수가 있습니다.

    sys 스키마는 performance_schema가 사용 설정된 경우에만 정보를 표시합니다.

메타데이터 및 시스템 동적 뷰 보기

이 섹션에서는 Oracle에서 사용되는 가장 일반적인 메타데이터 테이블 및 시스템 동적 뷰와 MySQL용 Cloud SQL 버전 5.7의 데이터베이스 객체를 간략하게 설명합니다.

Oracle은 수백 개의 시스템 메타데이터 테이블과 뷰를 제공하는 반면 MySQL에는 수십 개 정도만 있습니다. 각 사례에 대해 특정 용도로 사용되는 데이터베이스 객체가 2개 이상 있을 수 있습니다.

Oracle은 여러 수준의 메타데이터 객체를 제공하고 각 객체에는 서로 다른 권한이 필요합니다.

  • USER_TableName: 사용자가 볼 수 있습니다.
  • ALL_TableName: 모든 사용자가 볼 수 있습니다.
  • DBA_TableName: SYSSYSTEM과 같은 DBA 권한이 있는 사용자만 볼 수 있습니다.

Oracle은 동적 성능 뷰에 V$GV$ 프리픽스를 사용합니다. MySQL 사용자가 시스템 메타데이터 테이블 또는 뷰를 볼 수 있으려면 시스템 객체에 대한 특정 권한이 있어야 합니다. 보안에 대한 자세한 내용은 보안 섹션을 참조하세요.

메타데이터 유형 Oracle 테이블/뷰 MySQL 테이블/뷰/표시(MySQL CMD)
개방형 세션

V$SESSION

SHOW PROCESSLIST
INFORMATION_SCHEMA.PROCESSLIST
performance_schema.threads
실행 트랜잭션

V$TRANSACTION

INFORMATION_SCHEMA.INNODB_TRX
데이터베이스 객체

DBA_OBJECTS
지원되지 않음. 각 객체를 유형별로 쿼리합니다.
테이블

DBA_TABLES

INFORMATION_SCHEMA.TABLES
INFORMATION_SCHEMA.INNODB_SYS_TABLES
테이블 열

DBA_TAB_COLUMNS

INFORMATION_SCHEMA.COLUMNS
INFORMATION_SCHEMA.INNODB_SYS_COLUMNS
테이블 및 열 권한

TABLE_PRIVILEGES
DBA_COL_PRIVS
ROLE_TAB_PRIVS

INFORMATION_SCHEMA.COLUMN_PRIVILEGES
파티션

DBA_TAB_PARTITIONS
DBA_TAB_SUBPARTITIONS

INFORMATION_SCHEMA.PARTITIONS
SHOW CREATE TABLE TableName
SHOW TABLE STATUS LIKE 'TableName'

DBA_VIEWS

INFORMATION_SCHEMA.VIEWS
제약조건

DBA_CONSTRAINTS

INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS
SHOW CREATE TABLE TableName
색인

DBA_INDEXES
DBA_PART_INDEXES

INFORMATION_SCHEMA.STATISTICS
INFORMATION_SCHEMA.INNODB_SYS_INDEXES
INFORMATION_SCHEMA.KEY_COLUMN_USAGE
구체화된 뷰

DBA_MVIEWS
지원되지 않음
저장 프로시져

DBA_PROCEDURES

INFORMATION_SCHEMA.ROUTINES
저장 함수

DBA_PROCEDURES

INFORMATION_SCHEMA.ROUTINES
트리거

DBA_TRIGGERS

INFORMATION_SCHEMA.TRIGGERS
사용자

DBA_USERS

mysql.user
사용자 권한

DBA_SYS_PRIVS
DBA_ROLE_PRIVS
SESSION_PRIVS

INFORMATION_SCHEMA.USER_PRIVILEGES
작업/
스케줄러

DBA_JOBS
DBA_JOBS_RUNNING
DBA_SCHEDULER_JOBS
DBA_SCHEDULER_JOB_LOG

INFORMATION_SCHEMA.EVENTS
테이블스페이스

DBA_TABLESPACES

INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES
데이터 파일

DBA_DATA_FILES

INFORMATION_SCHEMA.FILES
INFORMATION_SCHEMA.INNODB_SYS_DATAFILES
동의어

DBA_SYNONYMS
지원되지 않음
시퀀스

DBA_SEQUENCES
지원되지 않음
데이터베이스 링크

DBA_DB_LINKS
지원되지 않음
통계

DBA_TAB_STATISTICS
DBA_TAB_COL_STATISTICS
DBA_SQLTUNE_STATISTICS
DBA_CPU_USAGE_STATISTICS

INFORMATION_SCHEMA.STATISTICS
INFORMATION_SCHEMA.KEY_COLUMN_USAGE
SHOW INDEXES FROM TableName
잠금

DBA_LOCK
DBA_DDL_LOCKS
DBA_DML_LOCKS
V$SESSION_BLOCKERS
V$LOCKED_OBJECT

INFORMATION_SCHEMA.INNODB_LOCKS
INFORMATION_SCHEMA.INNODB_LOCK_WAITS
INFORMATION_SCHEMA.INNODB_TRX
performance_schema.metadata_locks
performance_schema.rwlock_instances
SHOW PROCESSLIST
데이터베이스 매개변수

V$PARAMETER
V$NLS_PARAMETERS
SHOW PARAMETER Param

performance_schema.global_variables
performance_schema.session_variables
INFORMATION_SCHEMA.CHARACTER_SETS
SHOW VARIABLES LIKE '%variable%';
부문

DBA_SEGMENTS
부문 테이블은 지원되지 않습니다. 각 객체를 유형별로 쿼리합니다.
역할

DBA_ROLES
DBA_ROLE_PRIVS
USER_ROLE_PRIVS

Roles not supported use instead:
information_schema.COLUMN_PRIVILEGES
information_schema.SCHEMA_PRIVILEGES
information_schema.TABLE_PRIVILEGES
information_schema.USER_PRIVILEGES
mysql.columns_priv
mysql.procs_priv
mysql.proxies_priv
mysql.tables_priv
세션 기록

V$ACTIVE_SESSION_HISTORY
DBA_HIST_*

sys.statement_analysis
performance_schema.events_stages_history
performance_schema.events_stages_history_long
performance_schema.events_statements_history
performance_schema.events_statements_history_long
performance_schema.events_transactions_history
performance_schema.events_transactions_history_long
performance_schema.events_waits_history
performance_schema.events_waits_history_long
버전

V$VERSION

sys.version
SHOW VARIABLES LIKE '%version%';
대기 이벤트

V$WAITCLASSMETRIC
V$WAITCLASSMETRIC_HISTORY
V$WAITSTAT
V$WAIT_CHAINS

performance_schema.events_waits_current
performance_schema.events_waits_history
performance_schema.events_waits_history_long
sys.innodb_lock_waits
sys.io_global_by_wait_by_bytes
sys.io_global_by_wait_by_latency
sys.schema_table_lock_waits
sys.wait_classes_global_by_avg_latency
sys.wait_classes_global_by_latency
sys.waits_by_host_by_latency
sys.waits_by_user_by_latency
sys.waits_global_by_latency
SQL 조정 및
분석

V$SQL
V$SQLAREA
V$SESS_IO
V$SYSSTAT
V$STATNAME
V$OSSTAT
V$ACTIVE_SESSION_HISTORY
V$SESSION_WAIT
V$SESSION_WAIT_CLASS
V$SYSTEM_WAIT_CLASS
V$LATCH
V$SYS_OPTIMIZER_ENV
V$SQL_PLAN
V$SQL_PLAN_STATISTICS

performance_schema.events_statements_current
performance_schema.events_statements_history
performance_schema.events_statements_history_long
sys.statement_analysis
sys.host_summary_by_statement_latency
sys.host_summary_by_statement_type
sys.statements_with_errors_or_warnings
sys.statements_with_full_table_scans
sys.statements_with_runtimes_in_95th_percentile
sys.statements_with_sorting
sys.statements_with_temp_tables
sys.user_summary_by_statement_latency
sys.user_summary_by_statement_type
slow-query-log
general-log
SHOW STATUS LIKE '%StatusName%';
인스턴스
메모리 조정

V$SGA
V$SGASTAT
V$SGAINFO
V$SGA_CURRENT_RESIZE_OPS
V$SGA_RESIZE_OPS
V$SGA_DYNAMIC_COMPONENTS
V$SGA_DYNAMIC_FREE_MEMORY
V$PGASTAT

information_schema.INNODB_CMPMEM_RESET
information_schema.INNODB_CMPMEM
performance_schema.memory_summary_by_account_by_event_name
performance_schema.memory_summary_by_host_by_event_name
performance_schema.memory_summary_by_thread_by_event_name
performance_schema.memory_summary_by_user_by_event_name
performance_schema.memory_summary_global_by_event_name
performance_schema.replication_group_member_stats
performance_schema.replication_group_members
sys.memory_by_host_by_current_bytes
sys.memory_by_thread_by_current_bytes
sys.memory_by_user_by_current_bytes
sys.memory_global_by_current_bytes
sys.memory_global_total

MySQL 스토리지 엔진

Oracle을 포함하여 여러 다른 RDBMS와 달리, MySQL은 플러그인 가능한 스토리지 시스템으로 인해 다양한 형태로 작동할 수 있습니다. MySQL 플러그인 가능한 스토리지 엔진 아키텍처를 사용하면 데이터베이스 관리자가 특정 애플리케이션 요구에 맞는 전문화된 스토리지 엔진을 선택할 수 있습니다.

MySQL 데이터베이스 서버의 MySQL 플러그인 가능한 스토리지 엔진 구성요소는 데이터를 디스크 또는 메모리 버퍼에 저장하는 등 데이터 I/O 작업을 수행합니다. 플러그인 가능한 스토리지 엔진 아키텍처는 모든 기본 스토리지 엔진에 공통인 표준 관리 및 지원 서비스 집합을 제공합니다.

MySQL 버전 5.5 이상에서는 기본 스토리지 엔진이 InnoDB 스토리지 엔진이고 InnoDB도 임시 테이블을 처리합니다. 다음 예시와 같이 테이블 CREATE 또는 ALTER 중에 스토리지 엔진을 구성할 수 있습니다.

mysql> SHOW CREATE TABLE JOBS \G;

출력은 다음과 같습니다.

*************************** 1. row ***************************
       Table: JOBS
Create Table: CREATE TABLE `JOBS` (
  `JOB_ID` varchar(10) NOT NULL,
  `JOB_TITLE` varchar(35) NOT NULL,
  `MIN_SALARY` decimal(6,0) DEFAULT NULL,
  `MAX_SALARY` decimal(6,0) DEFAULT NULL,
  PRIMARY KEY (`JOB_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

자세한 내용은 MySQL 다른 스토리지 엔진을 참조하세요.
다음 쿼리를 사용하여 스토리지 엔진 구성을 볼 수 있습니다.

mysql> SHOW VARIABLES LIKE '%storage%';

출력은 다음과 비슷합니다.

+----------------------------------+--------+
| Variable_name                    | Value  |
+----------------------------------+--------+
| default_storage_engine           | InnoDB |
| default_tmp_storage_engine       | InnoDB |
| disabled_storage_engines         |        |
| enforce_storage_engine           | Innodb |
| internal_tmp_disk_storage_engine | InnoDB |
+----------------------------------+--------+

모든 내장 스토리지 엔진을 볼 수 있습니다.

mysql> SHOW STORAGE ENGINES;

출력은 다음과 비슷합니다.

+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine             | Support | Comment                                                        | Transactions | XA   | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| CSV                | YES     | CSV storage engine                                             | NO           | NO   | NO         |
| PERFORMANCE_SCHEMA | YES     | Performance Schema                                             | NO           | NO   | NO         |
| MRG_MYISAM         | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         |
| BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         |
| MyISAM             | YES     | MyISAM storage engine                                          | NO           | NO   | NO         |
| FEDERATED          | NO      | Federated MySQL storage engine                                 | NULL         | NULL | NULL       |
| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         |
| InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+

InnoDB는 기본 스토리지 엔진이며 트랜잭션을 지원하는 유일한 스토리지 엔진입니다(ACID와 호환). InnoDB는 Oracle 기능과 유사한 유일한 스토리지 엔진이므로 항상 InnoDB를 사용하는 것이 좋습니다. MySQL용 Cloud SQL 2세대는 InnoDB 스토리지 엔진만 지원합니다.

시스템 매개변수

Oracle과 MySQL용 Cloud SQL 데이터베이스 모두 기본 구성 이외의 특정 기능을 달성하도록 구성할 수 있습니다. Oracle에서 구성 매개변수를 변경하려면 특정 관리 권한이 필요합니다(주로 SYS/SYSTEM 사용자 권한).

다음은 ALTER SYSTEM 문을 사용하여 Oracle 구성을 변경하는 예시입니다. 이 예시에서 사용자는 spfile 구성 수준에서만 '로그인 실패 시 최대 시도 횟수' 매개변수를 변경합니다(재부팅 후에만 수정 가능).

SQL> ALTER SYSTEM SET SEC_MAX_FAILED_LOGIN_ATTEMPTS=2 SCOPE=spfile;

다음 예시에서 사용자는 단순히 Oracle 매개변수 값을 보도록 요청합니다.

SQL> SHOW PARAMETER SEC_MAX_FAILED_LOGIN_ATTEMPTS;

출력은 다음과 비슷합니다.

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
sec_max_failed_login_attempts        integer     2

Oracle 매개변수는 다음 세 가지 범위에서 수정할 수 있습니다.

  • SPFILE: 매개변수 수정은 Oracle spfile에 기록되고. 매개변수를 적용하려면 인스턴스를 재부팅해야 합니다.
  • MEMORY: 매개변수 수정은 정적 매개변수 변경이 허용되지 않는 경우에만 메모리 레이어에 적용됩니다.
  • BOTH: 매개변수 수정은 정적 매개변수 변경이 허용되지 않는 서버 매개변수 파일과 인스턴스 메모리 모두에 적용됩니다.

MySQL용 Cloud SQL 구성 플래그

Cloud Console, gcloud 도구 또는 CURL의 구성 플래그를 사용하여 MySQL용 Cloud SQL 시스템 매개변수를 수정할 수 있습니다. MySQL용 Cloud SQL에서 지원하는 변경 가능한 모든 매개변수의 전체 목록을 참조하세요.

MySQL 매개변수는 여러 범위로 나눌 수 있습니다.

  • 동적 매개변수: 런타임 시 변경할 수 있습니다.
  • 정적 매개변수: 적용하려면 인스턴스를 재부팅해야 합니다.
  • 전역 매개변수: 모든 현재 및 향후 세션에 전역적으로 영향을 미칩니다.
  • 세션 매개변수: 현재 세션 기간 동안에만 세션 수준에서 변경할 수 있으며 다른 세션과는 격리됩니다.

MySQL용 Cloud SQL 메모리 매개변수 innodb_buffer_pool_size(MySQL 환경을 계획하고 크기를 조정할 때 고려할 중요한 매개변수 중 하나)는 인스턴스 유형에 따라 결정되며 구성 플래그 또는 다른 방법으로 대체할 수 있습니다. 예를 들면 다음과 같습니다.

  • 인스턴스 유형 db-n1-standard-1에는 1.4GB의 메모리 할당이 포함됩니다.
  • 인스턴스 유형 db-n1-highmem-8에는 38GB의 메모리 할당이 포함됩니다.

MySQL용 Cloud SQL 매개변수 변경 예시

Console

Cloud Console을 사용하여 event_scheduler 매개변수를 사용 설정합니다.

  1. Cloud Storage의 인스턴스 수정 페이지로 이동합니다.

    인스턴스 수정으로 이동

  2. 플래그에서 항목 추가를 클릭하고 다음 스크린샷과 같이 event_scheduler를 검색합니다.

    Console에서 이벤트 스케줄러 인스턴스를 수정합니다.

gcloud

  • gcloud 도구를 사용하여 event_scheduler 매개변수를 사용 설정합니다.

    gcloud sql instances patch INSTANCE_NAME \
        --database-flags event_scheduler=on
    

    출력은 다음과 같습니다.

    WARNING: This patch modifies database flag values, which may require
    your instance to be restarted. Check the list of supported flags -
    /sql/docs/mysql/flags - to see if your
    instance will be restarted when this patch is submitted.
    
    Do you want to continue (Y/n)?
    

MySQL 세션

세션 수준에서 AUTOCOMMIT 모드를 사용 중지합니다. 이 변경사항은 현재 세션에 적용되며 세션 기간 동안만 유지됩니다.

  1. autocommit과 같은 변수를 표시합니다.

    mysql> SHOW VARIABLES LIKE '%autoc%';
    

    다음과 같은 출력이 표시됩니다. 여기서 autocommitON입니다.

    +---------------+-------+
    | Variable_name | Value |
    +---------------+-------+
    | autocommit    | ON    |
    +---------------+-------+
    
  2. autocommit을 사용 중지합니다.

    mysql> SET autocommit=off;
    
  3. autocommit과 같은 변수를 표시합니다.

    mysql> SHOW VARIABLES LIKE '%autoc%';
    

    다음과 같은 출력이 표시됩니다. 여기서 autocommitOFF입니다.

    +---------------+-------+
    | Variable_name | Value |
    +---------------+-------+
    | autocommit    | OFF   |
    +---------------+-------+
    

트랜잭션 및 격리 수준

이 섹션에서는 트랜잭션 및 격리 수준 마이그레이션과 관련된 Oracle과 MySQL용 Cloud SQL 간의 주요 차이점을 설명합니다.

커밋 모드

Oracle은 기본적으로 자동 커밋 이외의 모드에서 작동하며, 각 DML 트랜잭션은 COMMIT/ROLLBACK 문을 통해 결정해야 합니다. Oracle과 MySQL의 기본적인 차이점 중 하나는 MySQL은 기본적으로 자동 커밋 모드에서 작동하고 각 DML 트랜잭션은 COMMIT/ROLLBACK 문을 명시적으로 지정하여 자동 커밋된다는 것입니다.

MySQL이 자동 커밋 이외의 모드에서 작동하도록 하기 위한 몇 가지 옵션이 있습니다.

  • 저장 프로시져의 범위 내에서 트랜잭션을 관리할 때는 START TRANSACTION 절을 사용하여 Oracle과 동일한 트랜잭션 모드로 들어갑니다.
  • 다음 문을 사용하여 세션 수준에서 autocommit 시스템 매개변수를 OFF로 설정하고 DML 트랜잭션에서 COMMIT/ROLLBACK 문을 명시적으로 사용합니다.

    mysql> SET autocommit=off;
    

격리 수준

ANSI/ISO SQL 표준(SQL92)은 4가지 격리 수준을 정의합니다. 각 수준별로 데이터베이스 트랜잭션의 동시 실행을 처리하는 방법이 다릅니다.

  • 커밋되지 않은 읽기: 현재 처리된 트랜잭션이 다른 트랜잭션에서 생성된 커밋되지 않은 데이터를 볼 수 있습니다. 롤백을 수행하면 모든 데이터가 이전 상태로 복원됩니다.
  • 커밋된 읽기: 트랜잭션이 커밋된 데이터의 변경사항만 봅니다. 커밋되지 않은 변경('더티 읽기')은 불가능합니다.
  • 반복 가능 읽기: 두 트랜잭션 모두 COMMIT을 실행했거나 둘 다 롤백한 후에만 트랜잭션이 다른 트랜잭션에서 변경된 항목을 볼 수 있습니다.
  • 직렬화 가능: 가장 엄격하고 강력한 격리 수준입니다. 이 수준은 액세스되는 모든 레코드를 잠그고 레코드가 테이블에 추가되지 않도록 리소스를 잠급니다.

트랜잭션 격리 수준은 다른 실행 트랜잭션에서 보는 것과 같이 변경된 데이터의 공개 상태를 관리합니다. 또한 여러 동시 실행 트랜잭션에서 동일한 데이터에 액세스하면 선택한 트랜잭션 격리 수준에 따라 트랜잭션이 서로 상호작용하는 방식이 달라집니다.

Oracle은 다음과 같은 격리 수준을 지원합니다.

  • 커밋된 읽기(기본값)
  • 직렬화 가능
  • 읽기 전용(ANSI/ISO SQL 표준(SQL92)의 일부가 아님)

Oracle MVCC(다중 버전 동시 실행 제어):

  • Oracle은 MVCC 메커니즘을 사용하여 전체 데이터베이스와 모든 세션에서 자동 읽기 일관성을 제공합니다.
  • Oracle은 데이터베이스의 일관성 있는 뷰를 얻기 위해 현재 트랜잭션의 SCN(System Change Number)을 사용합니다. 따라서 모든 데이터베이스 쿼리는 쿼리 실행 시 SCN과 관련하여 커밋된 데이터만 반환합니다.
  • 격리 수준은 트랜잭션 및 세션 수준에서 변경할 수 있습니다.

다음은 격리 수준 설정의 예시입니다.

-- Transaction Level
SQL> SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
SQL> SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
SQL> SET TRANSACTION READ ONLY;

-- Session Level
SQL> ALTER SESSION SET ISOLATION_LEVEL = SERIALIZABLE;
SQL> ALTER SESSION SET ISOLATION_LEVEL = READ COMMITTED;

Oracle처럼 MySQL용 Cloud SQL도 다음과 같이 ANSI SQL:92 표준에 지정된 4가지의 트랜잭션 격리 수준을 지원합니다.

  • READ UNCOMMITTED
  • READ COMMITTED
  • REPEATABLE READ (default)
  • SERIALIZABLE

MySQL용 Cloud SQL의 기본 격리 수준은 REPEATABLE READ입니다. 두 트랜잭션이 COMMIT 명령어를 실행한 후에만 새 데이터를 사용할 수 있습니다. 이러한 격리 수준은 SESSION 수준 및 GLOBAL 수준에서 변경할 수 있습니다. 구성 플래그를 사용한 전역 수준 수정은 현재 베타 단계입니다.

SESSIONGLOBAL 수준에서 현재 격리 수준을 확인하려면 다음 문을 사용하세요.

mysql> SELECT @@GLOBAL.tx_isolation, @@tx_isolation;

출력은 다음과 같습니다.

+-----------------------+-----------------+
| @@GLOBAL.tx_isolation | @@tx_isolation  |
+-----------------------+-----------------+
| REPEATABLE-READ       | REPEATABLE-READ |
+-----------------------+-----------------+

격리 수준 구문은 다음과 같이 수정할 수 있습니다.

SET [SESSION] TRANSACTION ISOLATION LEVEL [READ WRITE | READ ONLY]
| REPEATABLE READ | READ COMMITTED | READ UNCOMMITTED | SERIALIZABLE]

또한 SESSION 수준에서 격리 수준을 수정할 수 있습니다.

mysql> SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

       -- Verify

mysql> SELECT @@GLOBAL.tx_isolation, @@tx_isolation;

출력은 다음과 같습니다.

+-----------------------+------------------+
| @@GLOBAL.tx_isolation | @@tx_isolation   |
+-----------------------+------------------+
| REPEATABLE-READ       | READ-UNCOMMITTED |
+-----------------------+------------------+

MySQL용 Cloud SQL 트랜잭션 구조

트랜잭션 구문:


START TRANSACTION
    [transaction_characteristic [, transaction_characteristic] ...]

transaction_characteristic: { WITH CONSISTENT SNAPSHOT | READ WRITE | READ ONLY }
BEGIN [WORK] COMMIT [WORK] [AND [NO] CHAIN] [[NO] RELEASE] ROLLBACK [WORK] [AND [NO] CHAIN] [[NO] RELEASE] SET autocommit = {0 | 1}

트랜잭션은 START TRANSACTION 또는 BEGIN으로 구현할 수 있습니다.

WITH CONSISTENT SNAPSHOT 옵션은 일관된 READ 트랜잭션을 시작합니다. 이 트랜잭션은 START TRANSACTION을 실행한 후 임의 테이블에서 SELECT를 실행할 때와 사실상 동일합니다. 일관된 READ(특정 시점을 기준으로 쿼리 결과를 반환하기 위해 스냅샷 정보를 사용하는 READ 작업)를 시작하는 WITH CONSISTENT SNAPSHOT 절은 트랜잭션 격리 수준을 변경하지 않으며, REPEATABLE READ 격리 수준에서만 지원됩니다.

일관된 READ는 동시 실행 트랜잭션에서 적용한 변경사항에 관계없이 특정 시점을 기준으로 쿼리 결과를 제공하기 위해 스냅샷 정보를 사용합니다. 쿼리된 데이터가 다른 트랜잭션을 통해 변경되면 원래 데이터는 실행 취소 로그를 사용하여 재구성됩니다. 이렇게 하면 동시 실행 횟수를 줄일 수 있는 잠금 문제를 방지하는 데 도움이 됩니다.

REPEATABLE READ 격리 수준을 사용하면 스냅샷은 첫 번째 READ 작업이 수행된 시점을 기반으로 합니다. READ COMMITTED 격리 수준을 사용하면 스냅샷은 일관된 각 READ 작업 시간으로 재설정됩니다.

다음은 트랜잭션 및 격리 수준 설정의 예시입니다.

mysql> SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
mysql> START TRANSACTION;
mysql> INSERT INTO tbl1 VALUES (1, 'A');
mysql> UPDATE tbl2 SET col1 = 'Done' WHERE KeyColumn = 1;
mysql> COMMIT;