本文匯總DMS重新整理/同步字典(同步中繼資料)情境下的常見問題及排查方法,涵蓋通用問題、Redis專題和Oracle專題。
通用問題
為什麼資料庫中已經存在庫或表,DMS中卻看不到?
DMS展示的庫表資訊不一定是即時從資料庫讀取的。
安全受管理的執行個體:DMS會採集並儲存執行個體中繼資料。首次錄入時觸發全量採集,並預設每天18:00定時全量採集。
非安全受管理的執行個體:DMS僅持久化庫級資訊,其他中繼資料在登入後即時載入。
通過DMS執行的DDL變更會觸發增量採集。一般在操作完成後約5秒內,可在DMS中重新整理對象列表後查看最新的庫表結構;實際生效時間可能受資料庫負載和採集任務狀態影響。
通過資料庫控制台或其他用戶端執行的變更,可能需要手動重新整理或同步字典。
更多資訊,請參見資料庫中繼資料採集展示檢索。
如何手動重新整理資料庫和表資訊?
可通過以下任意方式操作:
方式一:在DMS首頁左側執行個體列表中按右鍵目標執行個體,選擇重新整理/同步字典,確認後等待採集完成。
方式二:在頂部導覽列選擇,在執行個體列表中找到目標執行個體,選擇。
如果變更是在其他用戶端執行的,也可以嘗試重新登入執行個體,重新載入中繼資料。
更多資訊,請參見同步資料庫執行個體的資料字典和重新載入DMS庫表中繼資料的時機與原因。
重新整理或同步字典後,仍然看不到資料庫怎麼辦?
建議按以下順序排查:
1. 檢查DMS使用的資料庫帳號許可權
DMS只能採集當前資料庫帳號有權訪問的資料庫。該問題可能出現在RDS MySQL、RDS PostgreSQL、RDS SQL Server、PolarDB MySQL、PolarDB PostgreSQL等阿里雲資料庫,以及他雲或自建資料庫中。
請確認:
DMS中配置的資料庫帳號和密碼有效。
帳號具有目標資料庫的存取權限。
建立資料庫後,已將該資料庫授權給DMS使用的帳號。
如需展示執行個體下全部資料庫,應為帳號授予全部目標資料庫的存取權限。
PostgreSQL系列還需要檢查目標Database、Schema及相關對象許可權。
RDS MySQL、RDS PostgreSQL、RDS SQL Server、PolarDB MySQL、PolarDB PostgreSQL建立資料庫後,均可能不會將新庫自動授權給DMS使用的帳號。此時即使重新整理字典,DMS仍無法展示該資料庫,需要先為DMS使用的資料庫帳號授予新庫存取權限,再重新執行重新整理/同步字典。
不同資料庫引擎的帳號授權方式有所不同,具體操作請參見:
2. 檢查執行個體串連狀態
請確認:
資料庫執行個體處於正常運行狀態。
資料庫地址、連接埠、帳號和密碼正確。
DMS IP已加入資料庫白名單。
安全性群組、防火牆和網路鏈路允許DMS訪問。
資料庫啟用SSL/TLS後,DMS中也配置了對應的SSL串連方式。
更多資訊,請參見資料庫登入串連問題排查FAQ和添加DMS IP至執行個體白名單。
3. 檢查是否被系統庫過濾規則屏蔽
安全協同模式預設會屏蔽部分系統庫。安全規則還可以自訂過濾資料庫或Schema。被過濾後,DMS不會採集相應中繼資料,也無法搜尋或展示這些資料庫。
更多資訊,請參見DMS預設屏蔽的執行個體系統庫和自訂屏蔽系統庫。
4. 檢查當前DMS使用者的中繼資料存取權限
資料庫帳號具有存取權限,不代表當前登入DMS的使用者一定具有查看許可權。開啟中繼資料存取控制後,沒有執行個體或資料庫許可權的使用者無法查看對應資源。
如果管理員能夠看到,但普通使用者看不到,應優先檢查:
是否開啟使用者、資料庫或執行個體級中繼資料存取控制。
使用者是否擁有目標資料庫的查詢、匯出或變更許可權。
DBA或管理員是否已為使用者指派相應許可權。
更多資訊,請參見設定中繼資料存取控制。
為什麼同步字典長時間沒有完成?
中繼資料同步耗時與執行個體中的庫表數量有關。庫表較多時,同步任務可能需要數分鐘甚至更長時間。
當前系統採集字典所執行SQL的逾時時間最大為120秒。如果單個資料庫下的表數量過多(例如達到10萬張以上量級),採集SQL可能因超過120秒而逾時,導致中繼資料同步無法完成,DMS無法正常展示該庫的表列表。這屬於當前系統的能力限制,10萬張表是參考量級而非嚴格閾值,實際是否逾時還會受到資料庫效能、負載和網路狀況等因素影響。
建議:
避免短時間內重複觸發同步。
等待當前同步任務完成後重新查看。
確認資料庫連接穩定。
確認資料庫帳號許可權未發生變化。
如果是非受管理的執行個體,嘗試重新登入執行個體後查看。
更多資訊,請參見同步資料庫執行個體的資料字典。
為什麼只有部分使用者看不到資料庫?
通常屬於DMS使用者權限問題,而不是中繼資料採集問題。
請檢查:
是否開啟使用者、資料庫或執行個體級中繼資料存取控制。
使用者是否擁有目標資料庫的查詢、匯出或變更許可權。
DBA或管理員是否已為使用者指派執行個體或資料庫許可權。
如果管理員能夠看到而普通使用者看不到,應優先排查此項。
為什麼系統庫或某些Schema看不到?
安全協同模式會預設屏蔽部分系統庫,例如:
MySQL:
mysql、information_schema、performance_schema等。SQL Server:
master、model、msdb、tempdb等。PostgreSQL:主要過濾
information_schema、pg_catalog等系統Schema。
此外,安全協同模式的執行個體可以通過,按完整名稱或Regex自訂過濾系統庫、高敏感業務庫;PostgreSQL系列過濾的是Schema。修改過濾規則後,需要再次執行"重新整理/同步字典",也可以等待每天18:00的自動中繼資料同步使配置生效。
更多資訊,請參見DMS針對各資料庫類型預設屏蔽的系統庫列表和如何在DMS中自訂屏蔽系統庫。
為什麼資料庫被鎖或狀態異常後,DMS中看不到Schema?
DMS重新整理/同步字典時需要串連目標資料庫並執行中繼資料採集SQL。如果RDS執行個體或目標資料庫處於被鎖定、不可用等異常狀態,DMS將無法正常擷取Schema等中繼資料資訊,此時重複重新整理/同步字典通常無法解決。
建議按以下步驟處理:
在對應的雲資料庫控制台檢查執行個體及目標資料庫的運行狀態。
如果資料庫被鎖定,先根據云資料庫控制台提示完成解鎖,使資料庫恢複正常可訪問狀態。
在DMS中測試連接,確認資料庫可以正常訪問。
重新執行"重新整理/同步字典",等待採集完成後重新整理對象列表。
更多資訊,請參見資料庫登入串連問題排查FAQ。
Redis專題
通過公網錄入Redis叢集後,為什麼只能看到DB0?
DMS官方文檔說明:他雲或自建Redis叢集架構錄入DMS後,目前僅支援展示DB0。
這屬於當前產品支援範圍限制,重複重新整理或同步字典通常無法解決。
建議:
阿里雲Tair/Redis執行個體優先通過阿里雲資料庫來源錄入。
他雲或自建Redis叢集應提前確認DMS的展示能力。
更多資訊,請參見串連他雲或自建資料庫。
DMS如何識別Redis叢集模式?
Redis叢集架構的識別能力與執行個體來源和接入方式有關。
阿里雲Tair/Redis叢集執行個體建議通過阿里雲資料庫來源錄入。
通過公網、他雲或自建方式錄入的Redis叢集存在能力限制。
官方文檔已明確,他雲和自建Redis叢集目前僅支援展示DB0。
Oracle專題
為什麼Oracle執行個體重新整理/同步字典後,仍看不到Schema、表或欄位?
DMS採集Oracle中繼資料時,需要使用錄入執行個體時配置的資料庫帳號查詢Oracle系統資料表或系統檢視表。如果該帳號缺少相關對象的查詢許可權,可能導致Schema、表、欄位、索引、約束或注釋等中繼資料採集不完整,重新整理/同步字典後仍無法正常展示。
請確保DMS使用的資料庫帳號至少具備以下系統資料表或系統檢視表的查詢許可權:
V$INSTANCESYS.DBA_USERSSYS.DBA_TABLESSYS.DBA_SEGMENTSSYS.DBA_TAB_COMMENTSSYS.DBA_TAB_COLUMNSSYS.DBA_COL_COMMENTSSYS.DBA_SYNONYMSSYS.DBA_OBJECTSSYS.DBA_INDEXESSYS.DBA_CONSTRAINTSSYS.DBA_IND_COLUMNS
其中,V$INSTANCE通常是動態效能檢視的同義字,實際授權時可能需要由Oracle DBA對底層對象SYS.V_$INSTANCE授予查詢許可權,具體以目標Oracle版本和許可權配置為準。
完成授權後,請重新執行"重新整理/同步字典"。