divendres, 21 de setembre del 2018

Biml Express - Enginyeria inversa


Ha sortit una nova versió de BIML Express per visual studio amb una novetat molt important:
    Added the Import Packages window to enable users to import existing SSIS packages and projects and convert them to Biml
   
   
Ja podem fer enginyeria inversa de les nostres ETLs, una característica que només estava disponible via pagament.
Això facilita la programació dels BIMLs, ja que podem crear l'ETL en SSIS, fer l'enginyeria inversa i després afegir-li la lògica en C# per poder automatitzar la creació de l'ETL segons els paràmetres que necessitem.

Link per descarregar.
https://www.varigence.com/BimlExpress




dimarts, 26 de juny del 2018

BIML Express 2018

Fa uns 2 anys que vaig començar el bloc centrant-me sobretot en BIML. En aquell moment la millor manera de programar BIMLs era a través del BIDS Helper. El problema que tenia el BIDS Helper era que l'interfície a l'hora de veure el codi BIML era molt justeta. Quan posaves codi c# emmig del codi BIML ja ho detectava com a error, les identacions no funcinaven del tot bé, etc.
Des de Varigence van treure el BIML Express que s'integrava amb el Visutal studio i millorava, sobretot, els temes d'intefície. Però la vida no era bonica del tot ja que no funcionava amb el Visual Studio 2017 ( que petardeja bastant en altres temes com el TFS, però això és una altra història).
Finalmen ha sortit la versió 2018 de BIML Express que ja funciona correctament per VS2017. Ara ja podem tenir tot el codi BIML amb colorets i amb els indicadors d'errors correctes. També té un preview de codi que és molt útil quan tenim bucles o variables que s'agafen de BBDD, així podem veure com quedarà el codi BIML final que ens generarà els DTSX.
Per poder instal·lar el BIML Express 2018 cal la versió 4.7 del framework.net.



Les notes de la versió són: https://varigence.com/Documentation/BimlExpress/Article/BimlExpress+2018
Aquí teniu el link per descarregar-lo: https://varigence.com/downloads/bimlexpress.vsix

dimecres, 23 de maig del 2018

Timeouts a la SSISDB

Un dels problemes que m'he trobat quan executo paquets de SSIS que estan guardats en la SSISDB es que si s'executen molts a la vegada a vegades tenim error de timeout a l'hora d'accedir al paquet.
Les dues taules principals que es consulten a l'hora d'iniciar l'execució d'un paquet a través d'un job són:
- internal.object_parameters: conté els paràmetres de cada paquet
- internal.execution_parameter_values: conté els paràmetres que s'han utilitzat en cadascuna de les execucions

El que ens interessa es tenir aquestes dues taules el més petites possible.
Per tal de reduir internal.object_parameters el que hem de fer és que el "Maximum Number of Versions per Project" sigui el més petit possible. En cas que tinguem algun sistema de versionat de codi ho podrem deixar a algun valor bastant baix com 3. En cas que no tinguem cap repositori de codi el risc de rebaixar-ho és molt més alt.
Per reduir internal.execution_parameter_values el que hem de fer és que el "Retention Period (days)" sigui el més petit possible. Aquí depèn de la quantitat de logs que vulguem tenir, però si volem tenir històric es poden bolcar les dades a un Datawarehouse i tenir els logs consultables a la SSISDB de 10 dies.



Si encara seguim tenint timeouts podem modificar el procediment: catalog.create_execution
A la línia 168 tenim el nombre d'intents per accedir al paquet. Per defecte està a 2, podem augmentar el valor per que faci més intents.
A la línia 174 hi ha la variable @LockTimeOut que són els segons que s'espera per tornar a fer un nou reintent.

DECLARE @lock_result int
DECLARE @retry int
SET @lock_result = -1
SET @retry = 2
WHILE @retry > 0 AND @lock_result < 0
BEGIN
EXEC @lock_result = sp_getapplock
        @Resource = 'MS_ISServer_Create_Execution',
        @LockTimeOut= 5000,
        @LockMode = 'Exclusive'

    SET @retry = @retry - 1
END



Si havent reduit les versions, el log i modificant el procediment encara tenim timeouts només ens queda l'opció de reduir els paquets que s'executen en paral·lel o posar més ferro al servidor.

