2010-12-14 9 views
2

Oracle 데이터베이스에서 mySQL 데이터베이스로 큰 SQL 테이블을 가져와야합니다. 저는 RazorSQL을 사용하여 오라클 테이블을 "버렸습니다"그래서 많은 (2.5 GB) .sql 파일을 가지고 많은 INSERT 문이 있습니다.큰 SQL 파일을 문장 경계에서 분할 하시겠습니까?

이 파일은 너무 커서 분할하여 덩어리로 가져 오려고합니다. 그런 파일을 분할하는 영리한 방법은 무엇입니까? split 분할 중반 문의 높은 위험이되도록 몇 가지 문자열 값을 제외하고 작동 할 것 split 명령을 사용하여

  • 줄 바꿈 문자가 포함되어 있습니다.

  • 정규식을 사용하여 "; \ n"(명령문의 끝)으로 분할하는 Perl Quickie가 작동하지만, 여전히 그러한 문자 시퀀스가 ​​데이터에서 발견 될 수있는 원격 가능성이 있습니다.

당연히 나는 문자열 인용을 이해하기 위해 파서를 작성할 수 있습니다. 더 똑똑한 것이 있는지 궁금합니다.

비슷한 질문이 있습니다. 예 :

How do I split the output from mysqldump into smaller files?

그러나 유일한 분할 솔루션은 일부 Windows 소프트웨어에 대한 제안하고있다. Windows는 나를위한 옵션이 아닙니다. 나는 유닉스, 즉 Mac OS X를 돌린다.

배경을 제공하기 위해 파일을 mySQL로 가져올 때 오류가 발생한다. 오류를 현지화하는 것은 시간이 많이 소요되고 편집을 위해 큰 텍스트 파일을 여는 것이 대부분의 텍스트 편집기에서 기껏해야 사소한 것이기 때문에 고통 스럽습니다. 일부 SQL 도구는 오류 위치를 파일에보고하지 않기 때문에 여러 번 분할하여 오류를 해결하는 이분법 접근법을 강력하게 제안합니다. 이것을 자동화하면 유용 할 것입니다.

아무쪼록 감사드립니다.

+0

도구 mysqlimport를 사용할 수 있고 INSERT 문을 사용하지 않으면 작업이 훨씬 빨라지고 파서 오버 헤드가 중요하지 않습니다. 또한 데이터가로드 될 때까지 테이블에서 인덱스가 사용 불가능하게 설정되어 있는지 확인하십시오. 그 차이는 가져 오기 시간에 최대 몇 자릿수가 될 수 있습니다. ** split **를 사용하면 관심있는 문제가 발생하면 관심있는 파일을 생성 할 수 있습니다. 가져 오기 프로세스에서 끔찍한 오류 출력이 발생하는 경우 문제가있는 파일로 이진 검색을 수행하여 오류를 찾을 수 있습니다. – kevpie

+0

필자가 말했듯이,'split'은 OK가 아닙니다. 문장 경계가 아닌 라인 경계에서 파일을 나눌 것입니다. 몇 줄에 걸쳐 실행되는 문장이 있습니다. 이진 검색을 위해서는 신뢰할 수있는 분할 솔루션이 필요합니다. 간단한 텍스트 기반 분할은 좋지 않습니다. 어쩌면 정규 표현식을 사용할 수도 있지만 regexp는 작은 따옴표를 인식해야합니다. –

+0

생성하려는 파일의 크기는 몇 개입니까? – kevpie

답변

0

질문에 대한 답변,하지만 어쩌면 당신의 문제에 대한 해결책 정확 하 :

Navicat (MySQL GUI)를 설치합니다. 그것은 오라클 => mysql 마이 그 레이션 툴을 가지고 있습니다. 아마도 당신이 얻는 에러는 구문의 차이로 인해 생길 수 있기 때문에 도움이 될 것입니다. 하나의 SQL 언어를 손으로 변환하는 것은 어려운 작업입니다.

+0

아닙니다.내가 발견 한 유일한 구문 차이는'to_date' 오라클 기능이었습니다. 내 개인 mySQL'to_date' 함수를 정의하여이 문제를 해결했습니다. 나는 대부분의 경우 모든 큰 문구의 중간에 하나의 고립 된 줄이 아닌 모든 줄에 어떤 문법 문제가 나타나기를 기대한다. –

관련 문제