DDL

Válido para

Extraer y Replicat

Nota: La replicación de DDL solo está soportada entre las bases de datos Oracle a Oracle y entre las bases de datos MySQL a MySQL.

Descripción

Utilice el parámetro DDL para:

Cuando se utiliza sin opciones, el parámetro DDL no realiza ningún filtrado y provoca que todas las operaciones DDL se propaguen de la siguiente forma:

Cuando se utiliza con opciones, el parámetro DDL actúa como agente de filtrado para incluir o excluir operaciones DDL en función de:

Solo se puede utilizar un parámetro DDL en un archivo de parámetros, pero puede combinar varias opciones de inclusión y exclusión para filtrar DDL al nivel necesario.

Nota: No utilice el parámetro DDL para un pump de datos de Extract. Estos tipos de proceso no permiten la asignación o conversión de DDL y propagarán los registros DDL automáticamente en modo de transferencia. Replicat aplicará el valor DDL que se realiza en una tabla de origen (por ejemplo, ALTER TABLE TableA...) con el mismo nombre de tabla (ALTER TABLE TableA). No se puede asignar como ALTER TABLE TableB.

Para obtener información adicional sobre cómo utilizar el soporte DDL de Oracle GoldenGate, consulte Oracle: DDL Replication y MySQL: DDL Replication en la documentación de microservicios de Oracle GoldenGate.

Sintaxis

DDL [
{AUTOSCHEMA}
{INCLUDE | EXCLUDE}
  [, ALLOWEMPTYOBJECT]
  [, ALLOWEMPTYOWNER]
  [, MAPPED | UNMAPPED | OTHER | ALL]
  [, OPTYPE <type>]
  [, OBJTYPE '<type>']
  [, OBJNAME <name>]
  [, INSTR '<string>']
  [, INSTRWORDS '<word_list>']
  [, INSTRCOMMENTS '<comment_string>']
  [, INSTRCOMMENTSWORDS '<word_list>']
  [, SOURCECATALOG <catalog> | ALLCATALOGS]
  [, STAYMETADATA]
  [, EVENTACTIONS (<action>)]
]
[...]

AUTOSCHEMA

Válido para Replicat en MySQL con Oracle, Oracle con MySQL y de MySQL con MySQL con replicación de datos.

La opción de parámetro DDL AUTOSCHEMA se utiliza para activar la funcionalidad de evolución automática del esquema. Por defecto, esta opción se encuentra desactivada.

Sintaxis

DDL AUTOSCHEMA

Solo las operaciones DDL MAPPED son relevantes para la evolución automática del esquema. Por lo tanto, los nombres de objeto especificados como parte de la cláusula OBJNAME en los criterios de inclusión/exclusión deben corresponderse con los nombres de tabla de destino (y no con los nombres de tabla de origen).

Al utilizar OBJNAME con MAPPED en un archivo de parámetros de Replicat, el valor para OBJNAME debe hacer referencia al nombre especificado con la cláusula TARGET de la sentencia MAP.

Para obtener más información, consulte Uso de la evolución automática de esquemas

INCLUDE | EXCLUDE

DDL Opciones de filtrado

Las siguientes opciones de sintaxis permiten filtrar y operar en DDL que replica Oracle GoldenGate. Estas opciones se aplican a las cláusulas INCLUDE y EXCLUDE del parámetro DDL y otros parámetros que soportan la replicación DDL.

Utilice INCLUDE o EXCLUDE para identificar el comienzo de una cláusula de inclusión o exclusión.

La cláusula de inclusión o exclusión debe constar de la palabra clave INCLUDE o EXCLUDE seguida de cualquier combinación válida de las otras opciones de filtrado del parámetro DDL.

Si utiliza EXCLUDE, debe crear una cláusula INCLUDE correspondiente. Por ejemplo, lo siguiente no es válido:

DDL EXCLUDE OBJNAME "hr".*

Sin embargo, puede utilizar alguno de los siguientes métodos:

DDL INCLUDE ALL, EXCLUDE OBJNAME "hr"."*"
DDL INCLUDE OBJNAME fin.* EXCLUDE OBJNAME "fin.ss"

Un EXCLUDE tiene prioridad sobre cualquier INCLUDEs que contenga los mismos criterios. Puede usar varias cláusulas de inclusión y exclusión.