dilluns, 30 d’abril del 2018

DLLs externes SQL Server (2016)

Fins a la versió d'SQL Server 2014 si voliem utilitzar DLL externes en teníem prou en copiar-les a C:\Program Files (x86)\Microsoft SQL Server\<versió sql server>\DTS\Binn o C:\Program Files\Microsoft SQL Server\<versió sql server>\DTS\Binn segons si la DLL es de 30 o 64 bits.
A partir de la versió 2016 hem de fer les coses ben fetes i cal registrar les DLL amb la utilitat gacutil.

Gacutil el podem trobar a dins de C:\Program Files (x86)\Microsoft SDKs\Windows depenent de la versió del framework .net que tinguem instal·lat.
Per exemple "C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\gacutil"





Aquest és un exemple de comanda per utilitzar la DLL d'AWS. On a c:\dll teim les dll que volem registar.

"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\gacutil" /i C:\dlls\AWSSDK.Core.dll




Un cop registada la DLL apareixerà a la següent carpeta:
C:\Windows\assembly

La referència a utilitzar en els scripts del SSDT serà del tipus:
C:\Windows\assembly\GAC_MSIL\AWSSDK.Core\3.3.0.0__885c28607f98e604\AWSSDK.Core.dll

Amb aquestes comandes ja podrem utilitzar DLLs externes a dins dels nostres Script Task a partir en SQL Server.



diumenge, 22 d’abril del 2018

Emmascarar noms de taules i camps MDS

En el passat post veiem com migrar models entre entorns o entre versions. Un dany col·lateral de la migració és que els noms de les taules i dels camps que genera automàticament l'MDS. Això ens impacta a l'hora de fer ETLs o altres processos que utilitzin les taules d'MDS. Una solució es crear una vista que emascari aquests noms variables, però aquest procés ha de ser el més automàtic possible per evitar accidents humans.
Avui veurem un procediment per poder crear automàticament les vistes. Aquest procediment utilitzarem les sentències que vam veure en el post: http://www.eljordifabi.tech/2018/03/crear-una-vista-en-una-altra-bbdd.html

dilluns, 9 d’abril del 2018

Migració MDS I (movent models entre servidors)

Quan treballem en diversos entorns, o bé hem de fer una migració de versió de MDS, per moure/migrar els models no ho podem fer copiant directament les dades d'una BBDD a una altra. Si és la mateixa versió per que no podem garantir que els ids siguin els mateixos (pot haver agents externs que hagin afegit models, per exemple) i en una migració per que les taules no són les mateixes ni tenen la mateixa esructura.
Per tal de fer el moviment de models entre servidors utilitzarem la utilitat MDSModelDeploy.

MDSModelDeploy està a la carpeta c:\Program Files\Microsoft SQL Server\120\Master Data Services\Configuration
En el cas de tenir el servidor en SQL Server 2014, si és SQL Server 2016 la carpeta és la 130.

El primer que hem de fer és trobar el nostre servei fent un listservices.

En el nostre cas és el MDS5 (MDSPRO).

dimarts, 27 de març del 2018

Crear una vista en una altra BBDD

En algun cas ens podem trobar amb la necessitat de crear una vista en una BBDD diferent de la que estem, per exemple dins d'un store procedure, però ens trobem amb 2 problemes:
  • La sentència create view ha de ser la 1a, amb el que no podem fer servir un:
 use <bbdd> create view ...
  • No podem especificar la BBDD en la sentència create
create view <bbdd>.dbo.view as

En aquests casos podem utilitzar el procedure sp_executesql posant-li a dins la sentència create.
Aquest store procedure s'invocarà des de la BBDD a la cual volem crear la vista.

exec <bbdd>.sys.sp_executesql  'create view v_xxxx as ...'
Aquesta sentència ens ajudarà a crear vistes per a estar preparats per a una migració poc dolorosa d'MDS, que ho veurem al proper post.

diumenge, 11 de febrer del 2018

Nombres aleatoris T-Sql

Tornem a l'SQL Server.
Avui veurem com generar números aleatoris diferents en una consulta.

Si executem:
select o.object_id, rand() as random
from sys.objects o

Veiem que el valor de random sempre és el mateix per a tots els objectes, però nosaltres volem un valor diferent per a cadascun.



