[謹賀新年] 世界中に配置した Oracle Active Data Guard から新年のご挨拶


**謹賀新年**
世界各国の言葉で新年のご挨拶をお届けします！

Oracle Active Data Guard 19c では、スタンバイ・データベースで DML（INSERT/UPDATE/DELETE）が実行可能となり、真の Active Data Guard が実現しました。
これにより、世界各国に配置されたデータベースに現地の言葉を INSERT し、そのデータを 各Database で SELECT して表示することが可能です。

今回は、各国の言葉で新年の挨拶を入力し、世界中の Oracle データベースを通じて皆さまにお届けします。

# ■ 構成
![構成.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/147154ee-9cff-eb9d-d0fb-15352a304f08.jpeg)
Active Data Guard で構成された各 Databaseへ、日本語、英語、ドイツ語、フランス語、アラビア語、ヒンディー語、タイ語、韓国語、ヘブライ語など、各地域の言語でデータを INSERT し、SELECT を通じて新年のご挨拶をお届けします（図示の通り）。

**・ 各国語の新年のご挨拶**
　- 日本語: あけまして　おめでとうございます 
　- 英語:  Happy New Year
　- ヘブライ語:  שנה טובה
　- ドイツ語:  Ein gutes neues Jahr
　- フランス語:  Bonne année 
　- ヒンドゥ語: नया साल मुबारक हो
　- 韓国語:  새해 복 많이 받으세요
　- 中国語:  新年快乐
　- タイ語:  สวัสดีปีใหม่ ค่ะ

# ■ Oracle Active Data Guard のREDO転送制御
Oracle Data Guard Broker は、Oracle Data Guard構成の作成、メンテナンスおよび監視を自動化および集中化する分散管理フレームワークです。
RedoRoutes プロパティを使用してREDO転送を制御することができ、Standby Databaseが複数ある場合、次のように様々なREDO転送ルートを構成することができます。

![構成.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109087/0f24de5b-4f23-736c-8950-ea707c20117e.jpeg)

https://qiita.com/shirok/items/67ab65e8c5db2c355e82

今回、各国でINSERTした現地の言葉が世界中を巡るようカスケード転送で複数の Database を直列に輪っかになるリング・トポロジー構成で地球一周するようREDO転送させます。

# ■ Oracle Active Data Guard 各国構成
前回構成した環境をします。
東京リージョンは TOKYO と SHIBUYA を Loacal Data Guard として作成し、TOKYOを始点、SHIBUYAを終点となるように構成して、TOKYO → PHOENIX → ASHBURN → FRANKFURT → MUMBAI → SEOUL → OSAKA → SHIBUYA(Tokyo Region) へ世界一周するよう直列に REDO転送するように Data Guardを構成します。

https://qiita.com/shirok/items/52ee2e3d3faa79a75df5



# ■ Active Data Guard の DML操作有効化
各Database毎にセッション単位、永続単位で個別設定できます。
## ● セッション単位 
現在のセッションの DML 操作の自動リダイレクトを構成するには、次のコマンドを使用します。
```
SQL> ALTER SESSION ENABLE ADG_REDIRECT_DML;
```

## ● 永続単位
Active Data Guard環境ですべてのスタンバイ・セッションのDML操作の自動リダイレクトを構成するには、ADG_REDIRECT_DML初期化パラメータを TRUE に設定します。
```
SQL> ALTER SYSTEM SET ADG_REDIRECT_DML=true SCOPE=BOTH;
```


# ■ WORLD Table 作成
各国からの言葉をINSERTするためのテーブルを作成します。
```
CREATE TABLE WORLD
  (
  VAL VARCHAR2(50),
  REGION VARCHAR2(20)
  ) 
;
```

# ■ 新年の挨拶 INSERT
各リージョンの言語で SQL接続して、新年のご挨拶を INSERTします。

