遷移環境如下,對應版本dmhs軟件需要向商務申請
源端操作系統
|
kylin v10
|
|
源端庫及模式
|
目的端對應用戶
|
目的端操作系統
|
kylin v10
|
|
ZHBG.public
|
ZHBG
|
源端cpu構架
|
arm |
|
basedb.public
|
LEAPV6
|
目的端菜譜構架
|
arm |
|
|
|
源端數據庫
|
pg11
|
|
|
|
目的端數據庫
|
dm8
|
|
|
|
配置odbc(相關安裝配置見上篇文檔)
添加以下內容:注意驅動名必須是[PostgreSQL ANSI(x64)]//不是這個名字的驅動名,需要在dmhs.hs中指定driver參數明確驅動名
cat /etc/odbcinst.ini
[ PostgreSQL ANSI(x64) ]
Description = ODBC for PostgreSQL
Driver = /usr/lib/psqlodbcw.so
Setup = /usr/lib/libodbcpsqlS.so
Driver64 = /usr/lib64/psqlodbcw.so
Setup64 = /usr/lib64/libodbcpsqlS.so
FileUsage = 1
查看pg是否開啟歸檔,如沒開啟歸檔需要用戶自己開啟


源端和目的端安裝dmhs軟件(源端安裝忽略,和目的端安裝一樣)
[root@0015 ~]# ./dmhs_V4.1.48_pack4_dm8_rev104804_FTarm_kylin4_64_veri_20211228.bin -I
Extract install files.........
1.English(English)
2.Simplified Chinese(簡體中文)
Select the language to install[2.Simplified Chinese(簡體中文)]:
/tmp/DMHSInstall/install.log
1.免費試用達夢數據實時同步
2.使用已申請的Key文件
驗證許可證文件[1.免費試用達夢數據實時同步]:2
Key文件路徑:/root/dmhs.key
Key文件限制信息如下:
有效日期:2022-09-25
用戶名稱:達夢公司產品試用
服務器頒布類型:試用版
發布類型:企業版
Key類型:企業版
授權用戶數:無限制
並發連接數:無限制
1.精簡版
2.完整版(web客戶端)
3.自定義
安裝類型[1.精簡版]:2
1.實時同步軟件服務器
2.遠程部署工具
3.實時同步軟件客戶端
4.內置數據庫
5.實時同步軟件配置助手
6.手冊
所需磁盤空間:691 MB
安裝目錄: [/opt/dmhs]
該路徑不為空,是否繼續安裝?[Y or N]y
安裝路徑可能存在覆蓋安裝
1.統一部署
2.現在初始化
是否初始化達夢數據實時同步系統[1.統一部署]:1
正在安裝
default start ... default finished.
server start ... server finished.
hs_agent start ... hs_agent finished.
webmanager start ... webmanager finished.
db start ... db finished.
hsca start ... hsca finished.
doc start ... doc finished.
doc start ... doc finished.
postinstall start ... postinstall finished.
正在創建快捷方式
安裝成功
遠程部署工具配置
遠程部署工具名稱[HsAgent]:
主機Ip(外網)[]():
遠程部署工具管理端口[5456](1000-65535):
內置數據庫輪詢間隔[3](1-60):
內置數據庫IP[]:
內置數據庫端口[15236]:
內置數據庫用戶名[SYSDBA]:
內置數據庫密碼[SYSDBA]:
服務腳本環境變量設置
依賴庫路徑
提示:此配置項供用戶配置源或目的數據庫依賴庫路徑和odbc依賴庫路徑, 多個路徑以":"隔開(例:/opt/dmdbms/bin:/usr/local/lib),此配置項會添加到服務腳本的NEED_LIB_PATH的變量值中。
請配置依賴庫路徑:/home/dmdba/dmdbms/bin
內置數據庫服務
1.自動
2.手動
啟動方式:[2.手動]
正在創建內置數據庫服務
初始化內置數據庫
遠程控制服務
1.自動
2.手動
啟動方式:[2.手動]
正在創建遠程控制服務
web服務
1.自動
2.手動
啟動方式:[2.手動]
正在創建web服務
達夢數據實時同步V4.0安裝完成
更多安裝信息,請查看安裝日志文件:
/opt/dmhs/log/install.log
源端和目的端都切換到軟件安裝/opt/dmhs/bin目錄,修改服務名
cp TemplateDmhsService DmhsService
編輯服務名(紅色地方路徑根據實時情況填寫)
vi DmhsService
DMHS_HOME=/dmhs
PROG_DIR=/dmhs/bin
CONF_PATH=/dmhs/bin/dmhs.hs
#REPLACE need library path, LD_LIBRARY_PATH/LIBPATH
NEED_LIB_PATH=
HS_NLS_LANG="AMERICAN_AMERICA.ZHS16GBK"
目的達夢端創建遷移用戶及需要遷移的 ZHBG和LEAPV6
create tablespace "postgres" datafile '/dbdata/dmdb/postgres.dbf' size 128 autoextend on maxsize 33554431 CACHE = NORMAL;
create user "postgres" identified by "dameng123" default tablespace "postgres" default index tablespace "postgres";
grant "DBA","PUBLIC","VTI","SOI" to postgres;
目的端dmhs.hs配置文件 cat /opt/dmhs/bin/dmhs.hs
<?xml version="1.0" encoding="GB2312"?>
<dmhs>
<base>
<lang>en</lang>
<mgr_port>5345</mgr_port>
<ckpt_interval>60</ckpt_interval>
<siteid>2</siteid>
<version>2.0</version>
</base>
<exec>
<recv>
<data_port>5346</data_port>
</recv>
<db_type>DM8</db_type>
<db_server>達夢端ip</db_server>
<db_user>postgres</db_user>
<db_pwd>dameng123</db_pwd>
<db_port>5236</db_port>
<char_code>PG_UTF8</char_code>
<db_name></db_name>
<exec_thr>8</exec_thr>
<exec_sql>1024</exec_sql>
<exec_trx>2000</exec_trx>
<exec_rows>2000</exec_rows>
<ddl_continue>1</ddl_continue>
<affect_row>0</affect_row>
<exec_policy>2</exec_policy>
<enable_rowid>0</enable_rowid>
<clear_trx_file>1</clear_trx_file>
<trx_max_file>8</trx_max_file>
</exec>
</dmhs>
源端dmhs.hs配置文件 cat /opt/dmhs/bin/dmhs.hs
<?xml version="1.0" encoding="GB2312"?>
<dmhs>
<base>
<siteid>1</siteid>
<mgr_port>5345</mgr_port>
<chk_interval>3</chk_interval>
<ckpt_interval>60</ckpt_interval>
<lang>en</lang>
<version>2.0</version>
</base>
<cpt>
<db_type>postgres</db_type>
<db_server>pg端ip</db_server>
<db_user>postgres</db_user>
<db_pwd>longrise@123456</db_pwd>
<db_name>ZHBG</db_name>
<db_port>54320</db_port>
<idle_time>300</idle_time>
<ddl_mask>op:obj</ddl_mask>
<char_code>PG_UTF8</char_code>
<constraint>1</constraint>
<arch>
<clear_interval>600</clear_interval>
<clear_flag>0</clear_flag>
</arch>
<send>
<ip>達夢端ip</ip>
<mgr_port>5345</mgr_port>
<data_port>5346</data_port>
<net_pack_size>256</net_pack_size>
<net_turns>0</net_turns>
<crc_check>0</crc_check>
<trigger>0</trigger>
<constraint>0</constraint>
<identity>0</identity>
<filter>
<enable>
<item>public.*</item>
</enable>
<disable>
</disable>
</filter>
<map>
<item>public.*==ZHBG.*</item>
</map>
</send>
</cpt>
<cpt>
<db_type>postgres</db_type>
<db_server>pg端ip</db_server>
<db_user>postgres</db_user>
<db_pwd>longrise@123456</db_pwd>
<db_name>LEAPV6</db_name>
<db_port>54320</db_port>
<idle_time>300</idle_time>
<ddl_mask>op:obj</ddl_mask>
<char_code>PG_UTF8</char_code>
<constraint>1</constraint>
<arch>
<clear_interval>600</clear_interval>
<clear_flag>0</clear_flag>
</arch>
<send>
<ip>達夢端ip</ip>
<mgr_port>5345</mgr_port>
<data_port>5346</data_port>
<net_pack_size>256</net_pack_size>
<net_turns>0</net_turns>
<crc_check>0</crc_check>
<trigger>0</trigger>
<constraint>0</constraint>
<identity>0</identity>
<filter>
<enable>
<item>public.*</item>
</enable>
<disable>
</disable>
</filter>
<map>
<item>public.*==LEAPV6.*</item>
</map>
</send>
</cpt>
</dmhs>
目端和目的端分別啟動dmhs服務
./DmhsService start
目的端運行 DMHS 軟件工具 dmhs_console,連接執行端 DMHS 服務,啟動日志執行模塊,控制台管理工具中執行如下 DMHS 命令
[


源端執行端運行 DMHS 軟件工具dmhs_console,連接源端 DMHS 服務,設置日志捕獲模塊起始 LSN,裝載源端字典信息及歷史數據


這里加載模式為public
COPY 0 "SCH.NAME ='public'" DICT|CREATE|COMMENT|INSERT|INDEX|THREAD|8|DROP
加載完之后, 執行 start cpt
數據遷移完之后,在達夢數據庫收集一下統計信息
select 'DBMS_STATS.GATHER_SCHEMA_STATS('''||username||''',100,TRUE,''FOR ALL COLUMNS SIZE AUTO'');' from all_users;
源端加載碰到問題如下


/opt/dmhs/bin/log 日志如下報錯,缺少libodbc.so.1包


找到libodbc.so包,創建軟鏈接
ln -s /usr/lib64/libodbc.so /lib64/libodbc.so.1


在/opt/dmhs/bin目錄下面ldd libcpt_pg.so看下是否缺少其他的依賴包


之后加載又報如下錯誤(前面配置odbc配置文件 驅動名不是 [PostgreSQL ANSI(x64)] )


遷移常見問題匯總
1.裝odbc驅動問題
源碼包有問題的,換rpm包,一般本地yum源的postgresql-odbc即可,或者下載對應os版本的驅動rpm包再安裝。
2.啟動cpt問題
啟動報錯找不到libcpt_pg.so
ldd libcpt_pg.so
出現缺少的是libodbc.so.1(odbc驅動)
find / -name libodbc.so 文件
位於/usr/lib64/目錄,到該目錄創建軟連接解決:
ln -s libodbc.so libodbc.so.1
3.初始化數據問題1
copy 0 "sch.name='PUBLIC'" CREATE|INSERT|DICT
源端報錯找不到PUBLIC模式的任何表,注意pg數據庫默認模式名都是小寫,需要換成小寫即可。
copy 0 "sch.name='public'" CREATE|INSERT|DICT
此時目的端報錯不識別對象,需要修改dmhs.hs參數 。2表示轉換成大寫。
<toggle_case>2</toggle_case>
4.初始化數據庫問題2
源端pg庫表有默認值引用序列,dm端建表失敗,報錯無效的默認值表達式。
可以在目的端dmhs.hs中添加ignore_default參數:1為忽略字段默認值。
<ignore_default>1</ignore_default>
需要初始化完成后手工修改表加上默認值。(這個工作量有點大,提需求了,讓hs具體schema的識別序列)(最新版hs可以支持默認值引用對應schema的序列)
5.同步數據中文亂碼問題
為源端pg庫dmhs.hs文件添加參數(pg庫字符集是utf8):該參數不設置時,默認值是gb18030
<char_code>PG_UTF8</char_code>
6.目的端同步失敗會退出dmhs問題
修改目的端修改dmhs.hs參數,該參數默認為1表示出錯中斷同步,2表示出錯繼續同步不保證事務完整性,0表示繼續同步但保持事務完整。
<exec_policy>2</exec_policy>
7.無主鍵同步失敗問題
同步表無主鍵時,dmhs默認以所有字段為聯合主鍵。
pg端表中timestamp小數秒只有3位,達夢是6位小數秒,會自動補齊3位,
update操作時,表無主鍵,以全部列為主鍵,小數秒不一致,所以找不到要update的數據,報錯。
添加主鍵后update同步成功。(原則上dmhs只配置有主鍵的表同步。)
8.字段類型精度不兼容問題
pg庫字段類型varchar(10240)精度在dm不兼容的
需要修改類型為text。