おすすめ本

最近のトラックバック

  • event (夢茶爺&苦茶爺のPC奮戦備忘録)

AccRanking

Ad

カテゴリ「Oracle」の12件の記事 Feed

2019年4月 4日 (木)

ORA-28002: the password will expire within 7 days がログイン時に発生

久々にOracleネタですが、Oracleを動かそうとして、データベースに接続すると以下のエラーメッセージが表示されました。

エラーメッセージは ORA-28002: the password will expire within 7 days.

あと7日でパスワードの期限が切れますよというお知らせのようです。

以下のコマンドで、ユーザのパスワードを変更しました。

alter user 「USERNAME」 identified by 「PASSWORD」


これで、ORA-28002 のエラーが表示されない様になりました。



■関連記事
Oracleファンクションのソースを表示する方法について・覚え書き
Oracleでのログインエラーでアカウントがロックされた場合の、強制ログインを使った対処方法
OracleでのPostgreSQLの「generate_series」(連続値の生成関数)的な使い方(LEVEL疑似列)
ORA-28002: the password will expire within 7 days がログイン時に発生
ORA-28001 the password has expired でユーザに接続不可

2018年9月10日 (月)

【Oracle】Oracle10gからOracle11gへの移行でユーザログイン不可について

最近、Oracle10gのデータベースをOracle11gに移行した時に不具合が発生しました。 Oracle11gへのデータベース移行は問題無かったのですが、クライアント側のVisualBasic.NETのプログラムを動作させると Oracleへのログインができない状況でした。

データベース移行に当たって、10gと同じユーザを作成して行ったのですが、 なぜかVB.NETのプログラムでそのユーザでの11gへのログインが不可なのです。 データベースのユーザへのログインはSQLPlus等でログインを確認したのですが、 VB.NETのプログラムでのログインNGがよくわかりませんでした。

その後、調べてみると、Oracle11gからはユーザのパスワードが大文字、小文字を区別することが分かりました。 SQLPlusでその様子を調べてみると、以下の様になっていました。

システムパラメータの sec_case_sensitive_logon の値が TRUE は大文字、小文字を区別する設定です。
この値を以下の様に FALSE にすれば、パスワードがOracle10gの時と同様の扱いになる様です。 結果は以下の表示になります。

この設定より、VB.NETのプログラムでのログインが出来る様になりました。 Oracle10gとは古いとお思いでしょうが、まだまだ10gで動いているところもあります。 データベースの移行での一助になれば幸いです。

楽天市場

■関連記事
【Oracle】Oracle10gからOracle11gへの移行でユーザログイン不可について
【Oracle SQL】SUBSTR関数でVBのRight、Left関数の様な使い方
【Oracle SQL】テーブルから1行のみのデータを取得する方法
【Oracle SQL】INSERTを連続で行う場合の方法

2018年5月16日 (水)

Oracleファンクションのソースを表示する方法について・覚え書き

ユーザが作成したOracleファンクションのソースを表示する方法ですが、最近使ったので覚え書きとして記します。

SQL-Plus での実行ですが以下の様にします。
NAME='XXXXXXXXX' の XXXXXXXXX に表示させたいファンクション名にします。
pagesize を0にすることでファンクションのソースを区切りなく表示できます。

楽天市場

■関連記事
Oracleファンクションのソースを表示する方法について・覚え書き
Oracleでのログインエラーでアカウントがロックされた場合の、強制ログインを使った対処方法
OracleでのPostgreSQLの「generate_series」(連続値の生成関数)的な使い方(LEVEL疑似列)
ORA-28002: the password will expire within 7 days がログイン時に発生
ORA-28001 the password has expired でユーザに接続不可

2017年11月29日 (水)

【Oracle SQL】SUBSTR関数でVBのRight、Left関数の様な使い方

Oracleの関数には、VB.NETで用意されているRight関数Left関数が存在しません。 文字列の抽出で、左から何桁とか、右から何桁とかを切り出す処理はよくあるものです。 OracleではSUBSTR関数しかないので、これを使うしかありません。

SUBSTR関数の引数は以下の様になっています。

SUBSTR ( string , position [, length] )
SUBSTRB ( string , position [, length] )

・string:抽出元の文字列
・position:抽出開始位置(1~) 
 (負の場合は右端から逆順に処理)
・length:抽出文字列長
・関数の戻り値:抽出文字列

SUBSTRは文字列をキャラクタ単位での処理を行い、 SUBSTRBは文字列をバイト単位での処理を行います。

