Sidebar

Cuando creamos objetos temporales (#objeto_temporal), estos son creados en la base de datos tempdb y no pueden ser eliminados directamente ni por el sa_role y mucho menos consultados.

Si llegara a presentarse que la base de datos tempdb se esta llenando la única forma de liberar espacio en ella es matando a la sesión que genero el objeto.

Existe una manera de identificar el usuario que lo genero al igual que poder acceder a la información.

Las tablas temporales son generadas con un nombre diferente en tempdb. Por ejemplo si creamos una tabla temporal #mytable el tempdb se guardaría con el nombre  #mytable_____00000690010214619 . Los caracteres que son insertados después del nombre contienen información útil.

Se describen a continuación.

-caracteres del 14-15 indican el nivel de iteración en que la tabla fue creada.

-caracteres del 16-20  indican el "spid" que lo genero

-caracteres del  21-30 no son útiles.

# m y t a b l e _ _ _ _ _ 0 0 0 0 0 6 9 0 0 1 0 2 1 4 6 1 9
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

En este ejemplo se identificarían de la siguiente manera.

Nombre de la tabla. mytable

Spid que lo genero 69

Matando a la sesión 69 podríamos liberar el espacio.

Ahora si lo que quisiéramos sería acceder a esa información haríamos los siguiente.


1.Hacer un respaldo de la base de datos tempdb

2.Cargar el respaldo de tempdb en otra base de datos

3.Actualizar el nombre de la tabla.
 

update newdb..sysobjects
set name = "mytable2"
where name =  "#mytable_____00000090019545666"

4. Seleccionar la tabla

 select * from newdb..mytable2

 El artículo original se encuentra en http://www.sypron.nl/temptab.html


Tips BD