質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

Q&A

2回答

11582閲覧

Oracleにて、インスタンス作成時に設定した初期化パラメータが反映されない。

BAKEDECO

総合スコア12

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

0グッド

0クリップ

投稿2019/07/19 08:27

事象

DBCAでインスタンスを作成するときに、初期化パラメータの一つである
NLS_DATE_FORMATに「YYYY-MM-DD HH24:MI:SS」を設定し、作成完了後に
確認すると「DD-MON-RR」という値に変わってしまっている。

以下のSQLを実行して確認しました。

SQL

1/* NLS_DATE_FORMATがDD-MON-RRとなっている */ 2SELECT * FROM V$NLS_PARAMETERS; 3/* DD-MON-RRの形式で出力される */ 4SELECT SYSDATE FROM DUAL;

知りたいこと

  • なぜNLS_DATE_FORMATが書き換わるのか?
  • 書き換わってしまわないようにするにはどうすればよいか?
  • インスタンス作成後に、ALTER SYSTEMコマンドでNLS_DATE_FORMATをDD-MON-RRからYYYY-MM-DD  HH24:MI:SSに書き換えた場合、それは「インスタンス作成時にYYYY-MM-DD HH24:MI:SSを指定し た」と同等の意味になるか?

環境情報

□ バージョン
Oracle Database 12c
□ OS
Windows Server R2(日本語)

ご回答宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KOZ6.0

2019/07/19 08:57

確認に使用したツールは何でしょうか? クライアントのツールが置き換えてしまうことがあります。 DD-MON-RR ということは SQL Developer ですか?
BAKEDECO

2019/07/19 09:08 編集

システム管理者で当該インスタンスにログインしてSQLPlusで確認しました。SQLPlusでも書き換わったりしてしまうのでしょうか?
KOZ6.0

2019/07/19 09:40

NLS_DATE_FORMAT は NLS_TERRITORY によって決まります。 NLS_TERRITORY は NLS_LANG によって決まります。 なので NLS_LANG 環境変数をセットしていたりすると書き換わります。 もしくは、初期化パラメータが実際は意図したとおりに変わってないか、ですね。
BAKEDECO

2019/07/19 09:45

なるほど。 その辺りも一度確認してみます。 今はサーバーにアクセスできる環境におりませんので、確認出来次第また追記させていただきます。
guest

回答2

0

NLS_DATE_FORMAT の動作についてはドキュメントに記載されている通りです。
https://docs.oracle.com/cd/E57425_01/121/REFRN/GUID-FC23EEEE-AA9F-4B3C-8CBB-888C9C0CA27F.htm

この初期化パラメータNLS_DATE_FORMATの値は、このパラメータのセッション値の初期化に使用され、SQL問合せの処理で参照される実際の値です。クライアントがOracle JDBCドライバを使用しているか、クライアントがOCIベースでNLS_LANGのクライアント設定(環境変数)が定義されている場合、この初期値はクライアント側の値でオーバーライドされます。そのため、初期化パラメータ値は、通常、無視されます。

上記を踏まえて回答します。

なぜNLS_DATE_FORMATが書き換わるのか?

クライアントの設定によって上書きされるためです。KOZ6.0 さんが述べられている通りクライアントで設定している NLS_LANG から導出される NLS_TERRITORY によって上書きされます。サーバにログインして接続しているということですが、サーバにログインしても SQL*Plus 自体は Oracle クライアントソフトですので、サーバ OS のレジストリまたは環境変数に設定されている Oracle クライアントの設定を使用して上書きされています。

書き換わってしまわないようにするにはどうすればよいか?

使用するミドルウェアによって対応が異なります。Windows で OCI を使用しているのであれば、環境変数とレジストリに設定されている NLS_LANG を削除すれば初期化パラメータの設定が使用されるようになります。

ただし、これを実施する場合、接続する際のキャラクタセットを指定できないため、キャラクタセットを変更しなければならない場合には採用できません。また、NLS_LANG に依存する Oracle ツールがいくつかあるため、削除するのは現実的ではないと思います。

現実的な手段としては、NLS_DATE_FORMAT は環境変数としても設定可能ですので、各接続するクライアント側の環境変数に NLS_DATE_FORMAT を設定しておくぐらいですね。

CMD

1SET NLS_DATE_FORMAT=YYYY-MM-DD HH24:MI:SS

インスタンス作成後に、ALTER SYSTEMコマンドで...

同等の意味という認識で問題ありません。

投稿2019/07/20 05:15

編集2019/07/20 05:21
atata0319

総合スコア881

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

DBCAでインスタンスを作成するときに、初期化パラメータの一つである

NLS_DATE_FORMATに「YYYY-MM-DD HH24:MI:SS」を設定し、作成完了後に
確認すると「DD-MON-RR」という値に変わってしまっている。

質問に設定した内容を省略なしできちんと載せては?

ALTER SYSTEM でSCOPEも指定した内容を省略なしで質問に追記してください。
サポート契約が有効でしたら、オラクル社カスタマ・サポートに質問された方が早いです。

投稿2019/07/19 09:20

Orlofsky

総合スコア16415

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

BAKEDECO

2019/07/19 09:47

ご指摘の通り。 今はサーバーにアクセスできる環境におりませんので、また後日改めて編集させていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問