postgresql跨機房同步
1、PostgreSQL兩個數據庫同步
你說的類似oracle中的RAC嗎?目前postgre沒有。現在postgre只有類似oracle中的DG,并且主庫是可讀寫,從庫是只讀(低版本的postgre不能讀)。
當主庫發生錯誤,需要手動切換
2、怎么實現兩個數據庫的同步
同步兩個SQLServer數據庫
如何同步兩個sqlserver數據庫的內容?程序代碼可以有版本管理cvs進行同步管理,可是數據庫同步就非常麻煩,只能自己改了一個后再去改另一個,如果忘記了更改另一個經常造成兩個數據庫的結構或內容上不一致.各位有什么好的方法嗎?
一、分發與復制
用強制訂閱實現數據庫同步操作. 大量和批量的數據可以用數據庫的同步機制處理:
//
說明:
為方便操作,所有操作均在發布服務器(分發服務器)上操作,并使用推模式
在客戶機器使用強制訂閱方式。
二、測試通過
1:環境
服務器環境:
機器名稱: zehuadb
操作系統:windows 2000 server
數據庫版本:sql 2000 server 個人版
客戶端
機器名稱:zlp
操作系統:windows 2000 server
數據庫版本:sql 2000 server 個人版
2:建用戶帳號
在服務器端建立域用戶帳號
我的電腦管理->本地用戶和組->用戶->建立
username:zlp
userpwd:zlp
3:重新啟動服務器mssqlserver
我的電腦->控制面版->管理工具->服務->mssqlserver 服務
(更改為:域用戶帳號,我們新建的zlp用戶 .\zlp,密碼:zlp)
4:安裝分發服務器
a:配置分發服務器
工具->復制->配置發布、訂閱服務器和分發->下一步->下一步(所有的均采用默認配置)
b:配置發布服務器
工具->復制->創建和管理發布->選擇要發布的數據庫(sz)->下一步->快照發布->下一步->選擇要發布的內容->下一步->下一步->下一步->完成
c:強制配置訂閱服務器(推模式,拉模式與此雷同)
工具->復制->配置發布、訂閱服務器和分發->訂閱服務器->新建->sql server數據庫->輸入客戶端服務器名稱(zlp)->使用sql server 身份驗證(sa,空密碼)->確定->應用->確定
d:初始化訂閱
復制監視器->發布服務器(zehuadb)->雙擊訂閱->強制新建->下一步->選擇啟用的訂閱服務器->zlp->下一步->下一步->下一步->下一步->完成
5:測試配置是否成功
復制監視器->發布衿?zehuadb)->雙擊sz:sz->點狀態->點立即運行代理程序
查看:
復制監視器->發布服務器(zehuadb)->sz:sz->選擇zlp:sz(類型強制)->鼠標右鍵->啟動同步處理
如果沒有錯誤標志(紅色叉),恭喜您配置成功
6:測試數據
在服務器執行:
選擇一個表,執行如下sql: insert into wq_newsgroup_s select '測試成功',5
復制監視器->發布服務器(zehuadb)->sz:sz->快照->啟動代理程序 ->zlp:sz(強制)->啟動同步處理
去查看同步的 wq_newsgroup_s 是否插入了一條新的記錄
測試完畢,通過。
7:修改數據庫的同步時間,一般選擇夜晚執行數據庫同步處理
(具體操作略) :d
/*
注意說明:
服務器一端不能以(local)進行數據的發布與分發,需要先刪除注冊,然后新建注冊本地計算機名稱
卸載方式:工具->復制->禁止發布->是在"zehuadb"上靜止發布,卸載所有的數據庫同步配置服務器
注意:發布服務器、分發服務器中的sqlserveragent服務必須啟動
采用推模式: "d:\microsoft sql server\mssql\repldata\unc" 目錄文件可以不設置共享
拉模式:則需要共享~!
*/
少量數據庫同步可以采用觸發器實現,同步單表即可。
三、配置過程中可能出現的問題
在sql server 2000里設置和使用數據庫復制之前,應先檢查相關的幾臺sql server服務器下面幾點是否滿足:
1、mssqlserver和sqlserveragent服務是否是以域用戶身份啟動并運行的(.\administrator用戶也是可以的)
如果登錄用的是本地系統帳戶local,將不具備網絡功能,會產生以下錯誤:
進程未能連接到distributor '@server name'
(如果您的服務器已經用了sql server全文檢索服務, 請不要修改mssqlserver和sqlserveragent服務的local啟動。
會照成全文檢索服務不能用。請換另外一臺機器來做sql server 2000里復制中的分發服務器。)
修改服務啟動的登錄用戶,需要重新啟動mssqlserver和sqlserveragent服務才能生效。
2、檢查相關的幾臺sql server服務器是否改過名稱(需要srvid=0的本地機器上srvname和datasource一樣)
在查詢分析器里執行:
use master
select srvid,srvname,datasource from sysservers
如果沒有srvid=0或者srvid=0(也就是本機器)但srvname和datasource不一樣, 需要按如下方法修改:
use master
go
-- 設置兩個變量
declare @serverproperty_servername varchar(100),
@servername varchar(100)
-- 取得windows nt 服務器和與指定的 sql server 實例關聯的實例信息
select @serverproperty_servername = convert(varchar(100), serverproperty('servername'))
-- 返回運行 microsoft sql server 的本地服務器名稱
select @servername = convert(varchar(100), @@servername)
-- 顯示獲取的這兩個參數
select @serverproperty_servername,@servername
--如果@serverproperty_servername和@servername不同(因為你改過計算機名字),再運行下面的
--刪除錯誤的服務器名
exec sp_dropserver @server=@servername
--添加正確的服務器名
exec sp_addserver @server=@serverproperty_servername, @local='local'
修改這項參數,需要重新啟動mssqlserver和sqlserveragent服務才能生效。
這樣一來就不會在創建復制的過程中出現18482、18483錯誤了。
3、檢查sql server企業管理器里面相關的幾臺sql server注冊名是否和上面第二點里介紹的srvname一樣
不能用ip地址的注冊名。
(我們可以刪掉ip地址的注冊,新建以sql server管理員級別的用戶注冊的服務器名)
這樣一來就不會在創建復制的過程中出現14010、20084、18456、18482、18483錯誤了。
4、檢查相關的幾臺sql server服務器網絡是否能夠正常訪問
如果ping主機ip地址可以,但ping主機名不通的時候,需要在
winnt\system32\drivers\etc\hosts (win2000)
windows\system32\drivers\etc\hosts (win2003)
文件里寫入數據庫服務器ip地址和主機名的對應關系。
例如:
127.0.0.1 localhost
192.168.0.35 oracledb oracledb
192.168.0.65 fengyu02 fengyu02
202.84.10.193 bj_db bj_db
或者在sql server客戶端網絡實用工具里建立別名,例如:
5、系統需要的擴展存儲過程是否存在(如果不存在,需要恢復):
sp_addextendedproc 'xp_regenumvalues',@dllname ='xpstar.dll'
go
sp_addextendedproc 'xp_regdeletevalue',@dllname ='xpstar.dll'
go
sp_addextendedproc 'xp_regdeletekey',@dllname ='xpstar.dll'
go
sp_addextendedproc xp_cmdshell ,@dllname ='xplog70.dll'
接下來就可以用sql server企業管理器里[復制]-> 右鍵選擇 ->[配置發布、訂閱服務器和分發]的圖形界面來配置數據庫復制了。
下面是按順序列出配置復制的步驟:
1、建立發布和分發服務器
[歡迎使用配置發布和分發向導]->[選擇分發服務器]->[使"@servername"成為它自己的分發服務器,sql server將創建分發數據庫和日志]
->[制定快照文件夾]-> [自定義配置] -> [否,使用下列的默認配置] -> [完成]
上述步驟完成后, 會在當前"@servername" sql server數據庫里建立了一個distribion庫和 一個distributor_admin管理員級別的用戶(我們可以任意修改密碼)。
服務器上新增加了四個作業:
[ 代理程序歷史記錄清除: distribution ]
[ 分發清除: distribution ]
[ 復制代理程序檢查 ]
[ 重新初始化存在數據驗證失敗的訂閱 ]
sql server企業管理器里多了一個復制監視器, 當前的這臺機器就可以發布、分發、訂閱了。
我們再次在sql server企業管理器里[復制]-> 右鍵選擇 ->[配置發布、訂閱服務器和分發]
我們可以在 [發布服務器和分發服務器的屬性] 窗口-> [發布服務器] -> [新增] -> [確定] -> [發布數據庫] -> [事務]/[合并] -> [確定] -> [訂閱服務器] -> [新增] -> [確定]
把網絡上的其它sql server服務器添加成為發布或者訂閱服務器.
新增一臺發布服務器的選項:
我這里新建立的jin001發布服務器是用管理員級別的數據庫用戶test連接的,
到發布服務器的管理鏈接要輸入密碼的可選框, 默認的是選中的,
在新建的jin001發布服務器上建立和分發服務器fengyu/fengyu的鏈接的時需要輸入distributor_admin用戶的密碼。到發布服務器的管理鏈接要輸入密碼的可選框,也可以不選,也就是不需要密碼來建立發布到分發服務器的鏈接(這當然欠缺安全,在測試環境下可以使用)。
2、新建立的網絡上另一臺發布服務器(例如jin001)選擇分發服務器
[歡迎使用配置發布和分發向導]->[選擇分發服務器]
-> 使用下列服務器(選定的服務器必須已配置為分發服務器) -> [選定服務器](例如fengyu/fengyu)
-> [下一步] -> [輸入分發服務器(例如fengyu/fengyu)的distributor_admin用戶的密碼兩次]
-> [下一步] -> [自定義配置] -> [否,使用下列的默認配置]
-> [下一步] -> [完成] -> [確定]
建立一個數據庫復制發布的過程:
[復制] -> [發布內容] -> 右鍵選擇 -> [新建發布]
-> [下一步] -> [選擇發布數據庫] -> [選中一個待發布的數據庫]
-> [下一步] -> [選擇發布類型] -> [事務發布]/[合并發布]
-> [下一步] -> [指定訂閱服務器的類型] -> [運行sql server 2000的服務器]
-> [下一步] -> [指定項目] -> [在事務發布中只可以發布帶主鍵的表] -> [選中一個有主鍵的待發布的表]
->[在合并發布中會給表增加唯一性索引和 rowguidcol 屬性的唯一標識符字段[rowguid],默認值是newid()]
(添加新列將: 導致不帶列列表的 insert 語句失敗,增加表的大小,增加生成第一個快照所要求的時間)
->[選中一個待發布的表]
-> [下一步] -> [選擇發布名稱和描述] ->
-> [下一步] -> [自定義發布的屬性] -> [否,根據指定方式創建發布]
-> [下一步] -> [完成] -> [關閉]
發布屬性里有很多有用的選項:設定訂閱到期(例如24小時)
設定發布表的項目屬性:
常規窗口可以指定發布目的表的名稱,可以跟原來的表名稱不一樣。
下圖是命令和快照窗口的欄目
( sql server 數據庫復制技術實際上是用insert,update,delete操作在訂閱服務器上重做發布服務器上的事務操作
看文檔資料需要把發布數據庫設成完全恢復模式,事務才不會丟失
但我自己在測試中發現發布數據庫是簡單恢復模式下,每10秒生成一些大事務,10分鐘后再收縮數據庫日志,
這期間發布和訂閱服務器上的作業都暫停,暫停恢復后并沒有丟失任何事務更改 )
發布表可以做數據篩選,例如只選擇表里面的部分列:
例如只選擇表里某些符合條件的記錄, 我們可以手工編寫篩選的sql語句:
發布表的訂閱選項,并可以建立強制訂閱:
成功建立了發布以后,發布服務器上新增加了一個作業: [ 失效訂閱清除 ]
分發服務器上新增加了兩個作業:
[ jin001-dack-dack-5 ] 類型[ repl快照 ]
[ jin001-dack-3 ] 類型[ repl日志讀取器 ]
上面藍色字的名稱會根據發布服務器名,發布名及第幾次發布而使用不同的編號
repl快照作業是sql server復制的前提條件,它會先把發布的表結構,數據,索引,約束等生成到發布服務器的os目錄下文件
(當有訂閱的時候才會生成, 當訂閱請求初始化或者按照某個時間表調度生成)
repl日志讀取器在事務復制的時候是一直處于運行狀態。(在合并復制的時候可以根據調度的時間表來運行)
建立一個數據庫復制訂閱的過程:
[復制] -> [訂閱] -> 右鍵選擇 -> [新建請求訂閱]
-> [下一步] -> [查找發布] -> [查看已注冊服務器所做的發布]
-> [下一步] -> [選擇發布] -> [選中已經建立發布服務器上的數據庫發布名]
-> [下一步] -> [指定同步代理程序登錄] -> [當代理程序連接到代理服務器時:使用sql server身份驗證]
(輸入發布服務器上distributor_admin用戶名和密碼)
-> [下一步] -> [選擇目的數據庫] -> [選擇在其中創建訂閱的數據庫名]/[也可以新建一個庫名]
-> [下一步] -> [允許匿名訂閱] -> [是,生成匿名訂閱]
-> [下一步] -> [初始化訂閱] -> [是,初始化架構和數據]
-> [下一步] -> [快照傳送] -> [使用該發布的默認快照文件夾中的快照文件]
(訂閱服務器要能訪問發布服務器的repldata文件夾,如果有問題,可以手工設置網絡共享及共享權限)
-> [下一步] -> [快照傳送] -> [使用該發布的默認快照文件夾中的快照文件]
-> [下一步] -> [設置分發代理程序調度] -> [使用下列調度] -> [更改] -> [例如每五分鐘調度一次]
-> [下一步] -> [啟動要求的服務] -> [該訂閱要求在發布服務器上運行sqlserveragent服務]
-> [下一步] -> [完成] -> [確定]
成功建立了訂閱后,訂閱服務器上新增加了一個類別是[repl-分發]作業(合并復制的時候類別是[repl-合并])
它會按照我們給的時間調度表運行數據庫同步復制的作業。
3、sql server復制配置好后, 可能出現異常情況的實驗日志:
1.發布服務器斷網,sql server服務關閉,重啟動,關機的時候,對已經設置好的復制沒有多大影響
中斷期間,分發和訂閱都接收到沒有復制的事務信息
2.分發服務器斷網,sql server服務關閉,重啟動,關機的時候,對已經設置好的復制有一些影響
中斷期間,發布服務器的事務排隊堆積起來
(如果設置了較長時間才刪除過期訂閱的選項, 繁忙發布數據庫的事務日志可能會較快速膨脹),
訂閱服務器會因為訪問不到發布服務器,反復重試
我們可以設置重試次數和重試的時間間隔(最大的重試次數是9999, 如果每分鐘重試一次,可以支持約6.9天不出錯)
分發服務器sql server服務啟動,網絡接通以后,發布服務器上的堆積作業將按時間順序作用到訂閱機器上:
會需要一個比較長的時間(實際上是生成所有事務的insert,update,delete語句,在訂閱服務器上去執行)
我們在普通的pc機上實驗的58個事務100228個命令執行花了7分28秒.
3.訂閱服務器斷網,sql server服務關閉,重啟動,關機的時候,對已經設置好的復制影響比較大,可能需要重新初試化
我們實驗環境(訂閱服務器)從18:46分意外停機以, 第二天8:40分重啟動后, 已經設好的復制在8:40分以后又開始正常運行了, 發布服務器上的堆積作業將按時間順序作用到訂閱機器上, 但復制管理器里出現快照的錯誤提示, 快照可能需要重新初試化,復制可能需要重新啟動.(我們實驗環境的機器并沒有進行快照初試化,復制仍然是成功運行的)
4、刪除已經建好的發布和定閱可以直接用delete刪除按鈕
我們最好總是按先刪定閱,再刪發布,最后禁用發布的順序來操作。
如果要徹底刪去sql server上面的復制設置, 可以這樣操作:
[復制] -> 右鍵選擇 [禁用發布] -> [歡迎使用禁用發布和分發向導]
-> [下一步] -> [禁用發布] -> [要在"@servername"上禁用發布]
-> [下一步] -> [完成禁用發布和分發向導] -> [完成]
我們也可以用t-sql命令來完成復制中發布及訂閱的創建和刪除, 選中已經設好的發布和訂閱, 按屬標右鍵可以[生成sql腳本]。(這里就不詳細講了, 后面推薦的網站內有比較詳細的內容)
當你試圖刪除或者變更一個table時,出現以下錯誤
server: msg 3724, level 16, state 2, line 1
cannot drop the table 'object_name' because it is being used for replication.
比較典型的情況是該table曾經用于復制,但是后來又刪除了復制。
處理辦法:
select * from sysobjects where replinfo >'0'
sp_configure 'allow updates', 1
go
reconfigure with override
go
begin transaction
update sysobjects set replinfo = '0' where replinfo >'0'
commit transaction
go
rollback transaction
go
sp_configure 'allow updates', 0
go
reconfigure with override
go
實現兩個數據庫 同構同步: 屬于數據庫復制同步工具 (如甲骨文OGG/北京靈蜂Beedup)
單向同步 如 SQLServer A 到SQLServer B(SQLServer自帶僅適用于自身)
雙向同步 如 SQLServer A 到 SQLServer B / SQLServer B 再到SQLServer A (SQLServer自帶未有)
實現兩個數據庫 異構同步:屬于ETL轉換工具范疇(如 Informatica / Beeload/BeeDI)
單向同步 如Oracle 到 SQL Server ......
雙向同步 如Oracle 到 SQL Server/SQL Server 再到 Oracle.....
問題一定要描述具體一些,數據庫種類那么多,數據同步,隨便一列都一堆:1、MySQL同步數據到Oracle
2、MySQL同步數據到PostgreSQL
3、MySQL同步數據到SQL Server
4、MySQL同步數據到MongoDB
5、MySQL同步數據到DB2
6、Oracle同步數據到MySQL
7、Oracle同步數據到PostgreSQL
8、Oracle同步數據到SQL Server
9、Oracle同步數據到MongoDB
10、Oracle同步數據到DB2
11、SQL Server同步數據到MySQL
12、SQL Server同步數據到Oracle
13、SQL Server同步數據到PostgreSQL
14、SQL Server同步數據到DB2
15、......
如果僅僅是數據匯聚方面的數據同步,可以用TreeSoft ,其他還有阿里的DataX等。
3、PostgreSQL 怎么做數據的增量同步到其他PostgreSQL數據庫
安裝PostgreSQL數據庫之后,默認是只接受本地訪問連接。如果想在其他主機上訪問PostgreSQL數據庫服務器,就需要進行相 應的配置。配置遠程連接PostgreSQL數據庫的步驟很簡單,只需要修改data目錄下的pg_hba.conf和postgresql.conf, 其中pg_hba.conf是用來配置對數據庫的訪問權限,postgresql.conf文件用來配置PostgreSQL數據庫服務器的相應的參數。
4、如何同步postgresql數據
您好,舉例說明:如將一Shapfile文件“c:\road.shp”導入到數據表“road”中,數據庫為“sjzmap”。
1、運行“命令提示符”。
2、切換至PostgreSQL數據庫安裝目錄中的bin目錄下。
3、執行此目錄下的shp2pgsql命令:“shp2pgsql c:\road.shp road > c:\road.sql”。
4、如將此文件直接導入數據庫(不推薦):“shp2pgsql -c c:\road.shp road sjzmap | psql -d sjzmap”。
5、使用pgAdmin3 選擇數據庫,再導入表。
注:
Drops the database table before creating a new table with the data in the Shape file.
Appends data from the Shape file into the database table. Note that to use this option to load multiple files, the files must have the same attributes and same data types.
Creates a new table and populates it from the Shape file.
Only produces the table creation SQL code, without adding any actual data. This can be used if you need to completely separate the table creation and data loading steps.
Use the PostgreSQL "dump" format for the output data. This can be combined with -a, -c and -d. It is much faster to load than the default "insert" SQL format. Use this for very large data sets.
Creates and populates the geometry tables with the specified SRID.
Keep identifiers' case (column, schema and attributes). Note that attributes in Shapefile are all UPPERCASE.
Coerce all integers to standard 32-bit integers, do not create 64-bit bigints, even if the DBF header signature appears to warrant it.
Create a GiST index on the geometry column.
Output WKT format, for use with older (0.x) versions of PostGIS. Note that this will introduce coordinate drifts and will drop M values from sh apefiles.
Specify encoding of the input data (dbf file). When used, all attributes of the dbf are converted from the specified encoding to UTF8. The resulting SQL output will contain a command, so that the backend will be able to reconvert from UTF8 to whatever encoding the database is configured to use internally.
5、mysql數據庫 實時同步到 postgresql
貌似沒有直接可用的方法。不過有個思路:可以開啟mysql的binlog,mysql會把所有的操作寫進來,你搞個程序解析然后到pg中執行。
具體實現就不好說了,沒這么干過,呵呵。 這么久了,也不知道你實現了沒,我也是遇到了同樣難題。 是頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂的的
轉載請帶上網址:http://yadikedp.com/posjifour/289678.html
- 上一篇:pos機打印出現異常怎么辦
- 下一篇:pos機顯示注冊網絡失敗是什么原因