Antes de comenzar debemos conocer los requisitos previos antes de la personalización de nuestro Azure-SSIS Integration Runtime (más adelante Azure-SSIS IR):

La Edición Enterprise de Azure-SSIS Integration Runtime nos permite utilizar las siguientes opciones avanzas:

  • Cambiar componentes de captura de datos (CDC)
  • Conectores Oracle, Teradata y SAP BW.
  • Conectores y transformaciones de SQL Server Analysis Services (SSAS) y Azure Analysis Services (AAS)
  • Agrupación difusa y transformaciones de búsqueda difusa
  • Extracción de términos y transformaciones de búsqueda de términos
  • Algunas de estas funciones se requieren instalar componentes adicionales para personalizar Azure-SSIS IR.

En nuestra demo vamos a configurar o aprovisionar el IR de Azure-SSIS con PowerShell, para instalar los drivers de Oracle para poder conectar a sus bases de datos, por lo que necesitaremos:

  • Descargar e instalar Azure PowerShell (versión 5.4 o posterior).
  • Preparación de un script personalizado, en nuestro caso reconfigure_azure_ssis_ir test.ps1, en este script tenemos que rellenar los datos de la suscripción de Azure e incluir el container donde están los ficheros:
# Azure Data Factory version 2 information 
# If your input contains a PSH special character, e.g. "$", precede it with the escape character "`" like "`$". 
 
$SubscriptionName = "Azure Test"
#$SubscriptionId = "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
#$TenantId = "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb"
 
$ResourceGroupName = "resource-group-test"
# Data factory name. Must be globally unique
$DataFactoryName = "datafac-test" 
$SoftwareSasContainer = "https://test-ir.blob.core.windows.net/ssis-ir-test?st=2018-11-01T10%3A46%3A00Z&se=2019-04-30T10%3A46%3A00Z&sp=rwl&sv=2018-03-28&sr=c&sig=qJhK%2B6wiaHbJB%2B5ZFl5B1MV4L5e4SAk8al7xQQIWefE%3D"
 
# Azure-SSIS integration runtime information. This is a Data Factory compute resource for running SSIS packages
$AzureSSISName = "test-ir"
 
# Edition Azure
$MyAzureSsisIrEdition = "Enterprise"
 
Login-AzureRmAccount
Select-AzureRmSubscription -SubscriptionName $SubscriptionName
#Select-AzureRmSubscription -SubscriptionId $SubscriptionId
#Select-AzureRmSubscription -TenantId $TenantId
 
 
Set-AzureRmDataFactoryV2IntegrationRuntime  -ResourceGroupName $ResourceGroupName `
                                            -DataFactoryName $DataFactoryName `
                                            -Name $AzureSSISName `
                                            -SetupScriptContainerSasUri $SoftwareSasContainer `
                                            -Edition $MyAzureSsisIrEdition `
                                            
write-host("##### Starting your Azure-SSIS integration runtime. This command takes 20 to 30 minutes to complete. #####")
 
Start-AzureRmDataFactoryV2IntegrationRuntime -ResourceGroupName $ResourceGroupName `
                                             -DataFactoryName $DataFactoryName `
                                             -Name $AzureSSISName `
                                            
write-host("##### Completed #####")
write-host("If any cmdlet is unsuccessful, please consider using -Debug option for diagnostics.")

Una vez creado el blob contaniner, por ejemplo, con nombre ssis-ir-test y con la siguiente estructura:

Podemos ver que disponemos de la siguiente información:

