2

完全修飾名の整合性を維持しながら、本番データベースを複数のテストデータベースにコピーするための最良の方法は何ですか?

現在、テスト環境を更新するために、本番データベースからテストデータベースを復元しています。次に、すべてのストアドプロシージャ/ビューなどをスクリプト化します。そして、すべてのデータベース参照に対して検索/置換を実行して、テストオブジェクトをポイントします。すべての参照が正しい場合は、それらを変更します。

たとえば、データベースが本番環境からコピーされた後、次のようなストアドプロシージャが作成されます。

alter procedure dbo.SomeProcedure
as
select SomeColumn
from DB.dbo.SomeTable
join Validation.dbo.AnotherTable on SomId = AnoId

テストデータベースの場合、次のようにする必要があります。

alter procedure dbo.SomeProcedure
as
select SomeColumn
from DBQA1.dbo.SomeTable
join ValidationQA1.dbo.AnotherTable on SomId = AnoId

各テストデータベースにはビュー/ストアドプロシージャ/関数があり、最大30の異なる他のテストデータベースを参照できるため、「検索/置換」プロセスは非常に時間がかかり、多くのエラーが発生しやすくなります。

これらのテスト環境を復元するための最良の方法は何ですか?

SQLServer2008R2を使用しています。

4

2 に答える 2

1

さまざまな環境がさまざまなSQLServer(または少なくともさまざまなインスタンス)にあると仮定すると、すべての環境のデータベース名をまったく同じに保つことをお勧めします。権限(統合セキュリティなど)を使用して、適切な環境システムとユーザーのみが適切な環境データベースにアクセスできるようにします。

ただし、環境ごとに異なるデータベース名を保持する必要がある場合(たとえば、同じSQLインスタンス上のすべての環境)、- vスイッチを指定したsqlcmdを使用してデータベース名をパラメーター化することを検討できます。

次に、変更スクリプトを次のように書き直す必要があります。

alter procedure dbo.SomeProcedure
as
   select SomeColumn
   from [$(InternetSecurity)].dbo.SomeTable
   join [$(Validation)].dbo.AnotherTable on SomId = AnoId

次に、バッチファイルを作成して、正しいパラメータ値をsqlcmdに渡すことができます。

または、Visual Studioで.dbprojプロジェクトを使用して、環境ごとに異なる値を提供する複数の構成をセットアップし、VisualStudioからスクリプトを生成/公開することもできます。

また、AFAIKSQLシノニムはここでは実際には役に立ちません。すべてのプロシージャと関数の3つの部分からなるテーブル名を同義語に置き換える必要があります。これにより、テーブルがローカルか外部かが明確にならないため、問題が混乱する可能性があります。

于 2012-08-02T05:15:40.103 に答える
0

私の知る限り、ここのスクリプトでデータベース名を置き換える以外に簡単な方法はありません。

于 2012-08-02T05:24:00.853 に答える