ODIレポジトリDBのパスワード期限が切れて、ODIスタジオからの接続ができなくなった時の対処方法

本ブログは、[オラクル・クラウドの個人ブログ](https://qiita.com/letian/items/10152a4fec813c1b7d98)の1つです。

# 初めに
本記事は、以下の問題点を解決するため、対処方法を提供します。

- ODIレポジトリ用のスキーマの<strong>パスワード期限が切れ</strong>て（或いはパスワード変更後）、ODIスタジオからの接続ができなくなった。

__問題現象__
ODIスタジオから、レポジトリDBに接続しようとしますと、次のようなエラーが発生する可能性があります。
- <strong>期限切れ</strong>の場合のエラーメッセージ：`ORA-28001: the password has expired`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/a1b73458-9049-ee4a-33a3-1db445cc3cff.png)
エラーの詳細：
`
oracle.odi.core.config.MasterRepositoryResourceFailureException: ODI-10182: Uncategorized exception during repository access.	
Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: Unable to start the Universal Connection Pool: oracle.ucp.UniversalConnectionPoolException: Cannot get Connection from Datasource: java.sql.SQLException: ORA-28001: the password has expired
`

- DB<strong>パスワードが変更された</strong>けど、ODI側にまだ反映していない場合のエラーメッセージ：`ORA-01017: Invalid username/password`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/6de75d06-a33e-e001-cead-2ff8968661ad.png)

__検証環境__
ODIバージョン：ODI Studio 12.2.1.4.0 (on OCI Windows VM)
Oracle DBバージョン： Oracle Base Database 19c Standard Edition (on OCI)

__ステップ__

- [1. DB側でスキーマのパスワードをリセットする](#1-db側でスキーマのパスワードをリセットする)
- [2. ODIスタジオでパスワードを変更する](#2-odiスタジオでパスワードを変更する)
  - [2-1. マスター・レポジトリへの接続](#2-1-マスターレポジトリへの接続)
  - [2-2. ワーク・レポジトリへの接続](#2-2-ワークレポジトリへの接続)

# 1. DB側でスキーマのパスワードをリセットする
パスワード期限が切れた場合、このステップから実施してください。
リセット済（変更直後）の場合、次のステップから実施してください。

- 1-1.  DBサーバにログインし、"oracle"ユーザに切り替えます。
```bash
[opc@db19c ~]$ sudo su - oracle
```
- 1-2.  管理者ユーザで、sqlplusにログインします。
```bash
[oracle@db19c ~]$  sqlplus / as sysdba
```

- 1-3.  ODIレポジトリが所属するPDBに切り替えます。
```bash
SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 DB19C_PDB1                     READ WRITE NO
SQL> alter session set container=db19c_pdb1;

Session altered.
```

- 1-4.  レポジトリ・スキーマのパスワードをリセットします。
```bash
SQL> alter user DEV_ODI_REPO identified by <New_Password>;

User altered.
```

- 1-5.  パスワードの有効期限を確認します（オプション）。OCI上の「Oracle Base Database 19c SE」の場合、デフォルトでは<font color=blue>60日間</font>となります。
```bash
SQL> col USERNAME format a20
SQL> col PROFILE format a10
SQL> select USERNAME, PROFILE from DBA_USERS where USERNAME = 'DEV_ODI_REPO';

USERNAME             PROFILE
-------------------- ----------
DEV_ODI_REPO         DEFAULT

SQL> set linesize 100
SQL> col RESOURCE_NAME format a30
SQL> col RESOURCE_TYPE format a15
SQL> col LIMIT format a30
SQL> select PROFILE, RESOURCE_NAME, RESOURCE_TYPE, LIMIT
  2  from DBA_PROFILES
  3  where PROFILE = 'DEFAULT'
  4  and RESOURCE_TYPE = 'PASSWORD';

PROFILE    RESOURCE_NAME                  RESOURCE_TYPE   LIMIT
---------- ------------------------------ --------------- ------------------------------
DEFAULT    FAILED_LOGIN_ATTEMPTS          PASSWORD        3
DEFAULT    PASSWORD_LIFE_TIME             PASSWORD        60
DEFAULT    PASSWORD_REUSE_TIME            PASSWORD        365
DEFAULT    PASSWORD_REUSE_MAX             PASSWORD        5
DEFAULT    PASSWORD_VERIFY_FUNCTION       PASSWORD        ORA12C_STRONG_VERIFY_FUNCTION
DEFAULT    PASSWORD_LOCK_TIME             PASSWORD        1
DEFAULT    PASSWORD_GRACE_TIME            PASSWORD        7
DEFAULT    INACTIVE_ACCOUNT_TIME          PASSWORD        UNLIMITED
DEFAULT    PASSWORD_ROLLOVER_TIME         PASSWORD        0

9 rows selected.
```
- 1-6.  パスワードの有効期限を変更したいなら、以下のコマンドを実施してください。
※、`UNLIMITED`に指定すると、無期限に変更ですが、セキュリティの観点では非推奨です。
```sql
SQL> ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME 180;

Profile altered.
```

# 2. ODIスタジオでパスワードを変更する
## 2-1. マスター・レポジトリへの接続

ログイン画面で、<font color=blue>編集</font>ボタンをクリックし、接続情報を編集します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/027e7fb2-4f74-90a0-aeda-6d903cae7b80.png)
パスワードを新しいものと差し替えて、「<font color=blue>Master Repository Only</font>」を選択し、接続をテストします。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/23c1ab45-fd67-1809-0d3a-bebfe1176e5d.png", width="450">
接続成功になったら、OKをクリックし、画面を閉じます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/a08d6924-6056-6eae-6f31-f9298ad20a52.png", width="450">
ログイン画面で、OKをクリックし、マスター・レポジトリに接続します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/1e1f166b-e647-f044-5f67-d82f319728fc.png)
## 2-2. ワーク・レポジトリへの接続
Topology -> Repositories -> Work Repositories -> 「WORKREP」をダブルクリックします。次のインフォメーションが表示されたら、OKをクリックし続行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/a3e5a0d5-f56c-69b0-863a-01760c131f41.png)

「Connection Information」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/3c33fd4d-5c4b-9f02-97bb-d556e19e37f2.png)

