1. 개요
EntityCopy는 DCL로 개발된 데이터베이스 데이터 복사 유틸리티입니다.
DCL은 Linux를 비롯한 UNIX 운영체제와 Microsoft Windows 운영체제에서 소스프로그램 수준의 이식성있는 C++ 클래스 라이브러리 입니다.
DCL에는 Firebird, InterBase, Informix, MariaDB, MySQL, Oracle Database 네이티브 C 프로그래밍 언어 API를 사용한 드라이버 구현을 포함합니다.
EntityCopy는 데이터베이스 스키마에 포함된 테이블 전체 또는 일부를 서로다른 벤더(vendor)의 데이터베이스로 복사할 수 있습니다.
EntityCopy는 데이터베이스간 DDL을 생성하지 않으며, TRUNCATE(or DELETE), SELECT, INSERT를 사용하여 데이터를 단순 복사합니다.
2. 다운로드
Linux x86_64 바이너리
Windows x86_64 바이너리
- entitycopy-1.0-windows-x86_64.zip
- entitycopy-1.0-windows-x86_64-bundle.zip
Source Code
3. Linux 구성
3.1. dcl
배포 패키지의 압축을 풀면 dcl 디렉토리에 다음의 파일이 포함되어 있습니다. 파일명이 'D' 또는 'd'로 종결되는 파일은 DEBUG 빌드된 것을 표시합니다.
bin은 PATH에 포함시키고, lib는 LD_LIBRARY_PATH
에 포함시킵니다.
bin
- entitycopy, entitycopyD
lib
- libDCLCore.so, libDCLCored.so
- DCLFirebird.so, DCLFirebirdd.so
- DCLInformix.so, DCLInformixd.so
- DCLInterBase.so, DCLInterBased.so
- DCLMariaDB.so, DCLMariaDBd.so
- DCLOracleDb.so, DCLOracleDbd.so
- DCLPostgreSQL.so, DCLPostgreSQLd.so
다음은 Linux 환경변수 구성의 예입니다.
1 | export FIREBIRD='/opt/firebird-5.0.2' |
2 | export INFORMIXDIR='/opt/informix-csdk-4.50' |
3 | export INTERBASE='/opt/interbase-14.6' |
4 | export ORACLE_HOME='/opt/oracle-client-21.3' |
5 | export PATH=${PATH}:${INFORMIXDIR}/bin:${ORACLE_HOME}/bin |
6 | export LD_LIBRARY_PATH=/opt/dcl/lib:${FIREBIRD}/lib:${INFORMIXDIR}/lib:${INFORMIXDIR}/lib/esql:${INTERBASE}/lib:${ORACLE_HOME}/lib |
3.2. Firebird
FIrebird 서버패키지에서 libfbclient.so가 포함된 lib 디렉토리를 LD_LIBRARY_PATH
에 포함시킵니다.
3.3. Informix
Informix 드라이버는 Informix ESQL/C로 구현되어 있습니다.
Informix CSDK를 설치한 후,
${INFORMIXDIR}/lib/esql 디렉토리를 LD_LIBRARY_PATH
에 포함시킵니다.
3.4. InterBase
InterBase 서버패키지에서 libgds.so가 포함된 lib 디렉토리를 LD_LIBRARY_PATH
에 포함시킵니다.
3.5. MariaDB
MariaDB 드라이버는 MariaDB Connector/C로 빌드 되었습니다.
다음과 같이 이를 설치합니다.
1 | # Ubuntu, Debian |
2 | apt update; apt install -y libmariadb |
3 |
|
4 | # RHEL, Rocky, Oracle Linux |
5 | dnf install -y mariadb-connector-c |
3.6. Oracle Database
Oracle Instant Client를 설치 한 후,
libclntsh.so가 포함된 디렉토리를 LD_LIBRARY_PATH
에 포함시킵니다.
Ubuntu 24.04 noble의 경우 libaio1t64 배포 패키지에 오류가 있습니다.
1 | # dpkg -L libaio1t64 |
2 | sudo ln -s /usr/lib/x86_64-linux-gnu/libaio.so.1t64.0.2 /usr/lib/x86_64-linux-gnu/libaio.so.1 |
3.7. PostgreSQL
PostgreSQL 드라이버는 PostgreSQL Client Interfaces로 빌드 되었습니다.
다음과 같이 이를 설치합니다.
1 | # Ubuntu, Debian |
2 | apt update; apt install -y libecpg6 |
3 |
|
4 | # RHEL, Rocky, Oracle Linux |
5 | dnf install -y libecpg |
4. Windows 구성
4.1. dcl
배포 패키지의 압축을 풀면 dcl 디렉토리에 다음의 파일이 포함되어 있습니다. 파일명이 'D' 또는 'd'로 종결되는 파일은 DEBUG 빌드된 것을 표시합니다.
DCL을 PATH에 포함시킵니다.
DCL
- DCLCore.dll, DCLCored.dll
- DCLFirebird.dll, DCLFirebirdd.dll
- DCLInformix.dll, DCLInformixd.dll
- DCLInterBase.dll, DCLInterBased.dll
- DCLMariaDB.dll, DCLMariaDBd.dll
- DCLOracleDb.dll, DCLOracleDbd.dll
- DCLPostgreSQL.dll, DCLPostgreSQLd.dll
- EntityCopy.exe, EntityCopyD.exe
- expat.dll, expatd.dll
1 | set DCL=D:\Opt\DCL |
2 | set FIREBIRD=D:\Opt\Firebird |
3 | set INFORMIXDIR=D:\Opt\informix |
4 | set INTERBASE=D:\Opt\InterBase |
5 | set MARIADB=D:\Opt\mariadb-connector-c-3.4.3 |
6 | set ORACLE_HOME=D:\Opt\oracle21_client_home |
7 | set POSTGRESQL=D:\Opt\PostgreSQL17 |
8 | set Path=%Path%;%DCL%;%FIREBIRD%;%INFORMIXDIR%\bin;%INTERBASE%\bin;%MARIADB%\lib64;%ORACLE_HOME%\bin;%POSTGRESQL%\bin |
4.2. Microsoft Visual C++ Redistributable
배포 패키지는 Visual Studio 2022로 빌드되었습니다.
필요한 경우 다음에서 다운로드하여 설치합니다.
https://learn.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist
4.3. Firebird
FIrebird 서버패키지에서 fbclient.dll이 포함된 디렉토리를 PATH에 포함시킵니다.
4.4. Informix
Informix 드라이버는 Informix ESQL/C로 구현되어 있습니다.
Informix CSDK를 설치한 후, ${INFORMIXDIR}\bin 디렉토리를 PATH에 포함시킵니다.
4.5. InterBase
InterBase 서버패키지에서 ibclient64.dll이 포함된 bin 디렉토리를 PATH에 포함시킵니다.
4.6. MariaDB
MariaDB Connector/C Windows 바이너리를 설치한 후, libmariadb.dll이 포함된 lib64 디렉토리를 PATH에 포함시킵니다.
4.7. Oracle Database
Oracle Instant Client를 설치 한 후, oci.dll이 포함된 디렉토리를 PATH에 포함시킵니다.
legacy.dll, oci.dll, oraociicus.dll 세 파일만 있어도 동작합니다.
4.8. PostgreSQL
PostgreSQL Windows 클라이언트를 별도의 패키지로 배포하지 않는 것 같습니다.
PostgreSQL Windows installers를 다운로드 한 후, bin 디렉토리를 PATH에 포함시킵니다.
PostgreSQL 드라이버는 libpq, libecpg를 사용하도록 빌드되었습니다. Windows에서 이 외에 필요한 파일은 본 문서의 하단에 별도로로 표기되어 있습니다.
5. 사용
5.1. 실행
1 | # Windows |
2 | EntityCopy.exe ^ |
3 | --source="DRIVER=DCLFirebird;USER=TIMETABLE;PASSWORD=TIMETABLE;SERVER=g02u24kn2/32055;DATABASE=TIMETABLE" ^ |
4 | --destination="DRIVER=DCLInterBase;USER=SYSDBA;PASSWORD=masterkey;SERVER=n0317ud70p/3050;DATABASE=TIMETABLE-UTF8" ^ |
5 | --truncate --verbose --dry-run |
6 |
|
7 | EntityCopy.exe ^ |
8 | --source="DRIVER=DCLFirebird;USER=NETIS;PASSWORD=NETIS;SERVER=g02u24kn2/32055;DATABASE=NETIS" ^ |
9 | --destination="DRIVER=DCLInterBase;USER=SYSDBA;PASSWORD=masterkey;SERVER=n0317ud70p/3050;DATABASE=NETIS-UTF8" ^ |
10 | --truncate --rows=100000 --verbose --dry-run |
11 |
|
12 | EntityCopy.exe --source="DRIVER=DCLOracleDb;USER=MT100;PASSWORD=MT100;DATABASE=g02r08od21:1521/AL32UTF8" ^ |
13 | --destination="DRIVER=DCLInterBase;USER=SYSDBA;PASSWORD=masterkey;SERVER=n0317ud70p/3050;DATABASE=MT100" ^ |
14 | --truncate --rows=100000 --i8-precision=20 --verbose --dry-run |
15 |
|
16 | # Linux |
17 | entitycopy \ |
18 | --source="DRIVER=DCLFirebird;USER=TIMETABLE;PASSWORD=TIMETABLE;SERVER=g02u24kn2/32055;DATABASE=TIMETABLE" \ |
19 | --destination="DRIVER=DCLInterBase;USER=SYSDBA;PASSWORD=masterkey;SERVER=n0317ud70p/3050;DATABASE=TIMETABLE-UTF8" \ |
20 | --truncate --verbose --dry-run |
21 |
|
22 | entitycopy \ |
23 | --source="DRIVER=DCLFirebird;USER=NETIS;PASSWORD=NETIS;SERVER=g02u24kn2/32055;DATABASE=NETIS" \ |
24 | --destination="DRIVER=DCLInterBase;USER=SYSDBA;PASSWORD=masterkey;SERVER=n0317ud70p/3050;DATABASE=NETIS-UTF8" \ |
25 | --truncate --rows=10000 --verbose --dry-run |
5.2. 데이터베이스 연결
1 | DRIVER=DCLFirebird; USER=MT100;PASSWORD=YourPass;SERVER=g02u24kn2/32055;DATABASE=MT100 |
2 | DRIVER=DCLInformix; USER=mt100;PASSWORD=YourPass;SERVER=informix02;DATABASE=mt100 |
3 | DRIVER=DCLInterBase; USER=MT100;PASSWORD=YourPass;SERVER=n0317ud70p/3050;DATABASE=MT100 |
4 | DRIVER=DCLMariaDB; USER=MT100;PASSWORD=YourPass;SERVER=g02u24kn2;PORT=32011;DATABASE=MT100 |
5 | DRIVER=DCLOracleDb; USER=MT100;PASSWORD=YourPass;DATABASE=g02r08od21:1521/AL32UTF8 |
6 | DRIVER=DCLPostgreSQL;USER=MT100;PASSWORD=YourPass;DATABASE=tcp:postgresql://g02u24kn2:32017/MT100 |