SQL Server異地資料庫每日同步作業操作步驟
SyncNavigator是一款專門用於SqlServer、Mysql資料同步的軟體,由國內頂級開發團隊開發完成,經歷8年逐步完善,目前具備強大的資料同步功能,國內很多大型連鎖超市,企業,公司都在用SyncNavigator資料同步軟體進行著資料同步服務。
它可以為我們提供智慧化資料同步,對您重要的資料庫進行實時同步操作,也可以設定定時任務傳輸,即使您的來源資料庫和目標資料庫版本不一樣,表結構不一樣,甚至是欄位不一樣,SyncNavigator也可以輕鬆幫您實現高效傳輸同步。
如果來源資料庫和目標資料庫表結構,欄位一樣,那麼全部保持預設設定即可,如果是異構資料庫,只需要動動滑鼠,輕鬆繫結來源資料庫表名和欄位,一一匹配,就能完成異構資料庫實時同步。
SyncNavigator可將資料庫同步到不同版本的資料庫上,無論你的資料庫是SqlServer 2000、還是SqlServer2008,還是SqlServer2014等,或者Mysql ,SyncNavigator都能輕鬆在他們之間無縫同步。
SyncNavigator資料庫同步軟體支援斷點續傳同步功能,第一次安裝配置好基本引數之後,就完全不用管,系統會在後臺執行,開關機也不影響資料同步,系統會在下次聯網的時候繼續上次未完成的作業,在資料庫同步的過程中出現故障,也能繼續同步資料庫,並確保資料完整性。
SyncNavigator同步是採用增量資料完成的,所以同步效率很高,每次只同步新資料或者新修改的資料,實時同步基本響應速度是毫秒級的,能迅速將源資料庫產生的新資料,或者修改的資料同步到目標資料庫上,確保資料完整性。
SyncNavigator有完善的日誌、報告郵件傳送功能,能保留每一步同步的步驟,供使用者查閱,郵件提醒功能能實時提醒傳輸進度。
SyncNavigator資料庫傳輸工具可以設定每張表的傳輸順序,以免有些表對別的邊的依賴性,先傳輸導致錯誤。
SyncNavigator資料庫傳輸工具可以設定傳輸開始或者結束後執行指定指令碼或者程式碼,能實現複雜的互動功能,讓使用者更靈活的實現自己需求。
支援分散式資料同步,可以把多個數據庫資料傳輸過來進行整合,也可以同時執行多個傳輸程序。
功能特色 SyncNavigator資料庫同步軟體特點: 1.能夠快速,持續,穩定的同步所需資料庫資料。在來源資料庫資料增加,修改或者刪除後自動同步到目標資料庫。 2.完整支援 Microsoft SQL Server。完整支援 Microsoft SQL Server 2000 2005 2008 2012 2014資料庫型別。並能在不同資料庫版本之間相互穩定高效同步資料,而不會出現問題。 3.完美支援 Mysql 4.1 以上版本。支援 Mysql 4.1 5.0 5.1 5.4 5.5 6.X。並能在不同資料庫版本之間相互同步資料,也可以將SqlServer 資料庫和Mysql資料庫之間進行同步,支援同構,異構資料庫同步。 4.只需要建立一個執行計劃就能在指定時間自動進行資料庫同步。輕鬆管理同步時間以及頻率,可以按天,或者按周,實時同步等,輕鬆設定,一鍵無憂。 5.不編寫SQL語句,不使用資料庫管理工具。與同類產品相比所需資料庫經驗知識最少,傻瓜式的同步設定,大多數情況下只需要設定來源資料庫地址,帳號密碼,目標資料庫地址,帳號密碼,然後其他保持預設,點選開始同步,就能完美完成資料同步需求。
需求:每小時同步一次資料,一天最多答十幾萬條。 由於剛進公司不久,小白只會PHP,所以第一時間會考慮用PHP實現,每次都是先truncate table 在插入表。
PHP初次實現
獲取所有的表名 根據表名獲取資料 一條一條插入資料(一條一條) 下面是獲取所有的資料後進行插入 //插入一個數據庫的資料道 gamedata資料庫 foreach ($datain as $k => $data) { $this->db = $this->load->database('default', TRUE); $table = 'report_record'; if (!empty($data)) { $this->db->insert($table, $data); } } 1 2 3 4 5 6 7 8 第二次 PHP優化 每天上班第一件事,看程序有沒有掛,果然掛了,經測試原來是記憶體不足所導致的。因此不能一次性插入所有的資料,想到自己每次同步的時間有點長,所以插入資料分為四次插入(注意分四次 因為有四個庫),同事吧記憶體設定大點,這樣效能已改要好點。
$return_data = []; foreach ($table1 as $table) { $sql = "select substring(create_time,1,10) dt, channelid,appid,baiduid from {$table} where substring(create_time,1,10)=DATE_SUB(curdate(),INTERVAL 0 DAY) "; //echo $sql; $data = $this->db1->query($sql)->result_array(); if (!empty($data)) { $return_data[] = $data; } } $insert_sql = ''; $num = 0; $time = date("Y-m-d H:i:s"); if (!empty($return_data)) { foreach ($return_data as $item1) { foreach ($item1 as $item2) { if (!empty($item2)) { $num++; $insert_sql .= "('{$item2['appid']}','{$time}','{$item2['dt']}','{$item2['channelid']}','{$item2['baiduid']}'),"; } } } $insert_sql = rtrim($insert_sql, ','); $this->db_sync->query($insert_sql_start . $insert_sql); error_log(date("Y-m-d H:i:s") . print_r('insert sql1 ' . $num . "\n", TRUE), 3, '/tmp/userchannellog'); } 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 第三次優化 使用shell 由於每次同步是一個表一個表的插入(時間大概需要3分鐘),當我在同步時,別人使用我的表,導致顯示的資料會存在上一個小時的資料不當前時間的資料少。更同事討論了一會。有兩種方案:
用PHP實現,建一個臨時表,每次同步的資料插入到一個臨時表中,最後再把臨時表同步到自己的表中,這樣誤差會很小,對於十幾萬左右資料。 用shell指令碼,因此在這裡就不用擔心記憶體問題。把所有資料同步到一個檔案裡,最終直接匯入。這樣誤差也會很小,對於十幾萬左右數。 到這裡我對以上者兩種方法執行效率有了興趣。當然我最終選擇用shell指令碼實現。
10萬條資料對比:
120萬條資料執行對比如下:
今天終於寫完自己的部落格了。在這實習期間總是覺得時間不夠用。 --------------------- 作者:calldatou 來源:CSDN 原文:https://blog.csdn.net/qq_28787211/article/details/78680602 版權宣告:本文為博主原創文章,轉載請附上博文連結!