2014-11-18 2 views
0

이전 스레드가이 주제에 있었기 때문에이 스레드가 스팸으로 표시되는 것을 원하지 않습니다. 그래서 지금까지 수행 한 작업과 문제점을 설명하고 if 어떤 해결책이 있습니다.MySQL에서 DB2 iSeries로 마이그레이션

내 랩톱에 iSeries의 DB2로 마이그레이션해야하는 MySQL 데이터베이스가 있습니다. 저는 도구를 사용하고 있습니다. 스팸 문제 때문에 어떤 것을 말하지 않을 것입니다. 스팸 문제로 인해 MySQL 데이터베이스에서 테이블을 "복사"하고 DB2 데이터베이스에 붙여 넣을 수 있습니다.

테이블 이름과 열 이름에 MySQL 데이터베이스의 공백이 포함되어 있기 때문에이 도구는 붙여 넣기에 실패했습니다. 공백을 밑줄로 대체하여 하나의 테이블을 변경하고 복사본이 완벽하게 작동하여이를 확인했습니다. 나는 100 개가 넘는 테이블을 복사해야하고 모든 테이블과 컬럼 이름을 수동으로 편집하고 싶지는 않습니다.

MySQL 테이블 이름과 열에서 공백을 밑줄로 전역 대체하는 방법이 있습니까?

다른 아이디어? 툴이 객체 이름을 따옴표로 묶기 위해 생성 한 쿼리를 강제로 수행하는 방법을 연구 중이지만 지금까지 행운이 없었습니다.

제공 할 수있는 도움과 제안에 감사드립니다.

+1

이론적으로 데이터베이스를 텍스트 파일로 내보낼 수 있어야합니다. 모든 공백을 찾아 교체하고 db를 다시 만듭니다. – Strawberry

+1

문서에 따르면 MySQL은 따옴표로 묶지 않은 식별자의 공백을 지원하지 않습니다. 그래서'CREATE TABLE MY TABLE'은 유효하지 않습니다. OTOH,'CREATE TABLE "MY TABLE"은 MySQL과 DB2 for i에서 모두 유효합니다. 그래서 당신의 문제를 이해하지 못합니다 ... – Charles

+0

MySQL에서 약간의 수정이 기본적으로'CREATE TABLE \'MY TABLE \ "'이 유효합니다. CREATE TABLE MY TABLE을 지원하려면'SET sql_mode = 'ANSI_QUOTES'를 사용해야한다. – Charles

답변

0

스택 오버플로는 프로그래밍 문제를 해결하는 데 도움이되므로 선택한 도구의 결함 문제는 무시하고 큰 문제에 대한 프로그래밍 솔루션을 제안합니다. DB2는 테이블 및 열 이름에 공백을 허용하지 않습니다. 제안 사항을 묻습니다.

MySQL 카탈로그 테이블을 읽는 코드를 작성합니다. DB2에서는 SYSTABLES, SYSVIEWS, SYSINDEXES, SYSCOLUMNS 등이 될 수 있습니다. SYSTABLES를 읽고이를 나머지 코드의 '기본'소스로 사용하십시오. 테이블 이름을 확인하십시오. 공백이있는 경우 밑줄로 바꾸십시오. SYSCOLUMNS를 사용하여 새 테이블을 생성하는 CREATE TABLE 문을 생성하십시오 (새 MySQL 데이터베이스에서?). 또한 대체를 밑줄 공백을 수행합니다. CREATE TABLE을 실행 한 후 이전 테이블의 열을 새 테이블에 INSERT하는 SQL 문을 생성합니다. 다시 대체를 강조하는 공간을 사용합니다. 새 테이블이 채워지면 CREATE VIEW, CREATE PROCEDURE, CREATE FUNCTION 등의 SQL 문을 생성하십시오.

일반적인 아이디어는 즉시 테이블, 뷰 및 컬럼 이름으로 MySQL 데이터베이스를 다시 생성한다는 것입니다 DB2 for i와 호환되므로 도구로 할 수 있습니다.

당연히 많은 어려움을 겪으면 당연히 필요한 도구가 아닌 중간 도구를 사용하지 않고 IBM i 측에서 직접 테이블을 만드는 것이 쉬울 것입니다.

+0

DB2는 실제로 공백을 허용합니다. 테이블 이름을 인용하면됩니다. 'create table "MY TABLE"(fld1 char (10))' OLSMIAMI의 MY TABLE 테이블이 생성되었지만 저널링되지 않았습니다. – Charles

+0

네, 분명히 문제는 도구가 따옴표를 사용하지 않는다는 것입니다. 따라서 MySQL 데이터베이스에서 전역 검색 및 바꾸기가 필요합니다. –

+0

MySQL에서는 따옴표로 묶지 않은 식별자도 허용하지 않으므로 .... 기본 인용문은 역 따옴표이지만 ... SET sql_mode = 'ANSI_QUOTES'가 필요할 수도 있습니다. – Charles

관련 문제