No incluya ningún objeto DDL instalado de Oracle GoldenGate en un parámetro DDL, en un parámetro TABLE o en un parámetro MAP, ni en un parámetro TABLEEXCLUDE o MAPEXCLUDE. Asegúrese de que las especificaciones de comodín en esos parámetros no incluyen objetos DDL instalados por Oracle GoldenGate. Estos objetos no deben formar parte de la configuración de Oracle GoldenGate, pero el proceso Extract debe tener en cuenta las operaciones en ellos y es por eso que no debe excluirlos explícitamente de la configuración con una sentencia de parámetro EXCLUDE, TABLEEXCLUDE o MAPEXCLUDE.

ALLOWEMPTYOBJECT

Utilice ALLOWEMPTYOBJECT para permitir que una especificación OBJNAME procese DDL que no contiene ningún nombre de objeto. Por ejemplo:

DDL INCLUDE OBJNAME sch.* ALLOWEMPTYOBJECT

ALLOWEMPTYOWNER

Utilice ALLOWEMPTYOWNER para permitir que una especificación OBJNAME procese DDL que no contiene ningún nombre de propietario. Por ejemplo:

DDL INCLUDE OBJNAME pdb.sch.* ALLOWEMPTYOWNER

EVENTACTIONS (action)

Hace que el proceso Extract o Replicat realice una acción definida basada en un registro DDL en el registro de transacciones o la pista, que se conoce como registro de eventos. El evento DDL se dispara si el registro DDL es elegible para ser escrito en la pista por Extract o un pump de datos, o para ser ejecutado por Replicat, según lo determinado por las otras opciones de filtrado del parámetro DDL. Puede utilizar este sistema para personalizar el procesamiento en función de los eventos de la base de datos.

Para <action>, consulte EVENTACTIONS en los parámetros MAP y TABLE.

Directrices para utilizar EVENTACTIONS en los registros DDL:

EVENTACTIONS no soporta los siguientes objetos DDL porque son objetos derivados:

MAPPED | UNMAPPED | OTHER | ALL

Utilice MAPPED, UNMAPPED, OTHER y ALL para aplicar INCLUDE o EXCLUDE según el ámbito de operación DDL.

DDL EXCLUDE ALL es una opción de procesamiento especial que mantiene los metadatos de objetos actualizados para Oracle GoldenGate, al tiempo que bloquea la replicación de las propias operaciones DDL. Puede utilizar DDL EXCLUDE ALL cuando utilice un método que no sea Oracle GoldenGate para aplicar DDL al destino, pero desea que Oracle GoldenGate replique los cambios de datos en los objetos de destino. Proporciona los metadatos actuales a Oracle GoldenGate a medida que cambian los objetos, evitando así la necesidad de parar e iniciar los procesos de Oracle GoldenGate. Las siguientes condiciones especiales se aplican a DDL EXCLUDE ALL:

OBJNAME name

Utilice OBJNAME para aplicar INCLUDE o EXCLUDE al nombre totalmente cualificado de un objeto. Para especificar correctamente los nombres de objetos de dos y tres partes y los comodines, consulte Uso de comodines en argumentos de comando.

Incluir nombres de objetos sensibles a mayúsculas/minúsculas entre comillas dobles.

Ejemplo no sensible a mayúsculas/minúsculas:

DDL INCLUDE OBJNAME accounts.*

Ejemplo sensible a mayúsculas/minúsculas:

DDL INCLUDE OBJNAME accounts."cust"

No utilice OBJNAME para el objeto USER de Oracle, porque OBJNAME espera <owner.object> o <container.owner.object>, mientras que USER solo tiene un esquema.

Al utilizar OBJNAME con MAPPED en un archivo de parámetros de Replicat, el valor para OBJNAME debe hacer referencia al nombre especificado con la cláusula TARGET de la sentencia MAP. Por ejemplo, con la siguiente sentencia MAP, el valor correcto es OBJNAME fin2.*.

MAP fin.exp_*, TARGET fin2.*;

En el siguiente ejemplo, una sentencia CREATE TABLE se ejecuta de la siguiente manera en <source>:

CREATE TABLE fin.exp_phone;

Esa misma sentencia se ejecuta de la siguiente manera en el destino:

