実稼働環境と開発環境のサーバーがあります。1 か月に 1 回、データベースを本番環境からダンプして、開発環境にロードしたいと考えています。
しかし、いくつかのユーザーとログインの問題もあります (ログインの欠落、パーミッションなど)。
ダンプ後にユーザーとログインを同期する最良の方法は何ですか?
sysloginsテーブルをprodmasterからbcpして、そのテーブルをdevmasterにbcpすることができます。これは、最初は慎重に行う必要があります。開発システムからすべてのユーザーログイン(システムのデフォルト以外のログイン)を削除することをお勧めします。
マスターにbcpするには、次のフラグを設定して、システムテーブルの更新を許可する必要があります。
sp_configure 'allow updates', 1
次に、ブロックサイズ1を使用してデータを開発システムにbcpします。これにより、重複していない行に影響を与えることなく、重複している行をスローできます。
bcp master..syslogins in prodsyslogins.file -Usa -Psa_password -Smyserver -n{-c} -b1
bcpが完了したら、システムテーブル更新フラグの設定を解除する必要があります。
sp_configure 'allow updates',0
正しく実行された場合、すべてのsyslogin suidは、各データベースのsysusers suidと一致するはずです。これにより、発生した権限の問題が解決されます。
演習注意 マスターをいじり始める前に、マスターのバックアップがあることを確認してください。
ロードを開始する前に、sysusers、sysalternates、および sysprotects を bcp で出力できます。データベースがオンラインになったら、「更新を許可」を有効にし、sysusers、sysalternates、sysprotects を削除し、bcp を入力します。
suid の不一致があるかどうかを確認することもできます。
sysusers t1、master..syslogins t2 から t1.suid、t2.suid を選択します。t1.name = t2.name および t1.suid != t2.suid および t1.suid != -2