web-dev-qa-db-ja.com

冗長性をチェックするためにドロップせずにテーブルを非表示/無効にする方法は?

使用されなくなったWebサービスメソッドとデータベーステーブルを含む古いレガシーシステムを維持および拡張する必要があります。テーブルが本当に冗長であるかどうかは完全にはわからないので、削除することを恐れます。

それらを落とさずに同じ効果を達成する他の方法はありますか(テーブルはもう使用できません)?私の考えは、それらを現在のデフォルトであるDeletedとは異なるスキーマ(たとえば、dbo)に転送することでした。

IF NOT EXISTS (SELECT * FROM sys.schemas WHERE name = 'Deleted')
BEGIN
   EXEC('CREATE SCHEMA Deleted')
END

ALTER SCHEMA Deleted TRANSFER dbo.TableName;

他のオプションはありますか、またはスキーマアプローチに欠点はありますか?

12
Tim Schmelter

それらを落とさずに同じことを達成する他の方法はありますか(テーブルはもう使用できません)?

スキーマの変更は非常に高速な操作です。メタデータの変更のみが必要です。私が得た最初のアイデアは Aaron Bertrandのブログ-Schema Switch-A-Roo からのものです。

あなたは次の手順に従うことができます ここに私の答え

sp_rename N'old table '、N'new table'のような他のメソッドがあることは明らかです。または、単にテーブルへのアクセスを拒否します。

7
Kin Shah

他のいくつかのオプションは、テーブルの名前を変更することです。または、テーブルにクラスター化インデックスがある場合は、クラスター化インデックスを無効にすることができます。

12
Chad Mattox

テーブルのpermissionsを、それを使用している可能性のある役割/グループ/アカウントから削除します。

何かが吹き飛ばされたら、それらを元に戻します。

ヒント:これらの変更を行うためにスクリプトを使用するのは、本当に本当に良いアイデアです。

6
Phill W.

Phil W.の提案に従って、権限を削除します。

また、テーブルを使用するすべてのストアドプロシージャから権限を削除します。 SQL Serverでは、(他のことはわかりません)アクセス許可は、呼び出し元のオブジェクト(ストアドプロシージャなど)から呼び出されたオブジェクト(テーブルなど)にチェーンされます。

3
Peter Bill

誰かがアクセス許可を持っていないことを確実にすることはできないため、アクセス許可の削除は通常は機能しません。おそらく、グループ、ロール、またはシステム管理者であるためです(ただし、そうしないことを望みます)。

テーブルの場合、それらを無効にすることができます。そして、それは迅速なプロセスです。ただし 有効にする をするには、それらを再構築する必要があり、大きなテーブルではかなり時間がかかる可能性があります。

あなたの最善の策は、オブジェクトを新しいスキーマに移動するか(提案どおり)、オブジェクトの名前を変更することです。これらの操作はどちらも、すばやく簡単に実行できます。権限も双方向で維持されます。

実行できる追加の手順は、オブジェクトの 拡張プロパティ に「TBDノート」を追加することです。いつ変更したか、および/または安全に取り除くことができると感じた理由をメモしておくことができます。

以上のことから、拡張イベントセッション(またはプロファイラートレース)を数日間実行して、すべてのオブジェクトが使用されていることを確認します。オーバーヘッドを減らすために、セッションをオブジェクト名だけに、またいつ触れられたのかに大きく制限できます。また、このセッションを月末または場合によっては四半期末のいずれかの側で数日間実行して、すべてが揃っていることを確認してください。

3
Kenneth Fisher