Necesito copia de seguridad de las tablas y sus datos como parte de las pruebas de software. La exacta tablas y los datos que contienen pueden variar, por lo que no puedo codificar el DDL o de los datos. La copia de seguridad de las tablas tienen nombres similares como el original de las tablas, pero con el prefijo «QA_». Similares, pero no idénticas (excepto para el prefijo), sólo porque a fin de evitar el 31 de límite de caracteres para los nombres de las tablas que tengo que abreviar algunos de los nombres.

Que sería la manera más rápida de hacer esto? El uso de un cursor de objeto y la función de bucle a través de las tablas para obtener su DDL como este:

select dbms_metadata.get_ddl(''TABLE'',' || '''' || cursor_rec.object_name || '''' || ') from dual

El uso que los DDL para crear la copia de seguridad de las tablas y, a continuación, rellenar las tablas con:

INSERT /*+ parallel(' || new_table_name || 'DEFAULT) */ INTO '  || new_table_name  || ' SELECT  * FROM '  || table_name  || ''

O hacer un simple:

CREATE TABLE' || new_table_name 'PARALLEL AS SELECT * from ' || table_name || ''

Que es el más rápido de los dos métodos?

  • Como no tenemos la base de datos, ni su hardware no lo sabemos. ¿Por qué no simplemente ejecutar las dos versiones en tu de la base de datos y el tiempo de la diferencia?
  • Yo estaba hablando en teoría el método que sería más rápido porque no puedo ejecutar estos datos y tablas que no existen todavía. Hay factores que puedo considerar de antemano en el pesaje de qué método utilizar?
  • siempre se puede crear algo de ficticio las mesas para probar esto. El uso de SQL*Plus autotrace característica le dirá cuál es la solución que hacer más trabajo.
InformationsquelleAutor phileas fogg | 2012-01-03

2 Comentarios

  1. 4

    Bien, tanto INSERT /*+ PARALLEL */ y CREATE TABLE .... PARALLEL AS SELECT ... se va a hacer la carga directa de inserción. Por lo tanto, son en gran medida va a utilizar el mismo código de ruta, para la carga de datos.

    CTA se necesita primero hacer el DDL para crear la tabla, antes de proceder con la carga. Pero, que es una pequeña cantidad de trabajo fijo. El más grande de la tabla de la copia, el menor factor que va a ser.

    Finalmente, sólo voy a mencionar, que usted debe buscar en NOLOGGING para mejorar aún más el rendimiento.

    De la CTA, usted sólo tiene que añadir el NOLOGGING palabra clave después de la PARALLEL palabra clave. Para el INSERT /*+ PARALLEL */, tendrás que hacer un ALTER TABLE ... NOLOGGING para activarlo.

    Tenga en cuenta que hay algunas cosas que usted necesita saber, si usted decide ir con NOLOGGING. En primer lugar, sólo de carga directa va a hacer nologging. Para las tablas, que significa CTA y de INSERCIÓN con el PARALELO o ANEXAR sugerencia.

    En segundo lugar, considere la posibilidad de la recuperación de las implicaciones de NOLOGGING. Cuando una tabla está cargado con NOLOGGING opción, los datos se NO registrado para REHACER. Así, usted no será capaz de recuperar los datos de la tabla, a menos que se utilice una copia de seguridad realizada después de los datos correctamente cargado y comprometido.

    Espero que ayude.

    • Usted no será capaz de recuperar los datos con una base de datos en espera tampoco.
    • Gracias, agradezco los consejos.
  2. 0

    Crear-tabla-como generalmente será más rápido porque no incluye muchas opciones, tales como «las claves primarias, claves únicas, claves externas, restricciones check, la partición de los criterios, los índices de columna y los valores predeterminados».

    DBMS_METADATA por defecto se incluyen la mayoría de los objetos, lo que puede aumentar significativamente el tiempo necesario para copiar los datos. (Aunque puede que desee aquellos objetos que existen para la selección, validación, etc.)

Dejar respuesta

Please enter your comment!
Please enter your name here