　・各国語の[「あけましておめでとう」](https://joho.st/hitokoto/happynewyear/amp_index.php)はこちらを参照

 https://joho.st/hitokoto/happynewyear/amp_index.php
 
## ● Tokyo Region (Primary)
```
[oracle@db-tokyo1 ~]$ export NLS_LANG=Japanese_Japan.AL32UTF8
[oracle@db-tokyo1 ~]$ sqlplus WORLD/<Password>@TOKYO 

	SQL*Plus: Release 19.0.0.0.0 - Production on 月 1月 2 13:04:34 2023
	Version 19.17.0.0.0

	Copyright (c) 1982, 2022, Oracle.  All rights reserved.

	Oracle Database 19c EE Extreme Perf Release 19.0.0.0.0 - Production
	Version 19.17.0.0.0
	に接続されました。

WORLD@TOKYO SQL> INSERT INTO world (val,region) SELECT 'あけまして　おめでとうございます', DB_UNIQUE_NAME from v$database;

	1行が作成されました。
```


## ● Phoenix Region (Standby)
新年のご挨拶は、英語の 'Happy New Year' を INSERT します。
```
[oracle@db-phoenix1 ~]$ export NLS_LANG=American_America.AL32UTF8
[oracle@db-phoenix1 ~]$ sqlplus world/<Password>@PHOENIX 

	SQL*Plus: Release 19.0.0.0.0 - Production on Mon Jan 2 13:07:06 2023
	Version 19.17.0.0.0

	Copyright (c) 1982, 2022, Oracle.  All rights reserved.

	Connected to:
	Oracle Database 19c EE Extreme Perf Release 19.0.0.0.0 - Production
	Version 19.17.0.0.0


WORLD@PHOENIX SQL> ALTER SESSION ENABLE ADG_REDIRECT_DML;

	Session altered.


WORLD@PHOENIX SQL> INSERT INTO world (val,region) SELECT 'Happy New Year', DB_UNIQUE_NAME from v$database;

	1 row created.

WORLD@PHOENIX SQL> commit;

	Commit complete.
```


## ● Ashburn Region (Standby)
PHOENIX Regionでは、英語で挨拶しましたので、ヘブライ語の 'שנה טובה' で新年のご挨拶をしてみてみます。
```
[oracle@db-ashburn1 ~]$ export NLS_LANG=American_America.AL32UTF8
[oracle@db-ashburn1 ~]$ sqlplus world/<Password>@ASHBURN 

	SQL*Plus: Release 19.0.0.0.0 - Production on Mon Jan 2 13:11:04 2023
	Version 19.17.0.0.0

	Copyright (c) 1982, 2022, Oracle.  All rights reserved.

	Connected to:
	Oracle Database 19c EE Extreme Perf Release 19.0.0.0.0 - Production
	Version 19.17.0.0.0

WORLD@ASHBURN SQL> ALTER SESSION ENABLE ADG_REDIRECT_DML;

	Session altered.


WORLD@ASHBURN SQL> INSERT INTO world (val,region) SELECT 'שנה טובה', DB_UNIQUE_NAME from v$database; 

	1 row created.


WORLD@ASHBURN SQL> commit;

	Commit complete.
```

## ● Frankfurt Region (Standby)
新年のご挨拶は、ドイツ語の 'Ein gutes neues Jahr' を INSERT します。
```
[oracle@db-frankfurt1 ~]$ export NLS_LANG=German_Germany.AL32UTF8
[oracle@db-frankfurt1 ~]$ sqlplus WORLD/<Password>@FRANKFURT

	SQL*Plus: Release 19.0.0.0.0 - Production on Mo Jan 2 13:21:13 2023
	Version 19.17.0.0.0

	Copyright (c) 1982, 2022, Oracle.  All rights reserved.

	Verbunden mit:
	Oracle Database 19c EE Extreme Perf Release 19.0.0.0.0 - Production
	Version 19.17.0.0.0

WORLD@FRANKFURT SQL> ALTER SESSION ENABLE ADG_REDIRECT_DML;

	Session wurde geändert.

WORLD@FRANKFURT SQL> INSERT INTO world (val,region) SELECT 'Ein gutes neues Jahr', DB_UNIQUE_NAME from v$database;

	1 Zeile wurde erstellt.


WORLD@FRANKFURT SQL> commit;

	Transaktion mit COMMIT abgeschlossen.
```

## ● Mumbai Region (Standby)
新年のご挨拶は、ヒンドゥ語の 'नया साल मुबारक हो' を INSERT します。
```
[oracle@db-mumbai1 ~]$ export NLS_LANG=Hindi_India.AL32UTF8
[oracle@db-mumbai1 ~]$ sqlplus WORLD/<Password>@MUMBAI

	SQL*Plus: Release 19.0.0.0.0 - Production on सोम जनवरी 2 13:29:48 2023
	Version 19.17.0.0.0

	Copyright (c) 1982, 2022, Oracle.  All rights reserved.

	Connected to:
	Oracle Database 19c EE Extreme Perf Release 19.0.0.0.0 - Production
	Version 19.17.0.0.0


WORLD@MUMBAI SQL> ALTER SESSION ENABLE ADG_REDIRECT_DML;

	Session altered.


WORLD@MUMBAI SQL> INSERT INTO world (val,region) SELECT 'नया साल मुबारक हो', DB_UNIQUE_NAME from v$database;

	1 row created.

WORLD@MUMBAI SQL> commit;

	Commit complete.
```


## ● Seoul Region (Standby)
新年のご挨拶は、韓国語の '새해 복 많이 받으세요' を INSERT します。
```
[oracle@db-seoul1 ~]$ export NLS_LANG=Korean_Korea.AL32UTF8
[oracle@db-seoul1 ~]$ sqlplus world/<Password>@SEOUL 

	SQL*Plus: Release 19.0.0.0.0 - Production on 월 1월 2 13:40:57 2023
	Version 19.17.0.0.0

	Copyright (c) 1982, 2022, Oracle.  All rights reserved.

	다음에 접속됨:
	Oracle Database 19c EE Extreme Perf Release 19.0.0.0.0 - Production
	Version 19.17.0.0.0


WORLD@SEOUL SQL> ALTER SESSION ENABLE ADG_REDIRECT_DML;

	세션이 변경되었습니다.


WORLD@SEOUL SQL> INSERT INTO world (val,region) SELECT '새해 복 많이 받으세요', DB_UNIQUE_NAME from v$database;

	1 개의 행이 만들어졌습니다.

WORLD@SEOUL SQL> commit;

	커밋이 완료되었습니다.
```



## ● Osaka Region (Standby)
TOKYO Regionでは、日本語で挨拶しましたので、中国語の '新年快乐' で新年のご挨拶をしてみてみます。
```
[oracle@db-osaka1 ~]$ export NLS_LANG='SIMPLIFIED Chinese_China.AL32UTF8'
[oracle@db-osaka1 ~]$ sqlplus WORLD/<Password>@OSAKA

	SQL*Plus: Release 19.0.0.0.0 - Production on 星期一 1月 2 13:52:18 2023
	Version 19.17.0.0.0

	Copyright (c) 1982, 2022, Oracle.  All rights reserved.

	连接到:
	Oracle Database 19c EE Extreme Perf Release 19.0.0.0.0 - Production
	Version 19.17.0.0.0


WORLD@OSAKA SQL> ALTER SESSION ENABLE ADG_REDIRECT_DML;

	会话已更改。

WORLD@OSAKA SQL> INSERT INTO world (val,region) SELECT '新年快乐', DB_UNIQUE_NAME from v$database;

	已创建 1 行。

WORLD@OSAKA SQL> commit;

	提交完成。
```

## ● Shibuya Region (Standby)
TOKYO Regionでは、日本語で挨拶しましたので、タイ語の 'สวัสดีปีใหม่ ค่ะ' で新年のご挨拶をしてみてみます。
```
[oracle@db-shibuya1 ~]$ export NLS_LANG='Thai_Thailand.AL32UTF8'
[oracle@db-shibuya1 ~]$ sqlplus world/<Password>@SHIBUYA

	SQL*Plus: Release 19.0.0.0.0 - Production on จ. ม.ค. 2 13:59:51 2023
	Version 19.17.0.0.0

	Copyright (c) 1982, 2022, Oracle.  All rights reserved.

	เชื่อมต่อกับ:
	Oracle Database 19c EE Extreme Perf Release 19.0.0.0.0 - Production
	Version 19.17.0.0.0


WORLD@SHIBUYA SQL> ALTER SESSION ENABLE ADG_REDIRECT_DML;

	แก้ไขเซสชันแล้ว


WORLD@SHIBUYA SQL> INSERT INTO world (val,region) SELECT 'สวัสดีปีใหม่ ค่ะ', DB_UNIQUE_NAME from v$database;

	สร้างแถวแล้ว 1 แถว


WORLD@SHIBUYA SQL> commit;

	การคอมมิตเสร็จสมบูรณ์
```



# ■ 各国からの INSERT した新年のご挨拶を確認
Standby DatabaseでもDML操作が有効化され、各リージョン言語の言葉で新年の挨拶が届いていることを確認できます。
```
WORLD@TOKYO SQL> select * from WORLD;

	VAL						     REGION
	---------------------------- ---------------------- 
	あけまして　おめでとうございます 　CDB_TOKYO
	Happy New Year               CDB_PHOENIX
	שנה טובה                     CDB_ASHBURN
	Ein gutes neues Jahr	     CDB_FRANKFURT
	नया साल मुबारक हो               CDB_MUMBAI
	새해 복 많이 받으세요             CDB_SEOUL
	新年快乐                      CDB_OSAKA
	สวัสดีปีใหม่ ค่ะ                  CDB_SHIBUYA
```



# ■ 謹賀新年
**新しい年が平和でありますように**
**新しい年が愛であふれますように**
**Happy New Year!**


# ■ 参考
　・ [Active Data Guard](https://www.oracle.com/jp/database/data-guard/)
　・ [Oracle Active Data Guardでのリアルタイム問い合わせとDMLオフロード](https://www.oracle.com/jp/data-guard-adg-demo-5305796.gif)
　・ [Active Data Guardスタンバイ・データベースでのDML操作の実行 ](https://docs.oracle.com/cd/F19136_01/sbydb/managing-oracle-data-guard-physical-standby-databases.html#GUID-8AAD002C-ED06-4349-8BB5-EC8DB30B2628)
　・ [ADG_REDIRECT_DML](https://docs.oracle.com/cd/F19136_01/refrn/ADG_REDIRECT_DML.html)
　・ [Enabling DML Redirection ](https://docs.oracle.com/en/database/oracle/oracle-database/23/odbtc/enabling-dml-redirection.html)
　・ [NLS_LANGについて: Setting Up a Globalization Support Environment](https://docs.oracle.com/en/database/oracle/oracle-database/18/nlspg/setting-up-globalization-support-environment.html#GUID-D5C74C82-8622-46F4-8760-0F8ABA28A816)
　・ [グローバリゼーション・コード](https://docs.oracle.com/cd/F55418_01/htmdb/understanding-supported-globalization-codes.html#GUID-D812EB84-BBC1-45FB-A8AC-1458206EC193)