CREATE TABLE fin2.exp_phone;

Si no se especifica un propietario de destino en la sentencia MAP, Replicat lo asigna al usuario de base de datos que se especifica con el parámetro USERIDALIAS.

Para DDL que crea objetos derivados, como un disparador, el valor de OBJNAME debe ser el nombre del objeto base, no el nombre del objeto derivado.

Por ejemplo, para incluir la siguiente sentencia DDL, el valor correcto es hr.accounts, no hr.insert_trig.

CREATE TRIGGER hr.insert_trig ON hr.accounts;

Para las operaciones RENAME, el valor de OBJNAME debe ser el nuevo nombre de tabla. Por ejemplo, para incluir la siguiente sentencia DDL, el valor correcto es hr.acct.

ALTER TABLE hr.accounts RENAME TO acct;

OBJTYPE <type>

Utilice OBJTYPE para aplicar INCLUDE o EXCLUDE a un tipo específico de objeto de base de datos. Para <type>, utilice cualquier tipo de objeto que sea válido para la base de datos, como TABLE, INDEX y TRIGGER. Para una vista materializada de Oracle y un log de vistas materializadas, los tipos correctos son snapshot y snapshot log, respectivamente. Incluya el nombre del tipo de objeto entre comillas simples. Por ejemplo:

DDL INCLUDE OBJTYPE 'INDEX'
DDL INCLUDE OBJTYPE 'SNAPSHOT'

Para el tipo de objeto de Oracle USER, no utilice la opción OBJNAME, porque OBJNAME espera owner.object o <container.owner.object>, mientras que USER solo tiene un esquema.

OPTYPE <type>

Utilice OPTYPE para aplicar INCLUDE o EXCLUDE a un tipo específico de operación DDL, como CREATE, ALTER y RENAME. Para <type>, utilice cualquier comando DDL que sea válido para la base de datos. Por ejemplo, para incluir operaciones ALTER, la sintaxis correcta es:

DDL INCLUDE OPTYPE ALTER

INSTR string

Utilice INSTR para aplicar INCLUDE o EXCLUDE a sentencias DDL que contengan una cadena de caracteres específica en la propia sintaxis del comando, pero no en los comentarios. Por ejemplo, a continuación se excluye DDL que crea un índice.

DDL INCLUDE ALL EXCLUDE INSTR 'CREATE INDEX'

Incluya la cadena entre comillas simples. La búsqueda de cadena no distingue entre mayúsculas y minúsculas.

INSTR no soporta comillas simples (' ') que estén dentro de la cadena ni soporta valores NULL.

INSTRCOMMENTS comment_string

(Válido para Oracle) Utilice INSTRCOMMENTS para aplicar INCLUDE o EXCLUDE a las sentencias DDL que contienen una cadena de caracteres específica en un comentario, pero no en el propio comando DDL. Mediante INSTRCOMMENTS, puede utilizar comentarios como agente de filtrado.

Por ejemplo, a continuación se excluyen las sentencias DDL que incluyen la cadena 'source only' en los comentarios.

DDL INCLUDE ALL EXCLUDE INSTRCOMMENTS 'SOURCE ONLY'

En este ejemplo, las sentencias DDL, como las siguientes, no se replican.

CREATE USER john IDENTIFIED BY john /<source only>/;

Incluya la cadena entre comillas simples. La búsqueda de cadena no distingue entre mayúsculas y minúsculas. Puede combinar INSTR y INSTRCOMMENTS para filtrar por una cadena en la sintaxis del comando y en los comentarios de la misma sentencia DDL.

INSTRCOMMENTS no soporta comillas simples (' ') que estén dentro de la cadena, ni soporta valores NULL.

INSTRWORDS word_list

Utilice INSTRWORDS para aplicar INCLUDE o EXCLUDE a las sentencias DDL que contienen las palabras especificadas.

Para <word_list>, proporcione las palabras en cualquier orden, entre comillas simples. Para incluir espacios, coloque el espacio (y la palabra, si corresponde) entre comillas dobles. Las comillas dobles también se pueden utilizar para delimitar oraciones.

Todas las palabras especificadas deben estar presentes en DDL para que INSTRWORDS surta efecto.

Ejemplo:

