2009-05-29 11 views
5

Tengo una base de datos en vivo que me ha borrado algunos datos y necesito esa información. Tengo una copia muy reciente de esa base de datos que ya se ha restaurado en otra máquina. Se han realizado cambios no relacionados en la base de datos en vivo desde la copia de seguridad, por lo que no quiero borrar la base de datos en vivo con una restauración completa.¿Cómo rescato una pequeña porción de datos de una copia de seguridad de base de datos de SQL Server?

Los datos que necesito son pequeños, solo una docena de filas, pero esas doce filas tienen un par de filas de otras tablas con claves externas, y esas filas de parejas saben cuántas filas con claves externas apuntan hacia ellas , por lo que sería complicado restaurarlo a mano.

Idealmente podría decirle a la copia de seguridad de la base de datos que seleccione las doce filas que necesito, y el cierre transitivo de todo aquello de lo que dependa, y todo lo que dependa de ellos, y exportar solo esa información, que luego puedo importar a la base de datos en vivo sin tocar nada más.

¿Cuál es el mejor enfoque para tomar aquí? Gracias.

Todos han mencionado sp_generate_inserts. Al utilizar esto, ¿cómo evitar que las columnas de Identidad estropeen todo? ¿Simplemente enciende IDENTITY INSERT?

+0

+1, buena suerte! –

Respuesta

1

Me encontré con situaciones similares antes, pero descubrí que hacerlo a mano funcionaba mejor para mí.

Restauré la copia de seguridad a un segundo servidor e hice mi consulta para obtener la información que necesitaba, luego construí una secuencia de comandos para insertar los datos sp_generate_inserts y luego repetí para cada una de mis tablas que tenían filas relacionales.

En total solo tenía alrededor de 10 registros maestros con datos relacionales en otras 2 tablas. Solo me tomó alrededor de una hora recuperar todo como estaba.

ACTUALIZACIÓN Para responder a su pregunta sobre sp_generate_inserts, siempre y cuando se especifique @ propietario = 'dbo', fijará la inserción de identidad en ON y luego configurarlo para que al final de la secuencia de comandos para usted.

+0

Tuve éxito. sp_generate_inserts es útil, pero falla (como dice que sucederá) en tablas con muchas columnas y tablas con columnas nvarchar. Y, está limitado a 128 caracteres para su cláusula WHERE. Como resultado, casi tuve que hacer al menos una cosa manualmente para cada mesa. –

1

tendrá que restaurar a mano. El sp_generate_inserts es bueno para nuevos datos. pero para actualizar los datos lo hago de esta manera:

SELECT 'Update YourTable ' 
    +'SET Column1='+COALESCE(''''+CONVERT(varchar,Column1Name)+'''','NULL') 
    +', Column2='+COALESCE(''''+CONVERT(varchar,Column2Name)+'''','NULL') 
    +' WHERE Key='+COALESCE(''''+CONVERT(varchar,KeyColumn)+'''','NULL') FROM backupserver.databasename.owner.YourTable 

podría crear inserciones de esta manera también, pero sp_generate_inserts es mejor. Mire esos valores de identidad y buena suerte (he tenido este problema antes y sé dónde se encuentra en este momento).

consultas útiles:

--find out if there are missing rows, and which ones 
SELECT 
    b.key,c.key 
    from backupserver.databasename.owner.YourTable b 
     LEFT OUTER JOIN YourTable     c ON b.key=c.key 
    WHERE c.Key is NULL 

--find differences 
SELECT 
    b.key,c.key 
    from YourTable            c 
     LEFT OUTER JOIN backupserver.databasename.owner.YourTable b ON c.key=b.key 
    WHERE b.Key is not null 
     AND ( ISNULL(c.column1,-9999)  != ISNULL(b.column1,-9999) 
      OR ISNULL(c.column2,'~')  != ISNULL(b.column2,'~') 
      OR ISNULL(c.column2,GETDATE()) != ISNULL(b.column2,GETDATE()) 
      ) 
0

SQL Server Management Studio para SQL Server 2008 le permite exportar datos de la tabla como instrucciones de inserción. Ver http://www.kodyaz.com/articles/sql-server-script-data-with-generate-script-wizard.aspx. Este enfoque carece de la flexibilidad de sp_generate_inserts (no se puede especificar una cláusula WHERE para filtrar las filas en su tabla, por ejemplo) pero puede ser más confiable ya que es parte del producto.

Cuestiones relacionadas