SQL Server를 MySQL로 변환 - AWS Schema Conversion Tool

SQL Server를 MySQL로 변환

변환된 MySQL 코드에서 Microsoft SQL Server 데이터베이스 함수를 에뮬레이션하려면 AWS SCT에서 SQL Server-MySQL 확장 팩을 사용합니다. 확장 팩에 대한 자세한 내용은 AWS Schema Conversion Tool과 함께 확장 팩 사용 섹션을 참조하세요.

MySQL을 대상 데이터베이스로 사용하기 위한 권한

MySQL을 대상으로 사용하기 위해 필요한 권한은 다음과 같습니다.

  • CREATE ON *.*

  • ALTER ON *.*

  • DROP ON *.*

  • INDEX ON *.*

  • REFERENCES ON *.*

  • SELECT ON *.*

  • CREATE VIEW ON *.*

  • SHOW VIEW ON *.*

  • TRIGGER ON *.*

  • CREATE ROUTINE ON *.*

  • ALTER ROUTINE ON *.*

  • EXECUTE ON *.*

  • INSERT, UPDATE ON AWS_SQLSERVER_EXT.*

  • INSERT, UPDATE, DELETE ON AWS_SQLSERVER_EXT_DATA.*

  • CREATE TEMPORARY TABLES ON AWS_SQLSERVER_EXT_DATA.*

다음 코드 예제를 사용하여 데이터베이스 사용자를 생성하고 권한을 부여할 수 있습니다.

CREATE USER 'user_name' IDENTIFIED BY 'your_password'; GRANT CREATE ON *.* TO 'user_name'; GRANT ALTER ON *.* TO 'user_name'; GRANT DROP ON *.* TO 'user_name'; GRANT INDEX ON *.* TO 'user_name'; GRANT REFERENCES ON *.* TO 'user_name'; GRANT SELECT ON *.* TO 'user_name'; GRANT CREATE VIEW ON *.* TO 'user_name'; GRANT SHOW VIEW ON *.* TO 'user_name'; GRANT TRIGGER ON *.* TO 'user_name'; GRANT CREATE ROUTINE ON *.* TO 'user_name'; GRANT ALTER ROUTINE ON *.* TO 'user_name'; GRANT EXECUTE ON *.* TO 'user_name'; GRANT INSERT, UPDATE ON AWS_SQLSERVER_EXT.* TO 'user_name'; GRANT INSERT, UPDATE, DELETE ON AWS_SQLSERVER_EXT_DATA.* TO 'user_name'; GRANT CREATE TEMPORARY TABLES ON AWS_SQLSERVER_EXT_DATA.* TO 'user_name';

이전 예제에서 user_name을 사용자 이름으로 바꿉니다. 그런 다음 your_password를 안전한 암호로 바꿉니다.

MySQL 데이터베이스 버전 5.7 이하를 대상으로 사용하는 경우 다음 명령을 실행합니다. MySQL 데이터베이스 버전 8.0 이상에서는 이 명령이 더 이상 사용되지 않습니다.

GRANT SELECT ON mysql.proc TO 'user_name';

Amazon RDS for MySQL 또는 Amazon RDS for Aurora MySQL을 대상으로 사용하려면 lower_case_table_names 파라미터를 1로 설정합니다. 이 값은 MySQL 서버가 테이블, 인덱스, 트리거 및 데이터베이스와 같은 객체 이름의 식별자를 대소문자 구분 없이 처리한다는 것을 의미합니다. 대상 인스턴스에서 이진 로깅을 활성화했다면 log_bin_trust_function_creators 파라미터를 1로 설정합니다. 이 경우 저장된 함수를 생성하기 위해 DETERMINISTIC, READS SQL DATA 또는 NO SQL 특성을 사용할 필요가 없습니다. 이들 파라미터를 구성하려면 새 DB 파라미터 그룹을 생성하거나 기존 DB 파라미터 그룹을 수정해야 합니다.