Carpeta client_64_bits:  Drivers de instalación de Oracle a 64 bits.
Fichero client.rsp:  Archivo de configuración de instalación silenciosa para instalar los conectores de oracle (ver: https://docs.oracle.com/cd/B19306_01/install.102/b14312/advance.htm)
Ficheros sqlnet.ora y tnsnames.ora: Contiene la información del dominio y las conexiones TNS para conectarse a oracle.
El fichero main.cmd contiene el script de configuración personalizada.

El fichero main.cmd queda configurado de la siguiente manera:

@echo off
 
echo "Start main.cmd"
 
time /T
 
REM Install Oracle Net client
REM .\ORA11_x64\client_64_bits\setup.exe -silent -noconsole -ignorePrereq -responseFile "%cd%\client.rsp" -J"-Doracle.install.client.validate.clientSupportedOSCheck=false"
 
.\ORA11_x64\client_64_bits\setup.exe -silent -noconsole -ignorePrereq -responseFile "%cd%\ORA11_x64\client_64_bits\client.rsp" -J"-Doracle.install.client.validate.clientSupportedOSCheck=false"
echo ".\ORA11_x64\client_64_bits\setup.exe -silent -noconsole -ignorePrereq -responseFile "%cd%\ORA11_x64\client_64_bits\client.rsp" -J"-Doracle.install.client.validate.clientSupportedOSCheck=false" "echo "Complete setup"
 
Waitfor something /t 600 >nul 2>&1
 
REM Set TNS_ADMIN variable for SSIS to read tnsnames.ora file
REM the path is same as the path defiend in response file
setx TNS_ADMIN "%SystemDrive%\ORA11_x64\product\11.2.0\client_1\network\admin" /M
echo "set TNS_ADMIN"
 
REM Copy tnsnames.ora which contains the connection information to be used by SSIS package Oracle Connector
REM TNS Service name can also in format of host:port/service_name, which does not use tnsnames.ora 
start /wait xcopy /R /F /Y %cd%\tnsnames.ora %SystemDrive%\ORA11_x64\product\11.2.0\client_1\network\admin\
 
echo "copied tnsnames.ora"
 
REM Copy sqlnet.ora
start /wait xcopy /R /F /Y %cd%\sqlnet.ora %SystemDrive%\ORA11_x64\product\11.2.0\client_1\network\admin\
 
echo "copied sqlnet.ora"
 
REM Change NLS_LANG in Regedit
 
REM echo "Change NLS_LANG en KEY_OraClient11g_home1"
REM reg add HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraClient11g_home1 /v NLS_LANG /t Reg_Sz /d AMERICAN_AMERICA.WE8IS8859P1 /f
REM echo "NLS_LANG en KEY_OraClient11g_home1 OK"
 
REM echo "Change NLS_LANG en WOW6432Node"
REM reg add HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Oracle\KEY_OraClient11g_home1 /v NLS_LANG /t Reg_Sz /d AMERICAN_AMERICA.WE8IS8859P1 /f
REM echo "NLS_LANG en WOW6432Node OK"
 
REM setup will redirect some of the standard output to log files in folder %SystemDrive%\Program Files\Oracle\Inventory\logs\,
REM we need to copy it to %CUSTOM_SETUP_SCRIPT_LOG_DIR% so that it can be uploaded to your blob container
 
echo "Source log dir is %SystemDrive%\Program Files\Oracle\Inventory\logs\*.*"
 
start /wait xcopy /R /F /Y "%SystemDrive%\Program Files\Oracle\Inventory\logs\*.*" "%CUSTOM_SETUP_SCRIPT_LOG_DIR%\" 
 
echo "copied logs"
 
time /T
echo "Complete main.cmd"

Nótese el paso en el que esperamos 600 s (10minutos), aquí lo que hacemos es dar tiempo para que se instale oracle de forma silenciosa para posteriormente copiar los ficheros tnsnames y sqlnet. También, en nuestro caso hemos cambiado el idioma y en las filas finales del script, copiamos el log de la instalación de Oracle al blob para luego poder revisar si la instalación se ha realizado de forma correcta.

A continuación, vamos reconfigurar Azure-SSIS IR con PowerShell utilizando el script de arriba, para el siguiente IR que hemos configurado para la demo. El IR debe de estar en estado parado, ya que durante la ejecución con PowerShell se encargará de levantar el IR y posteriormente llamar al fichero main.cmd para comenzar con la instalación y configuración:

A continuación, ejecutamos el fichero:

Nos pedirá iniciar sesión en Microsoft Azure. Una vez iniciada comenzará la instalación (ejecutará el archivo main.cmd), en nuestro caso del driver de conexión de Oracle:

Una vez finalizado, nos aparecerá el siguiente mensaje:

Podemos ir a revisar los logs que nos ha creado en blob de instalación, la carpeta main.cmd.log:

Esta carpeta contiene todos logs y crea subcarpetas según el número de nodos que hemos seleccionado al crear el IR.

En nuestro caso podemos ver hay dos IR llamados tvm-20300199029 a continuación del nombre viene el número de nodos del IR: 1 y 2, después la fecha y hora.

Para comprobar los logs debemos de revisar ambas carpetas para ver que la instalación fue satisfactoria.

Al abrir el log de un nodo, podemos ver que los ficheros de error tienen un tamaño de 0 bits o no han tenido errores:

Si abrimos el resto de ficheros:

Fichero: oraInstall2018-11-22_01-14-40PM.out: Nos dice dónde está el fichero de log.  En el fichero main.cmd se ha especificado que se copien los logs de la instalación de Oracle en este ruta, para poder revisar el estado de la misma:

Fichero: installActions2018-11-22_01-14-40PM.log: Contiene la información de instalación de Oracle, al final del fichero se informa el estado de la misma:

Por último, el fichero stdout.log, se crea de forma automática a partir de la ejecución main.cmd. En el podemos ver según lo configurado el inicio y fin de la ejecución y el esto de información sobre las ejecuciones:

Una vez revisados de los logs y con resultado satisfactorio, ya podríamos ejecutar Paquetes de SSIS con un origen de datos Oracle en Azure.