La funció Rand (https://docs.microsoft.com/en-us/sql/t-sql/functions/rand-transact-sql) ens permet posar un seed, per al mateix seed el valor aleatori sempre és el mateix.

diumenge, 28 de gener del 2018

Bot Telegram 2: cosetes útils


En el passat post vam veure com crear un bot de Telegram programat en python. Ara veurem algunes coses que ens poden ser útils.

A la funció start d'inici de bot se li passen 2 paràmetres: bot i update
Bot té les dades del bot:
Ex:
{'username': u'ElJordifaBIBot', 'first_name': u'ElJordifaBIBot', 'id': 515033793}

I update té els dades de l'usuari:
Ex:
{'message': {'delete_chat_photo': False, 'new_chat_photo': [], 'from': {'first_name': u'Jordi', 'is_bot': False, 'id': 353926538, 'language_code': u'es-ES'}, 'text': u'/start', 'caption_entities': [], 'entities': [{'length': 6, 'type': u'bot_command', 'offset': 0}], 'channel_chat_created': False, 'new_chat_members': [], 'supergroup_chat_created': False, 'chat': {'first_name': u'Jordi', 'type': u'private', 'id': 353926538}, 'photo': [], 'date': 1517151466, 'group_chat_created': False, 'message_id': 12, 'new_chat_member': None}, 'update_id': 541194784}

De l'update podem extrure informació molt útil com el:
    - update.message.chat.id: és l'id del chat, és sempre el mateix per usuari i ens permetrà identificar-lo. També ens permetrà enviar-li missatges al seu telegram. Per exemple, per respondre a una acció o bé per enviar un missatge en boradcast a tots els usuaris connectats.
    - update.message.chat.first_name: és el nom de l'usuari, per referir-nos a ell.
    etc.
   

dissabte, 13 de gener del 2018

Bot Telegram 1: primers pasos

Avui canviarem de tema: farem un bot de telegram.
I que te a veure això amb el BI? Doncs a priori no massa, però com que estarà fet amb python podem posar-li una BBDD i uns gràfics i ja ho podem donar per bo.

Com funciona un bot de telegram?

Telegram fa d'intermediari entre el nostre mòbil i una aplicació que ha d'estar corrent en un servidor. En el nostre cas l'aplicació estarà feta en Python i el servidor serà una Raspberry Pi. Utilitzarem també una BBDD en SQLite ja que per aquesta prova de concepte no fa falta grans recursos, però el servidor en comptes d'una Raspberry pdria ser molt més gros i el SGBD també podrem triar el que més ens agradi.


Telegram només fa de cua de missatgeria entre dispositius. S'ha de tenir en compte que l'espai que ens dedica Telegram per guardar els missatges que s'envien és limitat i pot ser que es perdin missatges.

dilluns, 18 de desembre del 2017

Cursors SQL Server

Avui un post senzill. Com declarar i utilitzar un cursor en SQL Server controlant errors, evitant que es quedi memòria assignada, etc.

--Variable estat del cursor
declare @cur_status int

--variables on assignarem els resultats del cursor
declare @a int
-- ..
-- ..

-- Si el cursor no existeix el creem
SELECT @cur_status=CURSOR_STATUS('global','cur')

if @cur_status=-3 begin
    --declarem el cursor
    declare cur cursor for
    -- query SQL
    select 1 as a union all select 5

    --Si el cursor no està obert, l'obrim
    SELECT @cur_status=CURSOR_STATUS('global','cur')
    if @cur_status=-1
        OPEN cur

    -- assignem les variables al cursor
    FETCH cur INTO @a --,@b, ..., @z
    --Mentre hi hagi files al cursor
    WHILE (@@FETCH_STATUS = 0)
    BEGIN   
        -- codi a executar per cada fila del cursor
        print @a
        -- assignem les següents variables al cursor
        FETCH cur INTO @a --,@b, ..., @z
    END --final del bucle

    --Si el cursor està obert, el tanquem
    SELECT @cur_status=CURSOR_STATUS('global','cur')
    if @cur_status>=0
        close cur

    --Si el cursor està assignat, el desassignem per deixar net l'stack de variables
    SELECT @cur_status=CURSOR_STATUS('global','cur')
    if @cur_status<>-3
        deallocate cur

end
else
    print 'El cursor ja existeix '


Amb aquesta estructura d'script podem crear i utilitzar un cursor en SQL Server validant que no existeixi, obrint-lo només si fa falta i assegurant-nos que el tanquem i dessasignem per evitar futurs errors al reobrir-lo i evitant que es quedi memòria reservada que no utilitzem.

dijous, 7 de desembre del 2017

Windows authentication en SQL Server

Avui va un post no estrictament de SQL Server.
M'he trobat vegades que necessito entrar al SQL Server a través de Windows Authentication per que no estan activats, o no es volen activar, els logins de SQL Server, i la màquina des de la que vull entrar no està dins de domini.
Per aquests casos es pot executar la comanda runas de CMD.
Serveix tant per el SSMS, SSDT, Excel per connectar-nos a SSAS o MDS.

Les comandes a executar serien del tipus:
SSMS
runas /netonly /user:domini\usuari "C:\Program Files (x86)\Microsoft SQL Server\120\Tools\Binn\ManagementStudio\Ssms.exe"
SSDT
 runas /netonly /user:domini\usuari "C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\devenv.exe"

 
Un cop executada la comanda ens demanarà el password, i ja haurem entrat al programa autenticats amb l'usuari de Windows indicat.
S'ha de tenir en compte que l'usuari que apareix al SSMS segueix sent l'original en el que estem a la màquina, però internament té l'usuari que li hem indicat a la comanda.

 

dimarts, 21 de novembre del 2017

Guardar SP d'SQL Server en una taula

A vegades ens trobem amb Stored Procedures d'SQL Server que ens retornen dades en format taula i ens agradaria poder guardar-los en una taula. La forma d'invocar un procediment i que el guardi en una taula és el següent:
insert into #la_nostra_taula EXEC sp_spaceused 'Taula'

La funció sp_spaceused és molt útil per que ens dóna informació sobre l'espai que ocupa una taula.


Però si volem saber aquesta informació de totes les taules hauríem d'invocar el procediment per cadascuna d'elles per separat. Si ho fem des del SSMS el resultat no és còmode de tractar.


En aquest cas serà útil invocar la funció per cada taula i guardar-lo en una taula final per després consultar-la.

Primer crearem una taula temporal per guardar les dades de la funció sp_spaceused. La funció sp_spaceused retorna varchars, però per nosaltres és més còmode tenir les dades en format nuèric per poder-les aggregar. Aleshores crearem una taula final amb els mateixos valors en format int.


create table #TaulaTemporalSpaceUSed (
    Name varchar(255),
    [rows] int,
    reserved varchar(255),
    data varchar(255),
    index_size varchar(255),
    unused varchar(255))
       