SQL Server에서 MySQL로의 변환 설정

SQL Server에서 MySQL로의 변환 설정을 편집하려면 AWS SCT에서 설정을 선택한 다음 변환 설정을 선택합니다. 상단 목록에서 SQL Server를 선택한 다음 SQL Server – MySQL을 선택합니다. AWS SCT는 SQL Server에서 MySQL로의 변환에 사용할 수 있는 모든 설정을 표시합니다.

AWS SCT의 경우, SQL Server에서 MySQL로의 변환 설정에는 다음에 대한 옵션이 포함됩니다.

  • 변환된 코드에서 작업 항목이 포함된 설명의 수를 제한합니다.

    Add comments in the converted code for the action items of selected severity and higher에서 작업 항목의 심각도를 선택합니다. AWS SCT가 선택된 심각도 이상의 작업 항목에 대한 변환된 코드에 설명을 추가합니다.

    예를 들어, 변환된 코드의 설명 수를 최소화하려면 오류만을 선택합니다. 변환된 코드의 모든 작업 항목에 대한 설명을 포함하려면 모든 메시지를 선택합니다.

  • 소스 SQL Server 데이터베이스에서 EXEC의 출력을 테이블에 저장할 수 있도록 하려면 AWS SCT가 이 기능을 에뮬레이션하기 위한 임시 테이블 및 추가 프로시저를 생성합니다. 이 에뮬레이션을 사용하려면 Create additional routines for handling open datasets를 선택합니다.

마이그레이션 고려 사항

SQL Server 스키마를 MySQL로 마이그레이션할 때는 다음 사항을 고려합니다.

  • MySQL은 MERGE 문을 지원하지 않습니다. 하지만 AWS SCT는 변환 중에 INSERT ON DUPLICATE KEY 절과 UPDATE FROM and DELETE FROM 문을 사용하여 MERGE 문을 에뮬레이션할 수 있습니다.

    INSERT ON DUPLICATE KEY를 사용하여 올바르게 에뮬레이션하기 위해서는 대상 MySQL 데이터베이스에 고유한 제약 조건 또는 프라이머리 키가 있어야 합니다.

  • GOTO 문과 레이블을 사용하여 명령문 실행 순서를 변경할 수 있습니다. GOTO 문 뒤에 오는 Transact-SQL 문은 건너뛰며 프로세스는 레이블에서 계속됩니다. GOTO 문과 레이블은 프로시저, 배치(batch), 명령문 블록 내 어디든 사용할 수 있습니다. GOTO 문을 중첩할 수도 있습니다.

    MySQL은 GOTO 문을 사용하지 않습니다. AWS SCT는 GOTO 문을 포함하는 코드를 변환할 때 BEGIN…END 문 또는 LOOP…END LOOP 문을 사용하도록 명령문을 변환합니다. 다음 테이블에는 AWS SCT가 GOTO 문을 어떻게 변환하는지에 대한 예가 나와 있습니다.

    SQL Server 문 MySQL 문
    BEGIN .... statement1; .... GOTO label1; statement2; .... label1: Statement3; .... END
    BEGIN label1: BEGIN .... statement1; .... LEAVE label1; statement2; .... END; Statement3; .... END
    BEGIN .... statement1; .... label1: statement2; .... GOTO label1; statement3; .... statement4; .... END
    BEGIN .... statement1; .... label1: LOOP statement2; .... ITERATE label1; LEAVE label1; END LOOP; statement3; .... statement4; .... END
    BEGIN .... statement1; .... label1: statement2; .... statement3; .... statement4; .... END
    BEGIN .... statement1; .... label1: BEGIN statement2; .... statement3; .... statement4; .... END; END
  • MySQL은 다중 명령문 테이블 반환 함수를 지원하지 않습니다. AWS SCT는 임시 테이블을 만들고 이러한 임시 테이블을 사용하도록 명령문을 다시 작성하여 변환 중에 테이블 반환 함수를 시뮬레이션합니다.