dilluns, 29 de maig de 2017

Modificar project.Params dinàmicament desde SSDT


A partir de SSIS 2012 tenim l'opció de treballar en package deploymen o project deploymnent. Si treballem en project deployment tenim un fitxer Project.prarams non és una bona pràctica tenir mapejades les connexions que tenim, com poden ser les de BBDD. Per temes de seguretat també és bona pràctica que les connexions siguin per Windows Authentication, sobretot un cop pujades al servidor. El que ens passa a vegades és que quan desenvolupem el nostre usuari no té permisos de Windows Authentication i ens hem de logar a la BBDD per usuari i password d'SQL Server. Quan tenim aquest cas hem de modificar a mà cadascun dels paràmetres.

Avui veurem una manera d'automatitzar la transformació del fitxer de paràmetres de Windows Authentication a login d'SQL Server i a la inversa. Per fer-ho farem servir PowerShell.

Abans de poder utilitzar PowerShell necessitarem habilitar els permisos, sinó ens pot donar un error del tipus:
    ./XXXXXXXXXXXX.ps1 : No se puede cargar el archivo C:\Temp\XXXXXXXXXXXX.ps1 porque la ejecución de scripts está
    deshabilitada en este sistema. Para obtener más información, vea el tema about_Execution_Policies en
    http://go.microsoft.com/fwlink/?LinkID=135170.
    En línea: 1 Carácter: 1
    + ./XXXXXXXXXXXX.ps1
    + ~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : SecurityError: (:) [], PSSecurityException
        + FullyQualifiedErrorId : UnauthorizedAccess



Per evitar aquest error hem d'executar: Set-ExecutionPolicy Unrestricted
Aquesta comanda s'ha d'executar com a administrador en el PowerShell de 32-bits (per a que funcioni des del SSDT). Jo recomano fer-ho tant en el de 32-bits com el de 64-bits.


Un cop tenim els permisos assignats ja podem començar a fer els scripts. Farem primer un script en PowerShell per a fer la modificació del contingut del fitxer project.Params, després invocarem aquest fitxer des d'un bat per poder-li invocar desde SSDT i finalment configurarem l'excució del .bat com a external tool.

SCRIPT POWERSHELL

 param (
    [Parameter(Mandatory=$true)][string]$path,
    [Parameter(Mandatory=$true)][string]$username,
    [Parameter(Mandatory=$true)][string]$password
 )
$strReplace = "User ID="+$username+";Password="+$password+";"
(Get-Content $path\Project.params) | ForEach-Object { $_ -replace "Integrated Security=SSPI;", $strReplace } | Set-Content $path\Project.params



A aquest script li passem 3 paràmetres: path on està el fitxer Project.params, username d'SQLServer i password.
El que fa l'script és agafar tots els fitxers Project.params del path indicat (només n'hi haurà 1) i per cadascun d'ells substitueix Integrated Security=SSPI; per User ID=<username>;Password=<password>. Finalment bolca el nou contingut altre cop a Project.params

Aquest és l'script per canviar de Windows Authentication a SQL Server login, per al cas invers només cal canviar la darrera fila per:
(Get-Content $path\Project.params) | ForEach-Object { $_ -replace $strReplace, "Integrated Security=SSPI;" } | Set-Content $path\Project.params


SCRIPT BAT
Suposem que el nostre script de powershell es diu: c:/temp/fromWinToUser.ps1

powershell c:/temp/fromWinToUser.ps1 %1 %2 %3 %4 %5 %6


Els paràmetres són els següents:
%1 = -path
%2 = path del fitxer Project.params
%3 = -username
%4 = username SQL Server
%5 = -password
%6 = password SQL Server


Aquest bat ens servirà per poder invocar el PowerShell a través del SSDT

EXECUCIÓ DESDE SSDT
Per executar la comanda des de SSDT anirem a Tools --> External Tools... i n'afegirem una de nova amb les següents característiques:
Title: FromWinToUser
Command: <path del bat>\fromWintoUser.bat
Arguments: -path $(ProjectDir) -username <username> -password <password>

Cal marcar el check "Prompt for arguments" i és aconsellable marcar també "Use Output Window".


Per afegir el pas fromUserToWin s'ha de fer exactament el mateix apuntant a l'altre bat.

Un cop ho tenim configurat ja ens apareix al menú de Tools. Quan ho executem ens apareix la pantalla per introduir els paràmetres. Ho modifiquem amb l'userId i password d'SQL Server i executem.

 Si tot ha anat correcte SSDT ens informarà que el fitxer ha estat modificat des d'una app externa i si el volem sobreescriure.

Quan acabem hem d'executar la funció inversa per retornar les connexions a Windows Authentication.

Hem d'anar amb compte si el path on està el fitxer Project.params té espais, és possible que els paràmetres passats al bat no els agafi correctament.

dilluns, 15 de maig de 2017

Generar ISPAC des de línia de comandes

En SSIS quan treballem en projecte deployment per poder pujar un projecte a producció és necessari fer un Deploy del projecte. El deploy el podem fer des del SSDT (botó dret al nom del projecte --> deploy).


Quan fem aquest click internament s'està generant un fitxer .ispac que conté la informació del projecte (dtsx, params, manifest). Aquest fitxer ispac si no toquem res estarà a dins de la carpeta del nostre projecte a la subcarpeta /bin/development. Si l'obrim amb un descopresor tipus 7-zip podrem veure els fitxers a dins. Un cop generat l'ispac se'ns obre un wizard per poder deployar el projecte a un servidor. Hem de tenir en compte que només es pot deployar si l'usuari amb el que ens hem logat a la màquina té permís sobre el servidor. En el post http://www.eljordifabi.tech/2017/04/desplegament-automatic-de-paquets-ssis.html podeu veure alternatives de desplegament.

dilluns, 1 de maig de 2017

SQL Server 2017

Microsoft ja té preparada la CTP 2 del SQL Server 2017. Saltan-se la freqüència de 2 anys desde la versió 2008, aquest cop només passarà un any entre una versió i una altra.
La podeu descarregar aquí: https://www.microsoft.com/en-us/sql-server/sql-server-2017
i aquí teniu el datasheet: download.microsoft.com/download/F/9/A/F9A1B5AA-D57C-4B4D-9C3E-715B800B0419/SQL_Server_2017_Datasheet.pdf
Es rumoreja que el 31 de maig sortirà ja la versió RTM.

Quines són les principals novetats?
- Poder programar en Python dins del SQL Server. A la versió 2016 ja van introduir l'R i ara com a novetat en l'apartat d'anàlisi introduieixen també Python. Els científics de dades estaran contents (https://blogs.technet.microsoft.com/dataplatforminsider/2017/04/19/python-in-sql-server-2017-enhanced-in-database-machine-learning/)
- Millora dels backups, tant els diferencials com els de log. Serà de molta ajuda per als DBAs.
- Select  into ... on filegroup. Es podrà indicar a quin filegroup anirà una taula creada amb la sentència Select into .
- Millores en la tempdb. A SQL Server 2016 ja s'havien aplicat millores a la tempdb, Microsoft decideix seguir pel mateix camí a SQL Server 2017.
- Versió per a Linux. Aquest cop les versions per Windows i Linux sembla sortiran a la vegada, una aposta clara de Microsoft cap a servidors amb SO Linux.