DDL INCLUDE OPTYPE ALTER OBJTEYP 'TABLE' INSTRWORDS 'ALTER CONSTRAINT " xyz"'

Este ejemplo coincide con las siguientes sentencias DDL:

ALTER TABLE ADD CONSTRAINT xyz CHECK
ALTER TABLE DROP CONSTRAINT xyz

INSTRWORDS no soporta comillas simples (' ') que estén dentro de la cadena, ni soporta valores NULL.

INSTRCOMMENTSWORDS word_list

(Válido para Oracle) Funciona de la misma forma que INSTRWORDS, pero solo se aplica a los comentarios dentro de una sentencia DDL, no a la sintaxis DDL en sí. Mediante INSTRCOMMENTS, puede utilizar comentarios como agente de filtrado.

INSTRCOMMENTSWORDS no soporta comillas simples (' ') que estén dentro de la cadena, ni soporta valores NULL.

Puede combinar INSTRWORDS y INSTRCOMMENTSWORDS para filtrar por una cadena en la sintaxis del comando y en los comentarios de la misma sentencia DDL.

SOURCECATALOG catalog | ALLCATALOGS

Utilice estas opciones para especificar cómo se resuelven los nombres de objetos no cualificados en una cláusula OBJNAME en el contenedor correcto. Utilice estas opciones cuando la base de datos origen sea una base de datos de contenedores de Oracle.

SOURCECATALOG especifica un contenedor por defecto para todos los nombres de objeto especificados en la misma cláusula INCLUDE o EXCLUDE. Para que se aplique, se debe especificar SOURCECATALOG antes de la especificación OBJNAME. Consulte "SOURCECATALOG" para obtener más información, incluido el uso de sentencias que contienen nombres de dos partes, donde los nombres de objetos de tres partes son necesarios para identificar completamente un objeto.

ALLCATALOGS especifica que todos los contenedores de la base de datos se deben tener en cuenta al resolver los nombres de objeto especificados en la misma cláusula INCLUDE o EXCLUDE. ALLCATALOGS se puede colocar antes o después de la especificación OBJNAME.

A continuación se muestra el orden de prioridad que se da cuando hay diferentes especificaciones de catálogo en un archivo de parámetros:

  1. ALLCATALOGS en una cláusula INCLUDE o EXCLUDE sustituye todas las especificaciones SOURCECATALOG en la cláusula INCLUDE o EXCLUDE y en la raíz del archivo de parámetros, y sustituye la especificación de contenedor de un nombre de objeto totalmente cualificado en la cláusula OBJNAME.

  2. Una especificación de catálogo explícita en la cláusula OBJNAME sustituye todas las instancias de SOURCECATALOG (pero no ALLCATALOGS).

  3. SOURCECATALOG en una cláusula INCLUDE o EXCLUDE sustituye el parámetro SOURCECATALOG global especificado en la raíz de la sentencia TABLE o MAP.

  4. El parámetro global SOURCECATALOG se aplica a cualquier nombre de objeto no cualificado en las cláusulas OBJNAME si la cláusula INCLUDE o EXCLUDE no especifica SOURCECATALOG o ALLCATALOGS.

  5. En ausencia de cualquiera de los parámetros anteriores, se tienen en cuenta todos los catálogos.

STAYMETADATA

(Válido para Oracle). Impide que los metadatos sean capturados por Extract o aplicados por Replicat.

Cuando Extract encuentra por primera vez DML en una tabla, recupera los metadatos de esa tabla. Cuando se encuentra DDL en esa tabla, los metadatos antiguos se invalidan. La siguiente DML de esa tabla coincide con los nuevos metadatos para que la estructura de la tabla de destino siempre esté actualizada con la del origen.

Sin embargo, si sabe que una operación DDL concreta no afectará a los metadatos de la tabla, puede utilizar STAYMETADATA para que los metadatos actuales no se recuperen ni se repliquen. Se trata de una mejora del rendimiento que ha beneficiado a operaciones como las importaciones y exportaciones, en las que a menudo se realizan DDL como truncados y la desactivación de restricciones. Estas operaciones no afectan a la estructura de la tabla, ya que está relacionada con la integridad de la replicación de datos posterior, por lo que se pueden ignorar en estos casos. Por ejemplo, ALTER TABLE ADD FOREIGN KEY no afecta a los metadatos de la tabla.

