sql >> Database >  >> RDS >> Sqlserver

SSIS (SQL Server 2012) Project buiten netwerk implementeren

Je hebt 3 tools voor het implementeren van .ispac-bestanden in de SSISDB-catalogus.

  1. ISDeploymentWizard.exe
  2. ManagedObjectModel
  3. TSQL

U gebruikt de wizard al en deze werkt niet vanwege auth-problemen. Ik denk dat zelfs met je MOM-aanpak je nog steeds auth-problemen tegenkomt. Dat laat de TSQL-aanpak over en aangezien je een geldige aanmelding hebt, zal dit hopelijk werken.

De volgende code zal uw .ispac serialiseren, de implementatiemap maken als deze nog niet bestaat, het project implementeren en vervolgens een parameterwaarde toewijzen.

In SSMS moet u uw modus wijzigen in SQLCMD-modus die beschikbaar is onder het menu Query. Nadat je dat hebt gedaan, druk je op Ctrl-Shift-M om het macro-ding te openen en kun je specificeren waar het .ispac-bestand kan worden gevonden.

USE SSISDB
GO

IF ('$(isPacPath)' = '$' + '(isPacPath)')
BEGIN
    THROW 50000, N'This script must be run in SQLCMD mode.', 1;
END
GO

-- You must be in SQLCMD mode
-- setvar isPacPath "C:\sandbox\SSDTDeploy\TSQLDeploy\bin\Development\TSQLDeploy.ispac"
:setvar isPacPath "<isPacFilePath, nvarchar(4000), C:\sandbox\SSDTDeploy\TSQLDeploy\bin\Development\TSQLDeploy.ispac>"



DECLARE
    @folder_name nvarchar(128) = 'TSQLDeploy'
,   @folder_id bigint = NULL
    -- this must match the ispac
,   @project_name nvarchar(128) = 'TSQLDeploy'
,   @project_stream varbinary(max)
,   @operation_id bigint = NULL;

-- Read the zip (ispac) data in from the source file
SELECT
    @project_stream = T.stream
FROM
(
    SELECT 
        *
    FROM 
        OPENROWSET(BULK N'$(isPacPath)', SINGLE_BLOB ) AS B
) AS T (stream);

-- Test for catalog existences
IF NOT EXISTS
(
    SELECT
        CF.name
    FROM
        catalog.folders AS CF
    WHERE
        CF.name = @folder_name
)
BEGIN
    -- Create the folder for our project
    EXECUTE [catalog].[create_folder] 
        @folder_name
    ,   @folder_id OUTPUT;
END

-- Actually deploy the project
EXECUTE [catalog].[deploy_project] 
    @folder_name
,   @project_name
,   @project_stream
,   @operation_id OUTPUT;

-- Check to see if something went awry
SELECT
    OM.* 
FROM
    catalog.operation_messages AS OM;

-- Use this to set parameters
-- http://msdn.microsoft.com/en-us/library/ff878162.aspx
EXECUTE catalog.set_object_parameter_value 
    -- Use the value 20 to indicate a project parameter 
    -- or the value 30 to indicate a package parameter
    @object_type = 20 
,   @folder_name = @folder_name
,   @project_name = @project_name
,   @parameter_name = N'' -- nvarchar(128)
,   @parameter_value = NULL -- sql_variant
,   @object_name = N'' -- nvarchar(260)
,   @value_type = '' -- char(1)
--  Use the character V to indicate that parameter_value is a literal value 
-- that will be used by default if no other values are assigned prior 
-- to execution. 
-- Use the character R to indicate that parameter_value is a referenced value 
-- and has been set to the name of an environment variable. 
-- This argument is optional, the character V is used by default

Als je de SQL Pass Summit 2012-conferentie hebt bijgewoond, heb ik dit gedemonstreerd in mijn lezing op de 2012 implementatiemodel maar ik heb de parameter niet behandeld een deel. Ik geloof dat die laatste oproep correct is, maar ik heb het niet geverifieerd. Ik heb de documentatie voor de procedureaanroep gekoppeld, zodat u deze kunt afstemmen op uw specifieke behoeften.

Voorbeeld PowerShell-implementatie

Update augustus 2013

Ik heb iets geleerd bij mijn huidige klant. We hebben onze laptops die zijn aangesloten bij het thuisdomein. We hebben accounts op het AD-netwerk van de klant. Wanneer ik iets moet "doen" in de wereld van de klant, moet ik mijn proces starten en het instrueren om mijn "buitenlandse" referenties te presenteren. Wat dit mogelijk maakt is RunAs . Alternatieve referentie

Ik heb een reeks batchbestanden gemaakt die elk proces starten dat ik nodig heb. Ze hebben de vorm van

runas /netonly:ForeignDomain\Doppelganger "C:\windows\system32\cmd.exe"

Ik heb er een voor een opdrachtprompt (hierboven), Visual Studio, SSMS, PowerShell, PowerShell ISE en enkele andere speciale apps die met hun domein moeten werken.

Met behulp van de runas-aanpak heb ik pakketten kunnen implementeren met behulp van alle bovenstaande methoden (en ook rechtstreeks implementeren vanuit een Visual Studio-instantie die wordt uitgevoerd met buitenlandse referenties).



  1. Upsert-fout (Bij conflict Do Update) wijst naar dubbele beperkte waarden

  2. Hoe de Rand-functie te gebruiken in combinatie met Union in MySQL

  3. hoe een of meer velden bij te werken waarbij de lege velden worden genegeerd in de mysql-database?

  4. Waarom is dit een indexscan en geen indexzoekopdracht?