かきスタンプ

福岡でフリーランスの物流系のエンジニアやってます。

Oracle

1月31日の1ヶ月後は何日? 3月31日の1ヶ月前は何日? 各種RDBで確認してみた。

『期限切れとなるのは、登録日より1ヶ月後です』 『1か月前に告知されます』 というのを見た時、「何日だろ?」と思ったのがきっかけ。 法的に決められたルールや、国際ルールがあるんかな。 パッとググってみた感じ、見つけきれなかったんで、RDBに聞いて…

PL/SQL:update文の where条件に、 配列を使用する

以前、配列を where句における in の条件式として使用するというエントリを書きましたが、update文にて、この書き方をすると、ORA-00902: データ型が無効です。というエラーが発生します。 ですので、update文の where 条件にて、配列を引数に取るには、fora…

Oracle12c:PL/SQLのデバッグ実行に必要な設定【忙しい人向け】

Oracle 12cにて、PL/SQLをデバッグするために必要な設定 DEBUG CONNECT SESSION 権限の許可 DBMS_DEBUG_JDWP に対する EXECUTE 権限 デバッグするストアド・プロシージャーに対する EXECUTE 権限 JDWP ACL 実行権限 ストアドプロシージャが "Compiled for De…

PL/SQL:配列を WHERE句における in の条件式として使用する

こんな感じ。 type TYPE_NUM_LIST is table of number index by binary_integer; --//////////////////////////////// -- 配列データをINに渡して参照 --//////////////////////////////// PROCEDURE MY_PROCEDURE_02_4 ( IN_NUM_LIST IN TYPE_NUM_LIST --配…

Oracle(PL/SQL):配列型の引数に、値を設定してデバッグする

Oracle開発ツールのいくつかは、PL/SQL の引数が配列の場合、自由に値がセットできなくて、苦労するケースもあるかと思います。 Oracle SQL Developer のデバッグ実行にて、『PL/SQL ブロック』を編集することで、配列型の引数に、好きな値を設定する事がで…

Oracle SQL Developer:出力結果を、列名を含めてコピー

Oracle SQL Developerにて、select文の結果を、「Ctrl + A」「Ctrl + C」⇒「Ctrl + V」と操作すると、レコードのみがペーストされます。 「Ctrl + A」「Ctrl + Shift + C」⇒「Ctrl + V」で、列名を含めてコピーが可能です。

Oracle:大文字/小文字 半角/全角 ひらがな/カタカナ を区別しないで検索

以下の関数を組み合わせて、大文字/小文字 半角/全角 ひらがな/カタカナ を区別せずに検索できます。 UPPER(小文字→大文字) TO_MULTI_BYTE(半角→全角) UTL_I18N.TRANSLITERATE(詳細は後述) (例) 以下で、「大文字・全角・カタカナ」に変換しています…

Oracle12:【忙しい人向け】ユーザ作成方法

Oracle12にて、以下のようなメッセージが出てユーザが作成できなかった時の対処。 【エラーメッセージ】 ORA-65096: 共通ユーザーまたはロール名が無効です ググったら、何やら複雑な情報がバシバシと出てくるけど、要は「12からアーキテクチャが変わった」…

Oracle:ODTを使用した時の接続設定

ODT(Oracle Developer Tools for Visual Studio)を使用して、プロジェクトから Oracleに接続する場合、 OracleClient用に設定した tnsnames.ora とは別に、ODT用の tnsnames.oraを用意する必要があります。 ODTをデフォルトのパスにインストールしていた場…

Oracle:主キーの内容を変更

プライマリキーを編集するコマンドは無いみたいなんで、いったん削除した後に、もう1回作成する。 alter table <テーブル名> drop constraint <主キー制約名>; alter table <テーブル名> add constraint <主キー制約名> primary key <列名>; 再作成時にエラ…

Oracle:【ORA-00060】デッドロックの発生原因を調査

(エラーメッセージ) ORA-00060: リソース待機の間にデッドロックが検出されました。 デッドロックの解除は、こんな感じで。 詳しく調べたい場合(デッドロックが発生しやすいSQLはどれか等)は、トレースファイルを確認する。 トレースファイルの保存先は…

Oracle:【ORA-12514】突然リスナー異常が発生して繋がらなくなった

正常稼働していたが、ある日突然繋がらなくなったので調査。 クライアントから接続した時のエラー内容 ORA-12514: TNS:listener does not currently know of service requested in connect descriptor サーバから接続した時のエラー内容 ORA-01034: ORACLE n…

Oracle:ログの種類と出力先

Oracleのログの種類と出力先についてのメモ。 以下、出力先はデフォルト設定時となっています。 クライアントからDBへの接続が出来ない場合 sqlnet.log を確認する。 パスはバージョンによって異なる。 (10g以前) $ORACLE_HOME/network/log (11g以降) $O…

Oracle:文字列を日付型に変換するファンクション(できなければ nullを返す)

