En una base de datos federada de DB2 (basada en servidores remotos y apodos), necesito limpiar el modelo y volver a crearlo desde otra base de datos. Necesito eliminar todos los objetos de la base de datos, excepto esos servidores y apodos.¿Existe una manera eficiente de eliminar cada vista/función/tabla/sp de una base de datos?
Sé cómo recuperar la lista de objetos del esquema SYSCAT. Ahora necesito ejecutar las declaraciones DROP en cada una. Obviamente, las dependencias se interpondrán en el camino.
El enfoque de la fuerza bruta sería ejecutar las DROP en un ciclo hasta que todas hayan tenido éxito, pero dependiendo del orden (afortunado o no), podría llevar mucho tiempo.
¿Conoces una manera de ordenar eficientemente la declaración DROP para que el tiempo total para la eliminación sea el más corto posible?
No se espera una solución perfecta. Una solución razonablemente inteligente es lo suficientemente buena.
Gracias
Gracias, pero el problema es que tengo que abandonar no sólo las tablas, pero vistas, funciones y procedimientos, así –
Entonces me retire primero los puntos de vista, a continuación, procedimientos, entonces las tablas. Sin embargo, no tengo idea de cómo contar las referencias de las vistas (Internet dice 'SYSCAT.TABDEP' - http://publib.boulder.ibm.com/infocenter/db2luw/v9/index.jsp?topic=/com.ibm .db2.udb.admin.doc/doc/r0011297.htm) o procedimientos ('syscat.routines' debe listar los procedimientos y' sourceschema' debe señalar la tabla a la que pertenece?). Si en DB2 los procedimientos se analizan cuando se activan, debe poder eliminar todas las funciones una por una, incluso si se referencian entre sí. – Sorrow
Mientras tanto, he llegado a una (casi) solución de trabajo. Para ser justos y porque proporcionó información valiosa, disfrute de la recompensa. Gracias;) –