SQLServer2005: Enlazar logins de instancia con logins de BD

En SQL Server se tiene una capa doble de autenticación, por una parte se tienen los usuarios de instancia  (Security - Logins) y luego a nivel de BD tenemos otros logins (DB - <DB_Name> - Security - Users). Después de realizar un restore de base de datos, estos logins pueden quedar descoordinados con lo que es necesario volver a enlazar los logins de instancia con los de BD. Para ello podemos usar la siguiente instrucción por cada usuario a enlazar (para ello se requiere una cuenta de administrador de BD):

 
USE DATABASE_NAME;
 
GO
 
EXEC sp_change_users_login 'Auto_Fix', 'username', NULL;
 
GO

SSIS Expresión: Como obtener un DT_STR con el formato de la fecha y hora de ejecución

La siguiente expresión nos permite obtener la fecha y la hora de ejecución de un package de SSIS.

Por ejemplo, si la fecha es 02/01/2010 10:09, la expresión devolverá el siguiente DT_STR:

“20100102_1009″.

Lo publico porqué no me ha parecido trivial el modo de conseguir obtener dos dígitos para todos los campos, pues la función DatePart solamente devuelve un integer sin 0’s a la izquierda, para ello, usamos la función RIGHT, que nos añade los ceros faltantes. Esta función puede resultar muy útil para renombrar ficheros de carga con la fecha y hora de carga y guardarnos un histórico.

(DT_STR, 4, 1252) Year( @[System::StartTime] ) +  right("0"+(DT_STR, 4, 1252)  Month( @[System::StartTime] ),2) +  right("0"+(DT_STR, 4, 1252)  Day ( @[System::StartTime] ),2) +"_"+  right("0"+(DT_STR, 2, 1252)  Datepart ("hh", @[System::StartTime] ),2) +  right("0"+(DT_STR, 2, 1252)  Datepart ("mi", @[System::StartTime] ),2)

APEX Printing PDF reports using COCOON instead of BI Publisher

Since I think this can be quite useful I’ll write it down in English.

I’ve followed the steps proposed by Carl Backstorm but I’m going to install it in a Linux Server (Ubuntu 8.04).

Files needed:

Cocoon 2.1.11
Tomcat 6
fop_post.zip

Download and decompress them all.

1) Download and decompress cocoon-2.1.11
2) Check JAVA is installed (I installed jdk6) and
be sure JAVA_HOME is set to your actual location:

$ export JAVA_HOME=/usr/

Go to the decompressed folder (cocoon-2.1.11/) and execute:

$ ./build.sh war

3) Notice where cocoon.war was built:

cocoon-2.1.11/build/cocoon

4) Copy cocoon.ware to tomcat in webapps directory

apache-tomcat-6.0.18/webapps/

5) Copy fop_post folder to

apache-tomcat-6.0.18/webapps/cocoon/

6) Start apache tomcat:

Before doing that, you may want to change apache port in order to avoid conflicts with APEX port.
You can change apache 8080 port to 8088 by editing conf/server.xml and replacing 8080 with 8088.

(locate to tomcat folder and run as root)

$ sudo ./bin/startup.sh

7) Check installation is right by accessing http://localhost:8088/cocoon

8) Now, let’s configure APEX in order to be able to print reports in PDF using cocoon:
8.1) Login with internal APEX account
8.2) Go to Manage Service -> Instance Settings -> Report Printing
8.3) Change to new configuration
Print Server Host Address: localhost
Print Server Port: 8088
Print Server Script: /cocoon/fop_post/

9) You may want to start cocoon automatically at startup. Then you can create a file under /etc/init.d like the following one:

/etc/init.d/cocoon.sh

1
2
3
4
#!/bin/bash
JAVA_HOME=/usr/
echo "Starting Apache Cocoon..."
/opt/apache-tomcat-6.0.18/bin/startup.sh

Make it executable

$ sudo chmod +x /etc/bin/cocoon.sh

and add it in your boot process:

$ update-rc.d cocoon.sh defaults