文字列に漢字等のマルチバイト文字が含まれている場合にはSUBSTRBは問題があります。 文字コードがシフトJISの場合で例を示しますと以下の様になります。
SUBSTRは全角文字があっても、1文字は1文字として処理されます。 ただし、SUBSTRBは4つ目の例でも分かるように、漢字の泣き別れが発生し、 3桁目には半角の空白が返ってきます。
漢字の泣き別れの件はどうするのかは、テーブル設計や、出力する時に対応する様に するしかないと思います。
上の例の position のところをマイナスにすると以下の様になります。
文字列の最後からの処理になっているのが分かります。 さて、Right関数 Left関数 的な利用ですが、 Right関数 では position を 「1」として length に文字数を設定します。 Left関数 では position を文字数のマイナス値として length に文字数を設定します。 尚、番号などを先頭「0」付きで編集する場合、以下の様な使い方もあります。 TO_CHAR関数 でフォーマットを使えば2行目の様にできますが、 変換する数値が8桁より大きく、表示が下8桁のみの場合は1行目の方法も有用かと思います。

■関連ページ
OracleSQLの関数の中でよく使用するものその1
OracleSQLの関数の中でよく使用するものその2
OracleSQLの集計関数

Oracleの基本 ~データベース入門から設計/運用の初歩まで


楽天市場

2017年11月 2日 (木)

VB.NET:Oracleファンクションを呼出す時の方法について・覚え書き

Oracleファンクションを呼出す時の方法ですが、最近使ったので覚え書きとして一般的な例を記します。

ファンクションの例として入力及び戻り値が同じで、 各データ型(Number型、Varchar2型、日付型)の3個のファンクションを定義します。
ファンクションのソースは以下の通りです。 ソースをご覧になれば分かりますが、これらのファンクションは特に複雑な処理は行わず、 入力値に1を加算したり、文字列を付加して値を返す簡単なものです。

これらのファンクションのみを使う場合は DUAL 表を使えば通常のSELECT文でテストできます。 例えば、以下の様なSQL文を実行してみます。 ここでは、TEST_FNC3の出力のカラム幅が80桁になって表示が乱れるので あえてカラム幅を20桁に設定する COLUMN 命令を使っています。

SELECT文の出力を見れば、入力値に対して処理された値が返ってきているのが分かると思います。

この処理をVB.NETから操作する例は以下の通りです。 (フォーム上のボタンクリックイベントの中に処理を記述してあります)
■関連ページ
OracleSQLのその他・Tips等について
ODP.NET について

ひと目でわかる VisualBasic 2013/2012データベース開発入門 (MSDNプログラミングシリーズ)


楽天市場

2017年11月 1日 (水)

VB.NET:Oracleプロシージャを呼出す時の方法について・覚え書き

Oracleプロシージャを呼出す時の方法ですが、最近使ったので覚え書きとして一般的な例を記します。

プロシージャの引数は、入力がNumber型、Varchar2型、日付型の3個で、 出力は入力の値を更新して結果を返す、Number型、Varchar2型、日付型の3個で定義します。
プロシージャのソースは以下の通りです。 ソースをご覧になれば分かりますが、このプロシージャは特に複雑な処理は行わず、 入力値に1を加算したり、文字列を付加する簡単なものです。

このプロシージャをVB.NETから操作する関数の例は以下の通りです。 先ず、オラクルに接続後、プロシージャ名を指定してでOracleCommand生成します。 その後、OracleCommandParameters オブジェクトに入力及び、出力の引数を追加してやります。 各 OracleParameter の生成で注意する点は、データがVarchar2型で、データ長を設定する必要があります。 データ型のサイズが分かっているNumber、Date等は必要無いようです。

■関連ページ
OracleSQLのその他・Tips等について
ODP.NET について

ひと目でわかる VisualBasic 2013/2012データベース開発入門 (MSDNプログラミングシリーズ)


楽天市場

2017年10月19日 (木)

【Oracle SQL】テーブルから1行のみのデータを取得する方法

テーブルのデータ取得で、何かの条件で先頭のデータのみ必要な時があります。 こんな時、MySQLであればLIMIT句で LIMIT 1 とSELECT文の最後に記述すれば可能ですが、 Oracleの場合ではこの様な機能はありません。