Un ejemplo de cómo se puede aplicar de forma selectiva es el siguiente:

DDL INCLUDE ALL INCLUDE STAYMETADATA OBJNAME xyz

En este ejemplo se indica que todo DDL se debe incluir para la replicación, pero solo DDL que funciona en el objeto xyz estará sujeto a STAYMETADATA.

STAYMETADATA también se puede utilizar de la misma forma en una cláusula EXCLUDE.

STAYMETADATA se debe utilizar de la misma forma en el origen y el destino para garantizar la integridad de los metadatos.

Cuando STAYMETADATA está en uso, se agrega un mensaje al archivo de informe. El informe DDL se controla mediante el parámetro DDLOPTIONS con la opción REPORT.

Esta misma funcionalidad se puede aplicar globalmente a todos los DDL que se producen en el origen mediante los scripts @ddl_staymetadata:

Esta opción se debe utilizar con la ayuda del personal de soporte técnico de Oracle GoldenGate, ya que puede que no siempre sea evidente qué DDL afecta a los metadatos de los objetos. Si se utiliza incorrectamente, puede comprometer la integridad del entorno de replicación.

Ejemplos

A continuación, se muestran algunos ejemplos de diferentes casos de uso:

Ejemplo 1: Uso de DDL AUTOSCHEMA

El filtrado (similar al que se muestra en el ejemplo 1) también se puede activar según los tipos de DDL mediante la cláusula DDL AUTOSCHEMA INCLUDE/EXCLUDE OPTYPE.

Por ejemplo, para activar AUTOSCHEMA para el esquema hr pero excluir el esquema finance, utilice el siguiente script:

 DDL AUTOSCHEMA &
 INCLUDE OBJNAME hr.* &
 EXCLUDE OBJNAME finance.*

 MAP hr.*, TARGET hr.*;
 MAP finance.*, TARGET finance.*;

Ejemplo 2: combinación de opciones de parámetros DDL

A continuación se muestra un ejemplo de cómo combinar las opciones del parámetro DDL.

DDL  &
INCLUDE UNMAPPED &
    OPTYPE alter &
    OBJTYPE 'table' &
    OBJNAME users.tab* &
INCLUDE MAPPED OBJNAME * &
EXCLUDE MAPPED OBJNAME temporary.tab

Los criterios de filtro combinados de esta sentencia especifican lo siguiente:

Ejemplo 3: inclusión de una acción de evento

El siguiente ejemplo especifica una acción de evento de REPORT para todos los registros DDL.

DDL INCLUDE ALL EVENTACTIONS (REPORT)

Ejemplo 4: Uso de una acción de evento en un subjuego de DDL

En el siguiente ejemplo se muestra cómo se puede utilizar EVENTACTIONS en un subjuego de DDL. Todo DDL se debe replicar, pero solo el DDL que se ejecuta en objetos con nombre explícito califica para disparar las acciones de evento de REPORT y LOG.

DDL INCLUDE ALL &
    INCLUDE OBJNAME sales.t* EVENTACTIONS (REPORT) &
    INCLUDE OBJNAME fin.my_tab EVENTACTIONS (LOG INFO)

Ejemplo 5: Diferentes formas de especificar nombres <catalog> para DDL que se emiten en objetos de una base de datos de contenedores de Oracle <source>

En el siguiente ejemplo se muestran las diferentes formas de especificar nombres de catálogo para DDL que se emiten en objetos de una base de datos de contenedor de Oracle de origen.

SOURCECATALOG pdb1
DDL INCLUDE OBJNAME sch1.obj1 INCLUDE SOURCECATALOG pdb2 OBJNAME sch2.obj2
DDL INCLUDE ALLCATALOGS OBJNAME sch.obj
DDL INCLUDE ALLCATALOGS OBJNAME pdb.sch.obj

Ejemplo 6: muestra el uso combinado de ALLOWEMPTYOBJECT y ALLOWEMPTYOWNER

A continuación, se muestra el uso combinado de ALLOWEMPTYOBJECT y ALLOWEMPTYOWNER.

DDL INCLUDE pdb.*.* ALLOWEMPTYOWNER ALLOWEMPTYOBJECT