关于复制触发器 - Teradata Data Mover

Teradata® Data Mover 用户指南

Product
Teradata Data Mover
Release Number
17.20
Published
2022 年 9 月
Language
中文 (简体)
Last Update
2022-10-12
dita:mapPath
zh-CN/tsn1650877444606.ditamap
dita:ditavalPath
zh-CN/mpm1591127278842.ditaval
dita:id
B035-4101
Product Category
Analytical Ecosystem

要将触发器从源数据库复制到目标数据库,请在定义触发器时指定 trigger 标记的 selection="included" 属性,如以下代码示例所示。

<triggers>
  <trigger selection= "included">
	<database>west1000</database>
	<subject_table_database>west1000</subject_table_database>
	<table>employee</table>
	<name>RaiseTrig</name>
	<action_time enabled="NO">BEFORE</action_time> 
  </trigger>
</triggers>
触发器元素的参数
参数
selection
  • 指定 "included" 将复制触发器。
  • 指定 "unselected" 将不复制触发器。
database 触发器所在的数据库的名称。
subject_table_database 与触发器关联的表所在的数据库的名称。
table 与触发器关联的表的名称。
name 触发器的名称。
action_time
  • 指定 "BEFORE" 将在加载目标表之前在表上放置触发器。这样的话,从源系统复制的每一行都有一个触发器操作。
  • 指定 "AFTER" 将在加载目标表之后在表上放置触发器。这样的话,所复制的行将没有触发器操作。
enabled
  • 指定 "YES" 将在目标系统中启用触发器。
  • 指定 "NO" 将在目标系统中禁用触发器。

要启用 action_time 参数,该值必须为 "YES"。如果该值为 "NO"action_time 参数将无效。

要确认目标系统中是启用还是禁用了某个触发器,可使用 dbc.TriggersX 中的 SELECT 查询,并查看 EnabledFlag 列。

规则和限制

  • 复制触发器而不复制与其关联的表将导致错误。
  • 如果要复制的对象在目标数据库中不存在,则会在目标数据库中创建该对象。如果对象在目标数据库中存在,则除非 overwrite_existing_objects 属性被设置为 false,否则将覆盖该对象。这种情况下,将生成创建时错误。
  • 复制表时,如果目标系统中已经存在该表并具有关联的触发器,将覆盖目标表,并在新复制的表上替换触发器。
  • 尝试重命名复制的触发器所关联或引用的表或重新指定该表的位置会导致错误。
  • 如果触发器定义中的触发器名称不是完全限定名称,将在与源触发器数据库同名的数据库中创建该触发器。
  • 如果触发器定义中的表名称不是完全限定名称,这些表必须位于与源触发器数据库同名的数据库中,以避免出错。

示例

以下示例会在源计算机上创建一个触发器,但未在定义中包含完全限定的对象名称:
CREATE TRIGGER RaiseTrig
 AFTER INSERT ON Employee
 FOR EACH ROW
 ( INSERT INTO SalaryLog VALUES ('Hello','Hi',23, 43); );
在此示例中,将触发器复制到目标系统时,会在与源触发器数据库同名的数据库中创建该触发器。如果该数据库不包含 Employee 和 SalaryLog 表,则会出错。