3

内部サーバーへのデータベースを生成するために使用され、クライアントによって外部で使用される SQL パブリッシュ スクリプトを作成しています。

私が抱えている問題は、内部スクリプトがかなりの数のことを自動化し、実際の運用環境ではこれらを手動で完了する必要があることです。

たとえば、内部的に次のスクリプトを使用します。

-- Global variables
:setvar EnvironmentName 'Local'

-- Script.PostDeployment.sql

:r .\PopulateDefaultValues.sql

IF ($(EnvironmentName) = 'Test')
BEGIN
   :r .\GivePermissionsToDevelopmentTeam.sql
   :r .\PopulateTestData.sql
   :r .\RunETL.sql
END
ELSE IF ($(EnvironmentName) = 'Client_Dev')
BEGIN
   :r .\GivePermissionsToDevWebsite.sql
END

これにより、次のようなスクリプトが生成されます。

-- (Ignore syntax correctness, its just the process I'm after)

IF($(EnvironmentName) = 'Test')
BEGIN
    CREATE LOGIN [Developer1] AS USER [MyDomain\Developer1] WITH DEFAULT SCHEMA=[dbo];
    CREATE LOGIN [Developer2] AS USER [MyDomain\Developer2] WITH DEFAULT SCHEMA=[dbo];
    CREATE LOGIN [Developer3] AS USER [MyDomain\Developer3] WITH DEFAULT SCHEMA=[dbo];

    -- Populate entire database (10000's of rows over 100 tables)
    INSERT INTO Products ( Name, Description, Price ) VALUES
    ( 'Cheese Balls', 'Cheesy Balls ... mm mm mmmm', 1.00),
    ( 'Cheese Balls +', 'Cheesy Balls with a caffeine kick', 2.00),
    ( 'Cheese Squares', 'Cheesy squares with a hint of ginger', 2.50);

    EXEC spRunETL 'AUTO-DEPLOY';
END
ELSE IF($(EnvironmentName) = 'Client_Dev')
BEGIN
    CREATE LOGIN [WebLogin] AS USER [FABRIKAM\AppPoolUser];
END
END IF

これは私たちにとってはうまくいきます。このスクリプトをサイトで実行すると、内部環境のユーザーを認証できないため、スクリプトは失敗します。

権限について私が考えた項目の 1 つは、内部チームにsysadmin権限を与えることでしたが、テスト データはスクリプトをいっぱいにするだけでした。サイトに行くとき、このテスト データをすべて持っていると、発行されたスクリプトが肥大化するだけで、とにかく使用されません。

パブリッシュされたファイルからセクションを完全に除外して、パブリッシュされたファイルに手動で介入することなく、すべてのテスト データと不要な挿入を削除する方法はありますか?

4

1 に答える 1

0

残念ながら、現在のところ、参照されたスクリプトの内容を生成されたファイルから完全に削除する方法はありません。

これを実現する唯一の方法は、生成されたスクリプト (選択した Powershell/Ruby/スクリプト言語) を後処理して、何らかの形式の文字列およびファイル操作を使用して、重要な部分を見つけて削除することです。

に基づく: これとまったく同じことを行って、開発環境のみのスクリプトを削除した私の経験は、サイズが大きく、多くの「ノイズ」で本番環境の展開スクリプトを肥大化させ、DBA がスクリプトを賢明に確認することを困難にしました。

于 2014-10-11T02:32:43.473 に答える