Globalization

ORA-01846: 指定した曜日が無効です。の解決方法

Posted on
ORA-01846 ORA-01846: 指定した曜日が無効です。、SQLエンジンは現在のNLS_DATE_LANGUAGEで入力文字列の週の日の値を認識できません。この投稿では、以下に示すORA-01846のエラーパターンについて説明します。 週の比類のない日の値 スペルミスのある曜日の値 週の外国の日の値 ORA-01846 週の比類のない日の値 [oracle@test ~]$ export NLS_LANG=Japanese_Japan.UTF8 [oracle@test ~]$ sqlplus /nolog … SQL> conn hr/hr Connected. SQL> set heading off; SQL> select value from v$nls_parameters where parameter = ‘NLS_DATE_LANGUAGE’; JAPANESE 週の曜日の値に何も問題がないと思われるかもしれませんが、使用した曜日の値はOracleによって受け入れられない場合があります。例を見てみましょう。 次に、「きんようび」という用語を使用しました。これは、日本語でも「金曜日」を意味します。 SQL> select TO_DATE(‘2019-08-30, きんようび’, ‘YYYY-MM-DD, Day’) from dual; select TO_DATE(‘2019-08-30, きんようび’, ‘YYYY-MM-DD, Day’) from dual       […]
Globalization

ORA-01843: 指定した月が無効です。の解決方法

Posted on
ORA-01843 ORA-01843: 指定した月が無効です。は、SQLエンジンが現在のNLS_DATE_LANGUAGEで入力文字列の月の値を認識できないことを意味します。この投稿では、以下に示すORA-01843のエラーパターンについて説明します。 一致しない月の値 スペルミスの月の値 外国の月の値 ORA-01843 一致しない月の値 月の値に何も問題がないように見えるかもしれませんが、使用した月の値はOracleで受け入れられない場合があります。例を見てみましょう。 それから、日本語で8月を意味する”八月”という用語を使用しました。 SQL> select TO_DATE(‘八月 30, 2019’, ‘Month dd, YYYY’) from dual; select TO_DATE(‘八月 30, 2019’, ‘Month dd, YYYY’) from dual                * 行1でエラーが発生しました。: ORA-01843: 指定した月が無効です。 有効な月の値はどこにありますか? “八月”も日本語の8月の正しい表現ですが、Oracleには無効です。このようなエラーパターンを解決するには、異なるNLS_DATE_LANGUAGEの有効で正しい月の値を知る必要があります。この場合、”八月”は有効ではなく、”8月”は有効です。 SQL> select TO_DATE(‘8月 30, 2019’, ‘Month dd, YYYY’) from dual; 19-08-30 ORA-01843 スペルミスの月の値 […]
Conversion Function

Oracle TO_DATE Function Examples

Posted on
Oracle TO_DATE Function by Examples Oracle TO_DATE function can convert a date time string into a value acceptable for converting string into datetime type. There’re 4 major components in Oracle TO_DATE function input arguments. Date time string (char) This is the main input variable that you shall use. This is mandatory in TO_DATE function argument […]
Globalization

ORA-12705: NLSデータファイルにアクセスできないか、無効な環境が指定されましたの解決方法

Posted on
ORA-12705では、NLS設定が正しくないことを示しています。データベースに対して何かを実行する前に、まずそれらを修正する必要があります。 この投稿にはORA-12705の2つのエラーパターンがあります。 接続前のORA-12705 接続後のORA-12705 接続前のORA-12705 データベースに接続する前に故意に偽のNLS_LANGを設定しましょう。これは、Oracleが使用するために選択する環境変数です。NLS_LANGの形式については、NLS_LANG方法と理由を確認できます。 [oracle@test ~]$ export NLS_LANG=JAPAN_JAPAN.UTF8 [oracle@test ~]$ echo $NLS_LANG JAPAN_JAPAN.UTF8 データベースに接続しようとしました。 [oracle@test ~]$ sqlplus /nolog … SQL> conn hr/hr ERROR: ORA-12705: Cannot access NLS data files or invalid environment specified SQL> conn / as sysdba ERROR: ORA-12705: Cannot access NLS data files or invalid environment specified SQL> exit エラーORA-12705は、両方の接続がデータベースによって拒否されたことを示しています。 どうして? […]
SQL