Oracleで、文字列を日付型に変換し、できなければnullを返すファンクションを書いてみた。 create or replace function CONVERT_TO_DATE ( ARG_DATE in varchar2) return date is FORMATTED_DATE varchar2(8); begin FORMATTED_DATE := substr(replace(ARG_D…

Oracle:インポートエラー(IMP:00013)の対処

エクスポート・ファイルはEXPORT:V10.02.01によって従来型パス経由で作成されました。 IMP-00013:DBAのみ別のDBAがエクスポートしたファイルをインポートできます IMP-00000:エラーが発生したためインポートを終了します。 というメッセージが出た時の対処。…

Oracle:主キーのカラム抽出

Oracleで主キーのカラムを抽出するSQL select USER_CONS_COLUMNS.OWNER ,USER_CONS_COLUMNS.TABLE_NAME ,USER_CONS_COLUMNS.COLUMN_NAME ,USER_TAB_COLUMNS.DATA_TYPE ,USER_TAB_COLUMNS.DATA_LENGTH from USER_CONS_COLUMNS left join USER_TAB_COLUMNS on …

Oracle:サービス名を記述しないDBLINK

Oracleで異なるDBを使用する場合、DBLINKを使いますが、サービス名を記述しない書き方でもOKです。 記述例 CREATE DATABASE LINK <dblink_name> CONNECT TO <user_name> IDENTIFIED BY <password> USING '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=hostname)(PORT=1521))(CONNECT_DATA=(SER</password></user_name></dblink_name>…

Oracle:デフォルト設定のパスワード有効期限切れ対策

Oracle11g以降は、パスワードの有効期限がデフォルトで180日となっています。 そのままにしておくと、180日経過後に突然ログインできなくなるので、パスワードの有効期限を延ばす(もしくは無期限に設定する)必要があります。 以下、SYSDBAで実行。 パスワ…

Oracle:テーブルのみをエクスポート

Oracleでテーブルのみをエクスポートする方法。 expを使う場合 exp user/pass@net_service_name TABLES=% FILE=filename.dmp expdpを使う場合 expdp \"user/pass@net_service_name AS SYSDBA\" DIRECTORY=dump_save_directory DUMPFILE=filename.dmp TABLES=…

Oracle:表領域ごとの使用量、使用率、空き容量を表示

Oracleにて、表領域ごとの使用量、使用率、空き容量を表示するSQLを書いてみた。 SQL select DBA_DATA_FILES.TABLESPACE_NAME ,min(DBA_DATA_FILES.BYTES)/1024/1024 as "現サイズ(MB)" ,round(min(DBA_DATA_FILES.BYTES)/(1024*1024) - sum(DBA_FREE_SPACE.…

Oracle:どんなSQLが過去に発行されたか追跡

過去に発行されたSQLを表示 select * from v$sqlstats これだけだと、誰が実行したか(ユーザ、マシンなど)がわからないので、合わせて知りたい場合はセッション情報と結びつける。 セッション確認 select * from v$session v$sqlstats.sq_id と v$session.…

Oracle:テーブル名一覧とカラム名一覧を取得

テーブル名一覧とコメントを取得 select USER_TABLES.TABLE_NAME ,USER_TAB_COMMENTS.COMMENTS from USER_TABLES left join USER_TAB_COMMENTS on USER_TABLES.TABLE_NAME = USER_TAB_COMMENTS.TABLE_NAME where 1=1 order by 1 カラム名一覧とコメントを取…

Oracle:ロックセッションKILL(削除)

デッドロック発生時の対策。 ロックセッションサーチ select SID ,SERIAL# from V$SESSION where SID in ( select SID from V$LOCK where TYPE in ('TM','TX') ) SID、SERIAL# をメモし、以下のコマンドを実行。 ロックセッションKILL ※要管理者権限 alter s…

Oracle:ORDCOM登録方法

Oracleを使用しているシステムにて、サーバ側でエクスポートを実行する処理をクライアントからキックする時、ORDCOM(RPC)を使用してます。内部ではバージョンごとに異なるバイナリを使っていて、バージョンが切り替わるたびに入れ替える必要がある模様。 …

Oracle:DB領域拡張

OracleでDB領域が足りなくなった時の拡張方法 1.DBFを拡張する alter database datefile 'E:oraclespace\tbspace01.dbf' resize 8192M ※resizeにて容量を指定。「MB」でなく「M」 2.DBFを追加する。(複数のdbfで構成する) alter tablespace TBL01 add …

Oracle:SYSDBAでのエクスポート/インポート

エクスポートをSYSDBAで実行する時、ログイン識別子をエスケープシーケンスで囲ってやればOKです。 実行例 expdp \"user/pass@net_service_name AS SYSDBA\" DIRECTORY=dump_save_directory DUMPFILE=filename.dmp SCHEMAS=schema_name expdpは、旧コマン…

Oracle:tnsnames.oraを記述しないDB接続

Oracleでの接続設定は tnsnames.oraに記述をしますが、別に書かなくても接続できちゃいます。 例:sqlplusからの接続 sqlplus user/pass@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=hostname)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=XE…

EC2へのOracleインストール

EC2にOracleをインストールした時に躓いた点のメモ。 Windows Serverインスタンスを作成すると英語版が立ち上がり、デフォルト文字コードはANSIとなっています。「別に英語読む事なんか苦にならねーぜ!」と意気揚々とそのままOralceインストールしちゃうと…