create table TaulaFinalMida (
    Name varchar(255),
    [rows] int,
    reservedKb int,
    dataKb int,
    reservedIndexSize int,
    reservedUnused int)

   
   
Per no haver d'executar la funció sp_spaceused per cada taula manualment executarem el procediment sp_MSforeachtable que recorre totes les taules de la BBDD on estem.
   
EXEC sp_MSforeachtable @command1="insert into #TaulaTemporalSpaceUSed
EXEC sp_spaceused '?'"
insert into TaulaFinalMida (Name, [rows], reservedKb, dataKb, reservedIndexSize, reservedUnused)
select name, [rows],
SUBSTRING(reserved, 0, LEN(reserved)-2),
SUBSTRING(data, 0, LEN(data)-2),
SUBSTRING(index_size, 0, LEN(index_size)-2),
SUBSTRING(unused, 0, LEN(unused)-2)
from #TaulaTemporalSpaceUSed

select * from TaulaFinalMida
order by reservedKb desc

drop table #TaulaTemporalSpaceUSed





Amb aquest script podem extreure de forma eficient i simple l'espai ocupat per les taules d'una BBDD. Si hi afegim el procediment sp_MSforeachdb podem recòrrer totes les BBDD i executant l'script anterior podrem etreure l'espai ocupat per totes les taules de totes les BBDD.

dilluns, 18 de setembre del 2017

MDS: problema models sense accés

