Je hebt 3 tools voor het implementeren van .ispac-bestanden in de SSISDB-catalogus.
- ISDeploymentWizard.exe
- ManagedObjectModel
- 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).