17.00 - トリガーのコピーについて - Teradata Data Mover

Teradata® Data Mover ユーザー ガイド

Product
Teradata Data Mover
Release Number
17.00
Published
2021年11月
Content Type
ユーザー ガイド
Publication ID
B035-4101-030K-JPN
Language
日本語 (日本)

トリガーをソース データベースからターゲット データベースにコピーする場合は、トリガーを定義するときに、次のコード例のように、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"を指定すると、ターゲット上でトリガーを無効にします。

"YES"パラメータを有効にするには、この値をaction_timeにする必要があります。値が"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テーブルがこのデータベース内に存在しない場合は、エラーが発生します。

TeradataとHadoopシステム間でトリガーをコピーすることはできません。