Tornem amb MDS.
Recentment m'he trobat amb un problema amb els permisos. Quan es crea un model, per defecte, només té permisos la persona/grup que l'ha creat. Si s'esborra el grup ningú té accés a aquest model i queda penjat.
Hi ha una forma de recuperar-ho per la porta del darrera, a través de la BBDD MDS.
La taula que té els models és: [mdm].[tblModel]. D'aquí extraurem l'id del model que volem recuperar permisos.
Amb la consulta:
    select *
    from [mdm].[tblSecurityRole]
    where name like 'Role for UserAccount %\<<usuari>>'

    obtindrem l'id de l'usuari al que volem donar permisos.
La taula amb els usuaris és: [mdm].[tblUser]
La taula on s'ha de fer insert és: [mdm].[tblSecurityRoleAccess]

L'insert ha de ser del tipus:
    insert into [mdm].[tblSecurityRoleAccess]
    (Role_ID, Privilege_ID, Model_ID, Securable_ID, Object_ID, Description, Status_ID, EnterDTM, EnterUserID, LastChgDTM, LastChgUserID, MUID)
    values
    (<<ROLE_ID>>, 2, <<MODEL_ID>>, <<MODEL_ID>>, 1, <<Nom model>> (Update), 1, getdate(), <<USER_ID>, getdate(),<<USER_UD>>, newid())


Un cop fet aquest insert l'usuari ja tindrà accés al model penjat.
Crec que és un error del sistema el fet que no hi hagi un superusuari que tingui accés a tots els models i que hi hagi la possiblitat que quedin models penjats.
També és un error (subsanable amb permisos de BBDD) que es puguin fer inserts directament a les taules de sistema, sobretot tenint en compte que preten ser un sistema amb auditoría de canvis.
   

dissabte, 22 de juliol del 2017

SQL Server 2017 RC1

Ja la tenim aquí!!
Per fi ha sortit la RC1 d'SQL Server 2017.
Amb un parell de mesos de retard respecte els rumors.

Aquí teniu la notícia oficial:
 https://blogs.technet.microsoft.com/dataplatforminsider/2017/07/17/first-release-candidate-of-sql-server-2017-now-available/

Ara toca probar el rendiment amb servidor Windows Server vs servidor Linux. És probable que ens toqui migrar de servidor de bbdd i de SO a la vegada. Diversió assegurada...

Aquest post és més curt que estic de vacances sense ordinador.

dijous, 29 de juny del 2017

Control de versions SSDT 2013 amb TFS

Avui veurem com configuar una connexió TFS per al SSDT 2013 per a poder tenir versionat del nostre codi.
Per poder utilitzar tfs ens hem de baiar el fitxer vs_teamExplorer.exe
Últimament costa bastant de trobar, adjunto link que espero que no deprequin:
http://download.microsoft.com/download/9/B/4/9B44FFC8-64C2-4091-9028-6E8550E9C96E/vs_teamExplorer.exe
 En SSDT 2015 el plug-in ja ve instal·lat per defecte.

Un cop tenim el plug-in de TFS podem anar al menú Team --> Connect to Team Foundation Server…

dilluns, 29 de maig del 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 del 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 del 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.

dilluns, 24 d’abril del 2017

Desplegament automàtic de paquets SSIS

Avui veurem un sistema per pujar ETLs en la versió SQL Server 2014 que estiguin en project deployment a través de sentències SQL.
Aquest sistema és molt més ràpid que el deploy de projectes a través de SSDT, sobretot quan hi ha molts projectes ja desplegats.

També permet no haver de donar permisos de despegament de projectes a tots els developers ja que l'usuari que desplegarà quedarà encapsulat en el job d'SQL.

El procediment funcionarà de la següent manera:
Tindrem una carpeta on es deixaran els .ispac a desplegar i els .sql amb el codi de modificació de BBDD i amb les configuracions d'environments. Aquesta carpeta serà accessible des del servidor d'SQL Server.
Tindrem una taula on registrarem els .ispac que s'han de desplegar, juntament amb scripts d'alter de BBDD i configruació d'environments.
Hi haurà un job d'SQL Server que s'executarà com un daemon i anirà mirant la taula per si hi ha projectes pendents de desplegar.
Per cada ispac s'executarà el procediment i registrarà si ha acabat correctament o no.