web-dev-qa-db-ja.com

データベース内のテーブルセットのロックスキーマを見つける方法は?

Sybaseインスタンスのデータベースには約20のテーブルがあり、テーブルのロックスキーマを見つける必要があります。ロックスキーマが見つかったら、同じ20個のテーブルを持つ他のデータベースでそれを比較する必要があります。 build-ASE16 SP2

1
user115806

以下を使用して、ASEデータベース内の各ユーザーテーブルのロックスキーマを決定します。

_SELECT TableName = CONVERT(VARCHAR(30), so.name)
    , LockScheme = CONVERT(VARCHAR(30), lockscheme(so.id))
FROM sysobjects so
WHERE so.type IN ('S', 'U');
_

CONVERT(VARCHAR(30), xxx)は、コンソールセッションで出力を見やすくするためのものです。 GUIツールを使用してASEインスタンスに接続している場合は、おそらく必要ありません。 30文字を超えるテーブル名がある場合、出力では切り捨てられることに注意してください。

両方のインスタンスでそれを実行し、単純に BeyondCompare または他の差分ツールの出力を比較します。

2
Max Vernon

マックスが示唆したように、私のために働いた答えを追加しました。

これはASE16 SP2バージョンです。
データベースオブジェクトにAllPages Lockスキーマがあるかどうかを確認するには

select name 'AllPages Lock Tables', sysstat2 from sysobjects where type = 'U' and sysstat2 & 8192 = 8192 and name = **"<obj name>"**

データベースオブジェクトにDataPages Lockスキーマがあるかどうかを確認するには

select name 'DataPages Lock Tables', sysstat2 from sysobjects where type = 'U' and sysstat2 & 16384 = 16384 and name = **"<obj name>"**

データベースオブジェクトにDataRows Lockスキーマがあるかどうかを確認するには

select name 'DataRows Lock Tables', sysstat2 from sysobjects where type = 'U' and sysstat2 & 32768 = 32768 and name = **"<obj name>"**
1
user115806