Oracle에서 MySQL로 마이그레이션
Oracle 데이터베이스에 심각한 성능 문제가 발생했습니다. MySQL 기반 데이터베이스(MySQL 직접 또는 Infobright)로 마이그레이션하려고 합니다.
중요한 것은 새 데이터베이스의 모든 기능이 필요에 부합하는지 실제로 알기 전에 몇 달은 아니더라도 최소한 몇 주는 이전 시스템과 새 시스템이 겹치게 해야 한다는 것입니다.
다음은 우리의 상황입니다.
Oracle 데이터베이스는 수백만 개의 행이 있는 여러 테이블로 구성됩니다.하루 동안에는 말 그대로 수천 개의 성명서가 있지만, 마이그레이션을 위해 멈출 수는 없습니다.
매일 아침 새 데이터를 오라클 데이터베이스로 가져와 수천 개의 행을 대체합니다.이 프로세스를 복사하는 것은 문제가 되지 않으므로 이론적으로 두 데이터베이스를 동시에 가져올 수 있습니다.
하지만 이 문제가 해결되려면 Oracle 데이터베이스에서 하루 후에 일관된 상태로 내보내기를 수행해야 합니다. (일부 테이블은 월요일에 일부 테이블은 내보내지 못하고 일부 테이블은 화요일에 일부 테이블을 수 없습니다.)즉, 최소한 하루 이내에 내보내기가 완료되어야 합니다.
처음에는 스키마를 덤프하려고 했지만 Oracle 덤프 파일을 MySQL로 가져올 수 있는 도구를 찾을 수 없었습니다.CSV 파일로 테이블을 내보내는 것은 효과가 있을 수 있지만 시간이 너무 오래 걸릴 수 있습니다.
그래서 제 질문은 다음과 같습니다.
어떻게 해야 하나?Oracle 덤프 파일을 MySQL로 가져올 수 있는 도구가 있습니까?그런 대규모 이주 경험이 있는 사람이 있습니까?
PS: Oracle에 대한 성능 최적화 기술을 제안하지 마십시오. 이미 많이 시도했습니다. :-)
편집: 이전에 이미 ETL 도구를 사용해 보았지만 속도가 너무 빠르지 않았습니다. 테이블 하나만 내보내는 데 이미 4시간 이상이 걸렸습니다.
두 번째 편집:여러분... 아무도 가능한 한 빨리 전체 데이터베이스를 내보내고 다른 데이터베이스 시스템으로 가져올 수 있도록 데이터를 변환하려고 하지 않았습니까?
Oracle은 기본 제공 언로드 유틸리티를 제공하지 않습니다.
사용자 환경에 대한 포괄적인 정보(오라클 버전) 없이도 기억해야 합니다.서버 플랫폼?얼마나 많은 데이터?어떤 데이터 유형입니까?)여기에 있는 모든 것은 YMMV이며 성능과 타이밍을 위해 시스템에서 사용해 보고 싶을 것입니다.
제 요점 1-3은 일반적인 데이터 이동 아이디어입니다.포인트 4는 다운타임이나 중단 시간을 분 또는 초 단위로 줄일 수 있는 방법입니다.
타사 유틸리티를 사용할 수 있습니다.저는 이 중 몇 가지를 사용했지만 여러분이 의도한 목적을 위해 직접 확인하는 것이 가장 좋습니다.다음과 같은 몇 가지 타사 제품이 나열되어 있습니다. OracleFaq. 안타깝게도 대부분 Windows에서 실행되므로 DB 서버가 Windows에 있지 않고 서버에서 직접 로드 유틸리티를 실행할 수 없으면 데이터 언로드 프로세스가 느려집니다.
LOB와 같은 복잡한 데이터 유형이 없는 경우 SQLPLUS를 사용하여 자체 데이터 유형을 롤링할 수 있습니다.테이블을 한 번에 수행한 경우 쉽게 병렬화할 수 있습니다.이 사이트에서 주제를 한 번 이상 방문했습니다. 예를 들어 다음과 같습니다. 링크
10g 이상인 경우 외부 테이블이 이 작업을 수행하는 데 유용할 수 있습니다.현재 테이블과 동일한 구조를 가진 빈 외부 테이블을 만들어 데이터를 복사하면 데이터가 외부 테이블 형식(텍스트 파일)으로 변환됩니다.다시 한 번 오라 FAQ가 구조에 나섰습니다.
며칠/주/개월 동안 시스템을 병렬로 유지해야 하는 경우 다운타임이 거의 없는 변경 데이터 캡처/적용 툴을 사용합니다.$$$를 지불할 준비를 하십시오.저는 Oracle redo 로그를 마이닝하고 MySQL 데이터베이스에 삽입/업데이트 문을 제공할 수 있는 Golden Gate Software의 도구를 사용했습니다.가동 일주일 전에 다운타임 없이 대부분의 데이터를 마이그레이션할 수 있습니다.그런 다음 라이브 기간 동안 소스 데이터베이스를 종료하고 Golden Gate가 마지막 남은 트랜잭션을 따라잡도록 한 다음 새 대상 데이터베이스에 대한 액세스를 엽니다.업그레이드에 사용한 적이 있는데, 몇 분밖에 걸리지 않았습니다.우리는 이미 골든 게이트에 대한 사이트 라이센스를 가지고 있었기 때문에 우리에게 돈이 되는 것은 아니었습니다.
여기서는 Cranky DBA 역할을 맡아 Oracle을 제대로 수행할 수 없다면 MySQL이 귀사의 특정 문제를 어떻게 해결했는지 설명해 드리겠습니다.SQL을 터치할 수 없는 애플리케이션이 있는 경우에도 Oracle을 조정할 수 있는 방법은 많습니다./대화 상자
Oracle Dump(.dmp) 파일을 읽고 해당 데이터 테이블을 SQL Server 데이터베이스에 펌핑할 수 있는 C# 애플리케이션을 구축했습니다.
이 응용 프로그램은 프로덕션 기준으로 매일 밤 PeopleSoft 데이터베이스를 SQL 서버로 마이그레이션하는 데 사용됩니다.PeopleSoft 데이터베이스에 1100개 이상의 데이터베이스 테이블이 있으며 Oracle 덤프 파일이 4.5보다 큽니다.크기(GB).
이 응용 프로그램은 SQL Server 데이터베이스와 테이블을 만든 다음 모든 4.5를 로드합니다.듀얼 코어 Intel 서버에서 55분 이내에 실행되는 GB의 데이터
ADO.NET 공급자가 있다면 다른 데이터베이스와 함께 작동하도록 이 응용프로그램을 수정하는 것은 그리 어려운 일이 아닐 것입니다.
네, 오라클은 꽤 느립니다.:)
원하는 수의 ETL 도구를 사용하여 Oracle에서 MySQL로 데이터를 이동할 수 있습니다.제가 가장 좋아하는 것은 SQL Server Integration Services입니다.
Oracle9i 이상 버전의 경우 Change Data Capture를 구현할 수 있습니다.여기서 더 읽기 http://download-east.oracle.com/docs/cd/B14117_01/server.101/b10736/cdc.htm
그런 다음 모든 ETL 기술을 사용하여 Oracle에서 MySQL 또는 Infobright로 변경한 델타를 가져올 수 있습니다.
우리도 같은 문제가 있었습니다.Oracle dbms에서 mysql dbms로 테이블 및 데이터를 가져오는 데 필요합니다.
우리는 온라인에서 찾은 이 도구를 사용했습니다.잘 됐어요.
http://www.sqlines.com/download
이 도구는 기본적으로 다음과 같은 이점을 제공합니다.
- 원본 DBMS(ORACLE)에 연결
- 대상 DBMS(MySQL)에 연결
- 마이그레이션할 Oracle DBMS에서 스키마 및 테이블 지정
- 마이그레이션 프로세스를 실행하려면 "전송" 버튼을 누릅니다(기본 제공 마이그레이션 쿼리 실행).
- 원본에서 읽은 레코드 수와 대상 데이터베이스에서 쓴 레코드 수, 실패한 쿼리 수를 알려주는 전송 로그를 가져옵니다.
이것이 이 질문에 착수할 다른 사람들에게 도움이 되기를 바랍니다.
저는 Pentaho Data Integration을 사용하여 Oracle에서 MySql로 마이그레이션했습니다(동일한 데이터를 Postresql로 마이그레이션했는데, 이는 사용되는 JDBC 드라이버가 서로 다르기 때문인 것 같습니다).저는 여기서 롤랜드 부만의 지시를 거의 완벽하게 따랐고, 그것이 얼마나 쉬운지에 매우 기쁘게 놀랐습니다.
데이터 로드에 적합할지는 모르겠지만 시도해 볼 가치가 있습니다.
저는 최근에 이 작업을 수행하기 위해 etlalchemy를 발표했습니다.이 솔루션은 4줄의 Python이 있는 2개의 SQL 데이터베이스 간에 마이그레이션을 허용하는 오픈 소스 솔루션이며, 처음에는 Oracle에서 MySQL로 마이그레이션하도록 설계되었습니다.MySQL, PostgreSQL, Oracle, SQLite 및 SQL Server에 대한 지원이 추가되었습니다.
이렇게 하면 스키마, 데이터, 인덱스 및 제약 조건을 마이그레이션하고 더 많은 옵션을 사용할 수 있습니다.
설치 방법:
$ pip install etlalchemy
El Capitan에서:pip install --ignore-installed etlalchemy
실행 방법:
from etlalchemy import ETLAlchemySource, ETLAlchemyTarget
orcl_db_source = ETLAlchemySource("oracle+cx_oracle://username:password@hostname/ORACLE_SID")
mysql_db_target = ETLAlchemyTarget("mysql://username:password@hostname/db_name", drop_database=True)
mysql_db_target.addSource(orcl_db_source)
mysql_db_target.migrate()
성능과 관련하여, 이 툴은 mysqlimport, COPY FROM(postgresql) 등 다양한 RDBMS에서 BULK 가져오기 도구를 활용하여 효율적으로 마이그레이션을 수행합니다.33,105,951개의 행이 있는 5GB SQL 서버 데이터베이스를 40분 만에 MySQL로, 3GB 700만 행이 있는 Oracle 데이터베이스를 13분 만에 MySQL로 마이그레이션할 수 있었습니다.
프로젝트의 기원에 대한 배경을 더 알아보려면 이 게시물을 확인하십시오.툴을 실행하는 동안 오류가 발생하면 github repo에서 문제를 열면 일주일 안에 해결해 드리겠습니다!
("cx_Oracle" Python 드라이버를 설치하려면 다음 지침을 따르십시오.)
및 Python, SQL*Plus »mysql.exe
(MySQL 클라이언트) 스크립트를 사용하여 쿼리 결과의 전체 테이블을 복사합니다.모든 도구가 Windows와 Linux에 있기 때문에 휴대가 가능합니다.
Python을 사용하여 다음 단계를 구현했습니다.
- SQL*Plus를 사용하여 CSV 파일에 데이터를 추출합니다.
- mysql.exe를 사용하여 MySQL에 덤프 파일을 로드합니다.
테이블/파티션/하위 파티션을 사용하여 병렬 로드를 수행하여 성능을 향상시킬 수 있습니다.
공개:Oracle-to-MySQL-Data-Migrator는 데이터 통합을 위해 작성한 스크립트입니다.Oracle and MySQL
Windows OS에서 사용할 수 있습니다.
언급URL : https://stackoverflow.com/questions/2479500/migrate-from-oracle-to-mysql
'programing' 카테고리의 다른 글
'while' 및 'for' 루프의 범위는 무엇입니까? (0) | 2023.07.07 |
---|---|
jdbct 템플릿을 통해 sql insert의 ID (0) | 2023.07.07 |
생성자 주입 없이 서비스 인스턴스를 가져오는 중 (0) | 2023.07.07 |
로컬 리포지토리의 파일과 오리진 간의 차이 (0) | 2023.07.07 |
MongoDB의 다국어 데이터 모델링 (0) | 2023.07.07 |