OracleではSELECTの結果の行番号を返す ROWNUM という擬似列があります。 この擬似列を利用することで、LIMITと似た感じにできます。先ずは以下の例で、ROWNUM の値を表示してみます。 内側のUNIONで連結されたSELECT文の羅列は、'0010', '0001', '0020', '0030'の CODE を出力し、 その結果をソートする様になっています。 通常この部分は、実際のテーブルを検索するSELECT文を記述します。
検索結果は CODE と ROWNUM が表示されますが、ROWNUM1からの連番となります。

そこでこの ROWNUM を外側のSELECT文のWHERE句の条件に使えば、目的とする結果が得られます。 上のSQL文から分かるように ROWNUM = 1 の条件を付けることで、 先頭のデータを取得することができます。

■関連ページ
SELECT文に関する基礎的なこと
SELECT文に関する基礎的なこと2
副問い合わせを含むSELECT文について
集合演算子を使ったSELECT文について
CASE式を使ったSELECT文について

達人に学ぶDB設計 徹底指南書 初級者で終わりたくないあなたへ


楽天市場

2016年9月21日 (水)

【Oracle SQL】INSERTを連続で行う場合の方法

SQLのINSERT文で複数のデータを登録する場合、連続でデータのみを記述して実行したいことがあります。
デバッグの為に多数のテストデータを登録したりする場合などです。

「PostgreSQL」「MySQL」にはINSERT文のVALUES句のデータの内容をカンマ区切りで連結することで 一括にINSERT処理が行えます。
その方法がOracleでもできるのかなと思って以下の様なSQLを実行したのですが、 やはりエラーが返されました。 (テスト用のテーブルの定義も以下に示しています。)

Oracleでは以下の様にしないとできないです。
最初にINSERT ALLと記述して、 その後に INSERT INTO…VALUES(…)INTO以下を複数行書きます。 この時にはカンマなどで区切らなくても良いようです。 最後にSELECT * FROM DUAL;で終わってやります。

■関連ページ
OracleSQL データの追加
OracleSQL データの更新
OracleSQL データの削除


デル株式会社
楽天市場

2016年3月14日 (月)

Oracleでのログインエラーでアカウントがロックされた場合の、強制ログインを使った対処方法

オラクルでログイン処理で何回もエラーを起こした場合には、既定回数を超えるとアカウントがロックされてしまいます。

以下のSQLの実行を見てください。(SQLコマンドラインから実行しています)
なお、既定回数はデフォルトでは10回の様です。10回目の「CONNECT」でアカウントがロックされました。


このTESTユーザのアカウントのロックを解除する為に、強制的にログインします。 「/ AS SYSDBA」でのログインはOS認証で「SYSDBA」の権限を持つログインになります。


「ALTER USER」命令によりアカウントをアンロックしています。
尚、強制ログインの方法は「CONNECT SYSTEM/MANAGER AS SYSDBA」などもあります。

新・門外不出のOracle現場ワザ ?エキスパートが明かす運用・管理の極意【電子書籍】[ 五十嵐建平, 大塚信男, 小田圭二, 村方仁, 谷敦雄, 宮崎博之, 神田達成 ]

価格: 2,894円
(2016/09/29 14:00時点 )

感想:0件


楽天市場

■関連記事
Oracleファンクションのソースを表示する方法について・覚え書き
Oracleでのログインエラーでアカウントがロックされた場合の、強制ログインを使った対処方法
OracleでのPostgreSQLの「generate_series」(連続値の生成関数)的な使い方(LEVEL疑似列)
ORA-28002: the password will expire within 7 days がログイン時に発生
ORA-28001 the password has expired でユーザに接続不可

2016年3月12日 (土)

OracleでのPostgreSQLの「generate_series」(連続値の生成関数)的な使い方(LEVEL疑似列)

前回、PostgreSQLにおいて、複数行の整数を返すことができる関数「generate_series」を紹介しましたが、 Oracleでは関数ではなく階層問合せ用の「LEVEL疑似列」を使うことで可能になります。

以下のSQLの実行を見てください。(SQLコマンドラインから実行しています)

階層問合せにおいて「CONNECT BY」句は親子関係の条件を指定するのですが、 この場合は 「LEVEL疑似列」自身がそのまま、それ自体として条件づけられるので、 「LEVEL <= 5」により5個以下のレベル値が返るようです。 私自身もよくわかっていないのですが...

さらにこのSQL文をテーブルとして扱えば、以下の様にもできます。
■関連ページ
SELECT文に関する基礎的なこと
SELECT文に関する基礎的なこと2
副問い合わせを含むSELECT文について
集合演算子を使ったSELECT文について
CASE式を使ったSELECT文について

楽天市場

デル株式会社