ORA-00904 無効な識別子です。の解決方法

Posted on
ORA-00904 Invalid Identifier - Oracle Database Object Name Recognition Examples
ORA-00904 ORA-00904は、文の中で一致しない列名または誤った構文を使用したことを意味します。通常、エラーはSELECTまたはINSERTで発生し、その他はUPDATE、DELETE、CREATE TABLE、ALTER TABLE、またはPL / SQLブロックで発生している可能性があります。 ほとんどのユーザーはそのエラーを信じていませんが、実際にSQLパーサーは間違いを犯したことが一度もないので、この記事でエラーパターンを見てみるのが好きかもしれません。おそらく、エラーパターンの1つがあなたのケースにマッチします。ほとんどのエラーは大文字と小文字を区別する問題なので、最初に緩い形式と厳密な形式の違いを説明する必要があります。 通常、Oracleは、パスワード以外の大部分の識別子を大/小文字を区別しないものとして扱います。 ただし、ORA-00904無効な識別子が生成された場合に注意が必要な特別な使用法がいくつかあります。 ORA-00904だけでなく、ORA-00903およびORA-00911も、オブジェクト識別子の無効な使用法に関連しています。 具体的には、ORA-00903は無効なテーブル名をユーザーに警告し、不正な文字を配置するためにORA-00911が発生します。 緩い形式と厳密な形式 Oracle Databaseのオブジェクト名と修飾子によると、データベース・オブジェクトを作成するための有効な命名形式は2種類あります。1つは引用符で囲まれていない識別子、もう1つは引用符で囲まれた識別子です。ORA-00904を回避するには、2つの命名形式の明確な違いを知っておく必要があります。 引用符で囲まれていない識別子(緩い形式) 句読点やその他の特別な扱いに囲まれていません。基本的に同等の文字列である限り、SQLステートメントでは大文字と小文字を区別せずに柔軟に使用できます。だから私は通常この記事でそれを緩い形式と呼びます。 引用符付き識別子(厳密な形式) それらは二重引用符( “”)で始まり、終わります。空白や予約語を含め、ほとんどすべての文字を二重引用符で囲むことができます。この種の識別子は、最初に定義されたとおりに使用する必要があります。だから私は通常、この記事ではそれを厳密な形式と呼びます。私の知る限りでは、これがORA-00904の主な原因です。 後ほど、ORA-00904無効な識別子についても詳しく説明します。 ORA-00904のエラー・パターン ほとんどの場合、列名の誤用がORA-00904の主な原因であり、残りは構文エラーです。この記事では、次の項でORA-00904のいくつかのエラー・パターンについて説明します。 SELECT, INSERTのORA-00904 WHERE, ORDER BY, GROUP BYのORA-00904 CREATE TABLEのORA-00904 ALTER TABLEのORA-00904 PL/SQLのORA-00904 A. SELECT文またはINSERT文のORA-00904 SELECTまたはINSERTにリストされている列はすべてこのエラーを生成する可能性があります。 この項では、ORA-00904がユーザーに何か問題があることを警告しています。これは、次のいずれかの理由で発生する可能性があります。 存在しない列 存在しない関数 スペルミスの柱 大文字と小文字を区別する列 列名の中のブランク 1. 存在しない列によるORA-00904 通常、二重引用符を使わずにテーブルを作成します。 SQL> create table all_names_1 (First_Name varchar2(25), Last_Name varchar2(25)); Table […]
Compatibility

ORA-28040: 一致する認証プロトコルがありませんの解決方法