Hope it helps!!

Further information:
http://carlback.blogspot.com/2007/03/apex-cocoon-pdf-and-more.html

ORACLE: Compile all invalid objects

Para compilar los objetos inválidos del usuario de BD actual podemos ejecutar el siguiente script:

1
2
3
4
5
6
7
8
SELECT 'ALTER '
  ||decode(object_type,'PACKAGE BODY','PACKAGE',object_type)
  ||' '
  ||object_name
  ||decode(object_type,'PACKAGE BODY', ' COMPILE BODY;',' COMPILE;')
   FROM user_objects
  WHERE STATUS   = 'INVALID'
AND object_type IN ('PACKAGE','PACKAGE BODY','FUNCTION','PROCEDURE');

Esto nos generará una serie de alters para poder recompilar los objetos inválidos.

Oracle: Script para hacer un drop de all user objects

Un ejemplo de script para hacer un drop de todos los objetos del usuario seria el siguiente:

1
2
3
4
5
6
7
8
9
SELECT 'drop sequence ' || sequence_name || ';' FROM user_sequences
UNION
SELECT 'drop trigger ' || trigger_name || ';' FROM user_triggers
UNION
SELECT 'drop view ' || view_name || ';' FROM user_views
UNION
SELECT 'drop index ' || index_name || ';' FROM user_indexes
UNION
SELECT 'drop table ' || table_name || ';' FROM user_tables;

De momento solamente hace drops de triggers, vistas, índices y tablas pero se puede añadir unions para generar el drop de lo que queramos.

Una vez ejecutada la consulta, copiar el resultado en una hoja de SQL y ejecutarla. Es posible que nos den errores por dependencias y no se borren todos los objetos, en ese caso lo que hago es ejecutar el script varias veces hasta que se borren todos los objetos (se debería hacer una nueva versión que calcule las dependencias pero eso ya seria demasiado tiempo…)

Averiguar con que versión de BD Oracle estamos trabajando

Para descubrir la versión de Base de Datos Oracle con la que estamos trabajando podemos ejecutar la siguiente sentencia SQL:

SELECT * FROM SYS.V_$VERSION;

Modificar un tablespace para que sea AUTOEXTEND

ALTER database datafile
'/oracle/oradata/tablespace.dbf'
autoextend ON;

Oracle: Crear un nuevo esquema de BD

Para crear un esquema de BD primero tendremos que crear un tablespace asociado y posteriormente crear el usuario. Aquí tenemos un ejemplo, suponiendo que queremos crear el usuario xx_schema con password xx_schema:

sqlplus /nolog
sql> CONNECT / AS sysdba
sql> CREATE tablespace xx_schema datafile '/oracle/oradata/xx_schema.dbf' size 500 M AUTOEXTEND ON MAXSIZE 1800M EXTENT MANAGEMENT LOCAL UNIFORM SIZE 128K;
sql> CREATE USER xx_schema identified BY XX_SCHEMA DEFAULT tablespace xx_schema;
sql> Grant CONNECT,Resource TO xx_schema;

Iniciar el entorno en UNIX desde OnDemand

Hay un fichero que contiene todas la inicialización de todas las variables. Se puede encontrar en $ORACLE_HOME ([instancia]/product/[version])

si hacemos un:

ls *env*

veremos el listado de ficheros de incialización de entorno. Para ejecutarlos (supongamos un fichero llamado entorno.env):

. ./entorno.env

Una vez cargado el entorno podríamos entrar en el sqlplus, por ejemplo.

SPOOL, cómo guardar el output de un sqlplus en un fichero

Si queremos guardar el output de la ejecución de cualquier sqlpluspodemos activar el modo spool que nos irá guardando en el fichero que le especifiquemos la salida del script.

ejemplo:
 
SET serveroutput ON size 1000000
spool salida.txt
BEGIN
fnd_global.apps_initialize (user_id => 3018
,resp_id => 52630
,resp_appl_id => 551);
 
xx_custom_pkg.procedure_with_output;
END;
/
spool off
EXIT