데이터를 SQL SERVER
에서 Oracle
데이터베이스로 마이그레이션하는 작업이 주어졌습니다. 이 두 데이터베이스의 구조는 다르며 각 테이블에는 적어도 20 개의 열이 있으며 마이그레이션 할 테이블이 적어도 500 개 있습니다. 이 일을 위해 좋은 도구를 선택하는 데 귀하의 권고가 필요합니다. 이 작업을위한 나의 초기 선택은 sqlalchemy
입니다. 데이터베이스의 구조는 이미 존재하며 서로 다릅니다. 표를 편집 할 수 없습니다.python을 사용하여 SQL alchemy를 사용하여 서로 다른 두 데이터베이스 구조간에 유사한 데이터를 마이그레이션하는 방법은 무엇입니까?
몇 가지 간단한 예를 참조하십시오. 내가 테이블 Person
및 PersonAdress
을 SQL Server
에 있다고 가정 해 보겠습니다. name
, name2
, surname
과 같은 입력란이 있으며 person_address_id
은 foreign key
, birth_date
으로 유지됩니다. Oracle
데이터베이스에서
나는 모델 PERSON_DATA
내가 NAME
, NAME2
, SUERNAME
, DATE_OF_BIRTH . The table
PERSON_ADRESS keeps the
PERSON_DATA_ID as
외국 key` 같은 필드가 PERSON_ADDRES
있습니다. fieelds의 1) 이름은 다를 수있다 (ORACLE에서 SQL Server
에서 birth_date
및 DATE_OF_BIRTH
)하지만 같은 개념을 나타냅니다 :
그래서 두 가지 문제가 있습니다. 동일한 개념을 나타내는
2) 데이터 person_address_id
PERSON_ADRESS
는 오라클에 '외래 키)로 유지 SQL_SERVER
PERSON_DATA_ID
표 Person
의 외래 키 (다른 테이블 일 수있다.
automap_base
에서 sqlalchemy.ext.automap
까지 검색어 모델을 사용합니다. 그러나 나는 그것이 최고의 아이디어라는 것을 모른다. 이것은 내 의사 코드입니다. 어쩌면 내가 지금까지 시도한 것을 보여주는 데 도움이 될 것입니다.이 코드는 의사 코드 (pseudo-code)입니다.
from sqlalchemy import create_engine, MetaData
from sqlalchemy.ext.automap import automap_base
class PersonModel:
# DO i need this model? It suppose to represent Person table in
# SQL SERVER
def __init__(self, name, name2, birth_date, ...):
self.name = name
self.name2 = name2
...
class PERSON_DATAModel:
# Do I need this model? It supose to represent table in Oracle
def __init__(self, NAME, NAME2, DATE_OF_BIRTH, ...):
self.NAME = NAME
self.NAME2 = NAME2
metadata = MetaData()
sql_server_engine = create_engine('..')
metadata.reflect(sql_server_engine)
BaseSQLSERVER= automap_base(metadata=metadata)
BaseSQLSERVER.prepare()
metadata.reflect(sql_server_engine, only=['Person'])
BaseSQLSERVER.prepare()
Person = BaseSQLSERVER.classes.DaneOsMain
# The same what is above for Oracle
oracle_server_engine = create_engine('..')
# and so on..
# to get
PERSON_DATA = BaseOracle.classes.PERSON_DATA
session = Session(sql_server_engine)
query_data = sesion.query(Person)...
PersonTable = []
for data in query_data:
e = PersonModel(**query_data.__dict__)
PersonTable.append(e)
# I have to push data from PersonTable somehow to PERSON_DATA table
이 문제를 해결하기위한 좋은 정보를 알고 계십니까? 이 문제를 해결하기 위해 좋은 deisgn patern을 알고 싶습니다. 유용하게 사용할 수있는 도구는 python
입니다. 이 그것을보다 쉽게 될 수있는 한 시간 변환 인 경우
구조를 Oracle로 전송해야합니까, 아니면 이미 있습니까? 왜냐하면 외래 키나 스키마 관련 항목에 신경을 쓰는 이유는 대상에서 모든 제약 조건을 해제하고 원본 테이블에서 대상 테이블로 모든 데이터를 전송 한 다음 제약 조건을 다시 활성화하는 것입니다. – zwer
구조가 이미 있으며 변경할 수 없습니다. – Przemek
'ALTER TABLE'에 대한 권한이 없습니다?이 경우 외래 키가 모든 곳에서 (순환 제약의 가능성은 말할 것도 없지만) 어려워 질 수있는 정확한 순서로 데이터를 삽입 할 수 있도록 제약 트리를 작성해야하지만, 자동으로 그 일을 할 수있는 도구를 찾을 거라 생각합니다. – zwer