Posted on
ORA-28040: 一致する認証プロトコルがありません Oracleクライアント9.2から12.1データベースに接続しようとしましたが、ORA-28040: 一致する認証プロトコルがありません。 私は、バージョン間にいくつかの相互運用性の問題がある可能性があることを知っていました、特にこのケースのようにバージョンギャップが大きい場合、Oracle 9iクライアントは12cデータベースに接続します。しかし、ORA-28040が登場するとは思っていませんでした。 12cデータベースに接続するためにojdbc14.jar以下など、古いOracle JDBCドライバを使用しているときにも同じエラーが発生する可能性があります。この記事の後半で、Oracle JDBCドライバについて、ORA-28040を使用して詳細に説明します。 ORA-28040の内容を見てみましょう。 説明 ORA-28040: 一致する認証プロトコルがありません 原因 クライアントとサーバーの両方で有効な認証プロトコルがありません。 アクション 管理者は、クライアントとサーバーの両方で、SQLNET.ALLOWED_LOGON_VERSION_SERVERおよびSQLNET.ALLOWED_LOGON_VERSION_CLIENTパラメータの値を、システムでサポートされている最小バージョンのソフトウェアと一致する値に設定する必要があります。このエラーORA-28040は、クライアントソフトウェアのバージョンに適した検証機能なしで作成されたユーザーアカウントに対してクライアントが認証を行っているときにも発生します。この状況では、必要な検証者が生成され、認証が正常に続行されるようにするために、そのアカウントのパスワードをリセットする必要があります。 サーバーかクライアントか ORA-28040に関する上記の説明によると、クライアントまたはサーバーのどちらかが受け入れる互換性のある認証プロトコルを提供する必要があります。しかし、ここでの問題は、サーバー構成を変更するのか、それともOracle クライアントをアップグレードするのかということです。 実際、それはあなたが持っている特権によって異なります。データベース管理者は、すべてのユーザーの問題を一度に解決するようにサーバー構成を変更できます。開発者にとっては、Oracle 12cデータベースの認証済みプロトコルと一致させるために、Oracleクライアントを修正またはアップグレードすることしかできません。 さまざまな適用可能な状況をよりよく理解するために、この記事ではORA-28040に対する解決策を2つの主要部分に分けます。最初の部分はサーバー側、もう1つはクライアント側です。 サーバーサイドソリューション クライアントサイドソリューション ORA-28040のサーバー側ソリューション サーバー側でネットワーク構成を変更する権限がある場合は、すべてのユーザーのORA-28040を数分で解決する可能性があります。 実際のところ、ほとんどの開発者は権利を持っていません。 シナリオ1:新しいデータベースがサーバーとして機能している 12cなど、より古いバージョンのデータベースに接続するためにユーザーが古いクライアントのアップグレードを拒否した場合、ORA-28040は日常業務で頻繁に発生する一般的なエラーになります。 前記クライアントは、以下のようにOracle 12cデータベースサーバに接続するためのクライアントとして機能するOracle 9iサーバであり得る。ORA-28040が通常どおりsqlplusによってスローされました。 他の解決策を探したところ、ORA-28040を説明するのに非常に役立つ「sqlnet.oraファイルのパラメータ」に関するOracleのドキュメントが見つかりました。その中で、認証プロトコルの両端との互換性を保つためにどのような状況でSQLNET.ALLOWED_LOGON_VERSION_SERVERを使用するべきかを説明します。 目的 Oracle Databaseインスタンスに接続するときに許可される最小認証プロトコルを設定します。 使用上の注意 パラメータ名のVERSIONという用語は、Oracle Databaseのリリースではなく、認証プロトコルのバージョンを表します。 クライアントのバージョンがこのパラメータで定義された値を満たさない、または超えない場合、認証はORA-28040: 一致する認証プロトコルがありません、またはORA-03134:このサーバーバージョンへの接続はサポートされなくなりました。 これは私のORA-28040に対する解決策です:12.1データベースサーバーのsqlnet.oraにSQLNET.ALLOWED_LOGON_VERSION_SERVER=8を追加します(古いクライアントではありません)。 [oracle@test ~]$ vi $ORACLE_HOME/network/admin/sqlnet.ora … SQLNET.ALLOWED_LOGON_VERSION_SERVER=8 MOS Doc ID 562589.1に従ってRAC環境にいる場合は、グリッドレベルではなくデータベースレベルでsqlnet.oraを使用する必要があります。そして私はそれを確認しました。 有効にするためには、リスナーを再起動する必要はありません。新しい着信接続は新しい値を適用します。設定が正しいことを確認してください。 今回は、予想どおりORA-28040は表示されませんでした。 […]