このトピックでは、Data Management (DMS) におけるデータディクショナリ (メタデータ) のリフレッシュまたは同期に関する一般的な質問に回答します。全般的な問題、Redis 固有のトピック、Oracle 固有のトピックについて説明します。
全般
データベースに存在するデータベースやテーブルが DMS に表示されない理由
DMS は、必ずしもリアルタイムでデータベースからデータベースとテーブルの情報を読み取るわけではありません。
-
セキュアホスティングインスタンス:DMS はインスタンスメタデータを収集して保存します。インスタンスが最初に登録されると完全なメタデータ収集がトリガーされ、毎日 18:00 にスケジュールされた完全な収集が実行されます。
-
非セキュアホスティングインスタンス:DMS はデータベースレベルの情報のみを永続化します。その他のメタデータは、インスタンスにログインした後にリアルタイムでロードされます。
-
DMS を介して実行された DDL 変更は、増分メタデータ収集をトリガーします。更新されたスキーマは、通常、操作完了後約 5 秒で DMS で利用可能になりますが、実際の時間はデータベースの負荷や収集タスクのステータスによって異なる場合があります。
-
データベースコンソールや他のクライアントを介して行われた変更は、手動でのリフレッシュまたはデータディクショナリの同期が必要になる場合があります。
詳細については、「データベースメタデータの収集、表示、および検索」をご参照ください。
データベースとテーブル情報を手動でリフレッシュする方法
次のいずれかの方法を使用できます:
-
方法 1:DMS ホームページの左側にあるインスタンスリストで、ターゲットインスタンスを右クリックし、[データディクショナリのリフレッシュ/同期] を選択します。操作を確認し、収集が完了するのを待ちます。
-
方法 2:上部のナビゲーションバーで、 を選択します。[インスタンスリスト] でターゲットインスタンスを見つけ、 を選択します。
変更が別のクライアントを介して行われた場合は、インスタンスに再度ログインしてメタデータを再読み込みすることも試せます。
詳細については、「データベースインスタンスのデータディクショナリを同期する」および「DMS がデータベースメタデータを再読み込みする場合とその理由」をご参照ください。
データディクショナリを同期してもデータベースが表示されない場合の対処法
次の項目を順番に確認することを推奨します:
1. DMS が使用するデータベースアカウントの権限の確認
DMS は、設定されたデータベースアカウントがアクセス権限を持つデータベースのメタデータのみを収集できます。この問題は、ApsaraDB RDS for MySQL、ApsaraDB RDS for PostgreSQL、ApsaraDB RDS for SQL Server、PolarDB for MySQL、PolarDB for PostgreSQL、およびサードパーティまたは自己管理データベースで発生する可能性があります。
以下を確認してください:
-
DMS で設定されたデータベースアカウントとパスワードが有効であること。
-
アカウントがターゲットデータベースに対するアクセス権限を持っていること。
-
新しいデータベースが作成された後、DMS が使用するアカウントにそのデータベースの権限が付与されていること。
-
インスタンス配下のすべてのデータベースを表示するには、アカウントがすべてのターゲットデータベースに対するアクセス権限を持っている必要があります。
-
PostgreSQL ベースのデータベースの場合、ターゲットデータベース、スキーマ、および関連オブジェクトに対する権限も確認してください。
ApsaraDB RDS for MySQL、ApsaraDB RDS for PostgreSQL、ApsaraDB RDS for SQL Server、PolarDB for MySQL、および PolarDB for PostgreSQL の場合、新しく作成されたデータベースは、DMS が使用するアカウントに自動的に権限が付与されない場合があります。この場合、データディクショナリを同期してもデータベースは DMS に表示されません。まず、新しいデータベースへのアクセス権限を DMS が使用するアカウントに付与し、その後、再度データディクショナリを同期する必要があります。
権限付与の方法はデータベースエンジンによって異なります。詳細については、次のトピックをご参照ください:
2. インスタンスの接続ステータスの確認
以下を確認してください:
-
データベースインスタンスは正常に実行中です。
-
データベースのアドレス、ポート、アカウント、およびパスワードが正しいこと。
-
DMS の IP アドレスがデータベースのホワイトリストに追加されていること。
-
セキュリティグループ、ファイアウォール、およびネットワークリンクが DMS からのアクセスを許可していること。
-
データベースで SSL/TLS が有効になっている場合、対応する SSL 接続メソッドが DMS でも設定されていること。
詳細については、「データベースのログインおよび接続に関する問題のトラブルシューティング」および「インスタンスのホワイトリストに DMS の IP アドレスを追加する」をご参照ください。
3. システムデータベースのフィルター規則によってデータベースがブロックされていないかの確認
セキュリティコラボレーションコントロールモードでは、特定のシステムデータベースがデフォルトで非表示になります。セキュリティルールでは、データベースやスキーマに対するカスタムフィルターを定義することもできます。データベースがフィルターされると、DMS はそのメタデータを収集せず、データベースは検索も表示もできなくなります。
詳細については、「DMS によってデフォルトでブロックされるシステムデータベース」および「システムデータベースフィルターをカスタマイズする」をご参照ください。
4. 現在の DMS ユーザーのメタデータアクセス権限の確認
データベースアカウントがアクセス権限を持っていても、現在の DMS ユーザーが必要な権限を持っていない場合があります。メタデータアクセスコントロールが有効になっている場合、インスタンスまたはデータベースの権限を持たないユーザーは、対応するリソースを表示できません。
管理者はデータベースを表示できるが、一般ユーザーが表示できない場合は、まず次の項目を確認してください:
-
ユーザーレベル、データベースレベル、またはインスタンスレベルのメタデータアクセスコントロールが有効になっているかどうか。
-
ユーザーがターゲットデータベースに対するクエリ、エクスポート、または変更権限を持っているかどうか。
-
DBA または管理者がユーザーに必要な権限を割り当てているかどうか。
詳細については、「メタデータアクセスコントロールの設定」をご参照ください。
データディクショナリの同期に時間がかかる理由
メタデータ同期に必要な時間は、インスタンス内のデータベースとテーブルの数によって異なります。インスタンスに多数のテーブルが含まれている場合、同期タスクには数分以上かかることがあります。
現在のシステムでは、メタデータ収集の SQL ステートメントに最大 120 秒のタイムアウトが設定されています。単一のデータベースに非常に多数のテーブル (たとえば、100,000 オーダー以上) が含まれている場合、収集 SQL がタイムアウトし、メタデータの同期が完了しない可能性があります。その結果、DMS はそのデータベースのテーブルリストを表示できません。これは既知のシステム上の制限です。100,000 テーブルという数値は概算の参考値であり、厳密なしきい値ではありません。タイムアウトが発生するかどうかは、データベースのパフォーマンス、負荷、およびネットワーク条件にも依存します。
推奨事項:
-
短期間に繰り返し同期をトリガーしないでください。
-
現在の同期タスクが完了するのを待ってから、結果を確認してください。
-
データベース接続が安定していることを確認してください。
-
データベースアカウントの権限が変更されていないことを確認してください。
-
非セキュアホスティングインスタンスの場合、再度インスタンスにログインしてみてください。
詳細については、「データベースインスタンスのデータディクショナリを同期する」をご参照ください。
一部のユーザーのみがデータベースを表示できない理由
これは通常、メタデータ収集の問題ではなく、DMS ユーザーの権限の問題です。
以下を確認してください:
-
ユーザーレベル、データベースレベル、またはインスタンスレベルのメタデータアクセスコントロールが有効になっているかどうか。
-
ユーザーがターゲットデータベースに対するクエリ、エクスポート、または変更権限を持っているかどうか。
-
DBA または管理者がユーザーにインスタンスまたはデータベースの権限を割り当てているかどうか。
管理者はデータベースを表示できるが、一般ユーザーが表示できない場合は、この領域を優先的に確認してください。
システムデータベースや特定のスキーマが表示されない理由
セキュリティコラボレーションコントロールモードでは、特定のシステムデータベースがデフォルトで非表示になります。例:
-
MySQL:
mysql、information_schema、performance_schemaなど。 -
SQL Server:
master、model、msdb、tempdbなど。 -
PostgreSQL:主に
information_schemaやpg_catalogなどのシステムスキーマをフィルターします。
さらに、セキュリティコラボレーションコントロールモードのインスタンスでは、 に移動して、カスタムフィルターを定義できます。システムデータベースや機密性の高いビジネスデータベースを、完全一致の名前または正規表現でフィルターできます。PostgreSQL ベースのデータベースの場合、フィルターはスキーマに適用されます。フィルター規則を変更した後、変更を有効にするには、データディクショナリを再度同期するか、毎日 18:00 の自動メタデータ同期を待つ必要があります。
詳細については、「DMS でデフォルトでブロックされる各データベースタイプのシステムデータベース」および「DMS のシステムデータベースフィルターをカスタマイズする」をご参照ください。
データベースがロックされているか異常な状態の場合にスキーマが表示されない理由
DMS がデータディクショナリをリフレッシュまたは同期する際、ターゲットデータベースに接続し、メタデータ収集の SQL ステートメントを実行します。ApsaraDB RDS インスタンスまたはターゲットデータベースがロックされているか利用できない場合、DMS はスキーマやその他のメタデータを取得できません。データディクショナリを繰り返し同期しても、通常この問題は解決しません。
次の手順を推奨します:
-
対応するクラウドデータベースコンソールで、インスタンスとターゲットデータベースの実行ステータスを確認します。
-
データベースがロックされている場合は、クラウドデータベースコンソールの指示に従ってロックを解除し、通常のアクセスを復元します。
-
DMS で接続をテストし、データベースにアクセスできることを確認します。
-
再度 [データディクショナリのリフレッシュ/同期] を実行し、収集が完了するのを待ってからオブジェクトリストをリフレッシュします。
詳細については、「データベースのログインと接続の問題を解決する」をご参照ください。
Redis
インターネット経由で Redis クラスターを登録した後、DB0 しか表示されない理由
DMS ドキュメントによると、サードパーティまたは自己管理の Redis クラスターが DMS に登録された後、DB0 のみが表示されます。
これは既知のプロダクト上の制限です。データディクショナリを繰り返しリフレッシュまたは同期しても、この問題は解決しません。
推奨事項:
-
Alibaba Cloud Tair または Redis インスタンスの場合、Alibaba Cloud データベースソースを使用してインスタンスを登録してください。
-
サードパーティまたは自己管理の Redis クラスターの場合、事前に DMS の表示機能を確認してください。
詳細については、「サードパーティデータベースまたは自己管理データベースを登録する」をご参照ください。
DMS が Redis のクラスターモードを識別する方法
Redis クラスターアーキテクチャを識別する能力は、インスタンスのソースと登録方法に依存します。
-
Alibaba Cloud Tair または Redis クラスターインスタンスの場合、Alibaba Cloud データベースソースを使用してインスタンスを登録することを推奨します。
-
インターネット経由、またはサードパーティや自己管理ソースから登録された Redis クラスターの機能は限定されています。
-
ドキュメントに記載されているように、サードパーティおよび自己管理の Redis クラスターは現在 DB0 のみをサポートしています。
Oracle
Oracle インスタンスのデータディクショナリを同期してもスキーマ、テーブル、またはカラムが表示されない理由
DMS が Oracle メタデータを収集する際、インスタンス登録時に設定されたデータベースアカウントを使用して Oracle のシステムテーブルまたはシステムビューにクエリを実行します。アカウントが関連オブジェクトに対するクエリ権限を欠いている場合、スキーマ、テーブル、カラム、インデックス、制約、コメントなどのメタデータが不完全に収集され、データディクショナリを同期しても DMS で非表示のままになる可能性があります。
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 のバージョンと権限設定によって異なります。
必要な権限を付与した後、再度 [データディクショナリのリフレッシュ/同期] を実行してください。