資料同步中的誤導
今天同事讓我幫一個忙,說現在有兩個環境中的一張表資料不一致,已經造成了一些資料問題,他們已經排查了一圈,最後發現是一張表的資料問題導致,希望我來幫忙協助一下。
他們提供了詳細的源庫,目標庫的連結,看起來一起都明確了,那DBA需要做的事情就很明朗了。
本來以為資料訪問結構圖是下面的形式,即兩個不同的資料庫環境,彼此都有對應的屬主使用者和連線使用者,彼此之間獨立。那麼同步資料就需要考慮是否是全量,增量等等。
但是檢視了一圈,發現結構比自己想象要複雜一些。類似下面的形式
左邊是源庫,源庫中存在屬主使用者和連線使用者,分別對應表和同義詞,
右邊是目標庫,裡面存在屬主使用者和連線使用者,分別對應的是物化檢視和同義詞,這一點有一些奇怪的是,目標庫中是透過db link來訪問源庫的同義詞建立了物化檢視。
如果這樣來看,兩邊的資料應該很可能是一致的,如果不一致,那就應該是物化檢視沒有重新整理同步導致的。
帶著疑問檢視了源庫的資料條數
> select count(*)from testtype;
COUNT(*)
----------
709
在目標庫中檢視,發現確實不匹配。
> select count(*)from testtype;
COUNT(*)
----------
731
那麼如此來看確實是資料不同步導致的,那麼我們就來重新整理一下物化檢視來修復這個問題。
SQL> exec dbms_mview.refresh('TESTTYPE','C');
按照開發同事提供的思路,這是一個很自然的過程。
但是檢視重新整理後的資料情況,還是731條,這個時候感覺應該是哪裡出現了問題,唯一的可能就是物化檢視了。
結果一看物化檢視的ddl語句。
原來是類似這樣的結構
select xxxxx from testtype where xxxx
union all
select xxxxx from testtype where xxxxx;
這樣來看,確實很可能兩邊的資料不一致了。那麼這樣一來,問題看起來就可能不是單純的資料不一致的問題造成的了。這種資料的變化應該就是希望根據業務來定製出來的,所以在目標庫做了集合運算。那麼怎麼來說服開發同事呢,有一個辦法,就是從資料字典裡抓出來這個物化檢視的定義,一看都是好幾年前的了,如果出問題早就出了。也不在最近才有這種事情。
OWNER OBJECT_NAME OBJECT_TYPE STATUS CREATE_DAT
-------------------- ------------------------------ -------------------- ------- ----------
TESTAGENT TESTTYPE MATERIALIZED VIEW VALID 2013-12-24
這個問題和開發同事進行了溝通,解釋的也還算順利,看來他們又得說服自己來處理這種資料的不一致了。
透過這個案例可以看到,很多時候我們都得說服自己,可能有些問題最開始方向就是錯的,我們得嚴密的進行論證,要不就會錯上加錯。
他們提供了詳細的源庫,目標庫的連結,看起來一起都明確了,那DBA需要做的事情就很明朗了。
本來以為資料訪問結構圖是下面的形式,即兩個不同的資料庫環境,彼此都有對應的屬主使用者和連線使用者,彼此之間獨立。那麼同步資料就需要考慮是否是全量,增量等等。
但是檢視了一圈,發現結構比自己想象要複雜一些。類似下面的形式
左邊是源庫,源庫中存在屬主使用者和連線使用者,分別對應表和同義詞,
右邊是目標庫,裡面存在屬主使用者和連線使用者,分別對應的是物化檢視和同義詞,這一點有一些奇怪的是,目標庫中是透過db link來訪問源庫的同義詞建立了物化檢視。
如果這樣來看,兩邊的資料應該很可能是一致的,如果不一致,那就應該是物化檢視沒有重新整理同步導致的。
帶著疑問檢視了源庫的資料條數
> select count(*)from testtype;
COUNT(*)
----------
709
在目標庫中檢視,發現確實不匹配。
> select count(*)from testtype;
COUNT(*)
----------
731
那麼如此來看確實是資料不同步導致的,那麼我們就來重新整理一下物化檢視來修復這個問題。
SQL> exec dbms_mview.refresh('TESTTYPE','C');
按照開發同事提供的思路,這是一個很自然的過程。
但是檢視重新整理後的資料情況,還是731條,這個時候感覺應該是哪裡出現了問題,唯一的可能就是物化檢視了。
結果一看物化檢視的ddl語句。
原來是類似這樣的結構
select xxxxx from testtype where xxxx
union all
select xxxxx from testtype where xxxxx;
這樣來看,確實很可能兩邊的資料不一致了。那麼這樣一來,問題看起來就可能不是單純的資料不一致的問題造成的了。這種資料的變化應該就是希望根據業務來定製出來的,所以在目標庫做了集合運算。那麼怎麼來說服開發同事呢,有一個辦法,就是從資料字典裡抓出來這個物化檢視的定義,一看都是好幾年前的了,如果出問題早就出了。也不在最近才有這種事情。
OWNER OBJECT_NAME OBJECT_TYPE STATUS CREATE_DAT
-------------------- ------------------------------ -------------------- ------- ----------
TESTAGENT TESTTYPE MATERIALIZED VIEW VALID 2013-12-24
這個問題和開發同事進行了溝通,解釋的也還算順利,看來他們又得說服自己來處理這種資料的不一致了。
透過這個案例可以看到,很多時候我們都得說服自己,可能有些問題最開始方向就是錯的,我們得嚴密的進行論證,要不就會錯上加錯。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23718752/viewspace-1851076/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- AJAX資料互動中的同步非同步非同步
- 【oracle資料庫資料恢復】誤操作導致的資料庫誤刪除的資料恢復案例Oracle資料庫資料恢復
- 如何解決非同步介面請求快慢不均導致的資料錯誤問題? - DevUI非同步devUI
- 【北亞伺服器資料恢復】Raid5熱備盤同步資料過程中硬碟離線導致同步失敗的資料恢復伺服器資料恢復AI硬碟
- sqlite操作--- oracle資料庫中的資料導進sqliteSQLiteOracle資料庫
- 如何將資料庫中的資料導成 excel 檔案資料庫Excel
- 【資料庫資料恢復】磁碟空間不足導致sql server錯誤的資料恢復資料庫資料恢復SQLServer
- vue 中promise 非同步請求資料VuePromise非同步
- 伺服器資料恢復-誤操作導致mysql資料庫資料丟失的資料恢復案例伺服器資料恢復MySql資料庫
- SQL Server 2000中的資料同步問題SQLServer
- 導資料遇見ORA-01555錯誤
- ORACLE DSG資料同步軟體程式導致資料庫無法正常關閉Oracle資料庫
- 【北亞資料庫資料恢復】誤操作導致資料丟失的華為雲mysql資料恢復案例資料庫資料恢復MySql
- 資料探勘中易犯的10大錯誤
- 資料分析中6個常規的錯誤
- 【北亞資料恢復】誤操作分割槽損壞導致SqlServer資料庫資料丟失的資料恢復資料恢復SQLServer資料庫
- 資料倉儲中從mysql導資料到oracleMySqlOracle
- 資料庫升級導致ORA-918錯誤資料庫
- 資料同步——rsync遠端同步
- 解決 PBootCMS 中因資料庫名稱錯誤導致的“執行 SQL 發生錯誤!錯誤:no such table: ay_config”問題boot資料庫SQL
- 【北亞資料恢復】輸入錯誤命令導致MySQL資料庫資料被刪除的資料恢復案例資料恢復MySql資料庫
- 基於DataX的資料同步(下)-應用DataX進行資料同步
- MaxWell 資料同步
- canal資料同步
- 資料庫同步資料庫
- HIVE 資料同步Hive
- SQL資料同步SQL
- 資料同步rsync
- Rsync資料同步
- 【北亞資料恢復】raid5在熱備盤同步資料過程中,硬碟掉線導致raid崩潰的資料恢復案例資料恢復AI硬碟
- ogg在異構資料庫實時雙向同步中如何防止資料死迴圈同步資料庫
- 資料不能同步的問題?
- Oracle資料庫非同步IO導致查詢響應緩慢Oracle資料庫非同步
- 不同Oracle資料庫之間的資料同步Oracle資料庫
- MySQL級聯複製中的資料同步(第二篇)MySql
- 談談Redis快取中MySQL的資料如何與Redis同步Redis快取MySql
- 誤修改ORACLE_HOME導致無法登陸資料庫Oracle資料庫
- Mysql主主同步-配置資料同步MySql