パスワードを新しいものと差し替えて、「Test Connection」をクリックします。確認用メッセージが表示されたら、「Yes」をクリックし続行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/e91aeb98-4e98-c843-ca85-af480132ae00.png)

エージェントを指定し、接続をテストしてみて、接続成功を確認できればOKです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/ffa381e5-5365-38e2-58e8-5745ae29f4e6.png)

成功後、「Disconnect」をクリックし、マスター・レポジトリの接続を切断します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/921d5afe-acd2-11fd-c8e1-36e0c6670294.png)

もう一回、ログイン画面で<font color=blue>編集</font>ボタンをクリックし、接続情報を編集します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/027e7fb2-4f74-90a0-aeda-6d903cae7b80.png)

<font color=blue>ワーク・レポジトリ</font>を選択し、接続をテストします。接続成功後、OKをクリックし画面を閉じます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/599c56cc-1398-49e6-4634-33ec8158d198.png", width="450">

ログイン画面で、OKボタンをクリックし、ワーク・レポジトリへの接続を開始します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/02ce17b5-0190-de13-2da2-52ef77e215c9.png)

ワーク・レポジトリに接続できることを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/6df31b12-b2b2-893c-696d-d7dc829c7258.png)

接続後：
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/31f71522-0190-4796-4646-dd6d8065e175.png)

以上

__関連記事__
[オラクル・クラウドの個人ブログ一覧](https://qiita.com/liu-wei/items/10152a4fec813c1b7d98)
[ODI On-PとODI MarketplaceとOCI Data Integrationの比較](https://qiita.com/liu-wei/items/dc527ad423fbd2f1742d)
[OCI MarketplaceからODIインスタンスを作成する方法](https://qiita.com/liu-wei/items/9a0e92e2e0905976f3ae)
[Autonomous DBにODIレポジトリの作成方法](https://qiita.com/liu-wei/items/9c0c24e51c382c3a2fbf)
[ODI Marketplace版のエージェントを起動と停止する方法](https://qiita.com/liu-wei/items/681e445e14c594e3488a)
[OCI Data Integrationを使用しオブジェクト・ストレージからOracle DBにデータをロードする](https://qiita.com/liu-wei/items/3e6e768549763d3f77fa)