小さい頃はエラ呼吸

いつのまにやら肺で呼吸をしています。


Oracle

Oracle 11gでパーティションテーブルを作成する

はじめに Oracle 11gでパーティションテーブルを作成する方法。 前提条件 Enterprise Editionであること。 以下のようなテーブルを性別でパーティンションを分けてみます。 create table table01 ( id char(8), --ID name varchar(50), --名前 furigana varc…

【Oracle】テーブル全体をロックして並行プロセスのinsertをブロックする

はじめに Oracleでレコードをロックするには、SELECT FOR UPDATEを使います。 select * from table for updateとすれば、テーブル全体をロックされて新規レコードの挿入もブロックできるかと思っていましたが、新規レコードの挿入はブロックできないようです…

PL/SQLでモジュラス11ウェイト2~7(M11W2~7)を実装してみた。

はじめに OracleのPL/SQLでモジュラス11ウェイト2~7(M11W2~7)方式でチェックディジットを計算する関数を実装してみました。独習Oracle PL/SQLposted with amazlet at 14.10.09林 優子 翔泳社 売り上げランキング: 200,248Amazon.co.jpで詳細を見るモジュラス…

【Oracle】REDOログバッファサイズとredo buffer allocation retries

はじめに 先日、Oracle DBにデータをinsertするとき、1件ずつコミットするのと、全部まとめてコミットするのとで、どちらが速いかをサンプルプログラムを作って検証してみました。 【Oracle】1件ずつコミットとまとめてコミットはどちらが早いか? - 小さい…

【Oracle】REDOログバッファサイズを拡張する方法

はじめに Oracle DBでREDOログバッファサイズを拡張してみました。 環境 Oracle Database 11g Release 11.2.0.1.0 現在のREDOログバッファサイズを確認する log_bufferパラメタを参照することで、現在のログバッファサイズを確認することができます。 show p…

【Oracle】1件ずつコミットとまとめてコミットはどちらが早いか?

はじめに Oracle DBにデータを1件ずつinsertしていく際、1件ずつコミットするのと、全部まとめてコミットするのとでどちらが早いでしょうか。 サンプルプログラムを作って計測してみました。 環境 Windows Server 2008 R2 Oracle Database 11g Release 11.2…

【Oracle】アラートログ(alert log)の出力先を調べる

はじめに Oracle DBでエラーなどが発生した場合に、alert logを見ることで原因を突き止めることができます。 アラートログの出力先は、以下のコマンドで調べることができます。 アラートログの出力先を調べる show parameter BACKGROUND_DUMP_DESTNAME TYPE …

ORA-00060: リソース待機の間にデッドロックが検出されました。

はじめに Oracleには、デッドロックを検出してエラーにする機能があることを知りました。 デッドロックを起こしてみる。 まず、SQL*Plusのコンソールを2つ立ち上げます。 1.トランザクション1がID1のレコードをロックします。 select * from table01 whe…

【Oracle】JOINを使ったUPDATE文で複数レコードを同時に更新する

はじめに OracleでテーブルAとテーブルBを結合して、条件にマッチするレコードを複数レコード同時に更新する方法について書いています。Oracleの基本 ~データベース入門から設計/運用の初歩までposted with amazlet at 19.09.29渡部 亮太 相川 潔 日比野 峻…

【Oracle】SQL Developer起動時に一部のモジュールをインストールできませんでしたのエラー

はじめに Oracle SQL Developerの起動時に、以下のエラーが発生した場合の対処方法をまとめました。 警告 - 一部のモジュールをインストールできませんでした oracle.external.jdbc - org.netbeans.InvalidException: Netigso: C:\sqldev\sqldeveloper-4.0.1…

ORA-01126:データベースはこのインスタンスでマウントし、どのインスタンスでもオープンしないでください

はじめに Oracleのアーカイブログの設定を無効から有効に変更しようとしたら、以下のエラーが出てしまった。 SQL> alter database archivelog; ORA-01126: データベースはこのインスタンスでマウントし、どのインスタンスでもオープンしないでください 原因 …

【Oracle】ORA-10636: ROW MOVEMENT is not enabled

はじめに ALTER TABLE table01 SHRINK SPACEであるテーブルをシュリンク(縮小)しようとしたら、以下のエラーになりました。 SQLエラー: ORA-10636: ROW MOVEMENT is not enabled 10636. 00000 - "ROW MOVEMENT is not enabled" *Cause: To shrink a data s…

【Oracle】レコードの中身をバイナリダンプする方法

はじめに この記事では、Oracleデータベース内に格納したデータをバイナリダンプするには、dump関数というのが使えます。DUMP - オラクル・Oracle SQL 関数リファレンス 新・門外不出のOracle現場ワザ エキスパートが明かす運用・管理の極意 (DB Selection)p…

Oracle SQL Developerでカラムにnullを挿入する

はじめに Oracle SQL Developerでカラムにnullを挿入する方法です。 Oracle SQL Developerでカラムにnullを挿入する方法 データを挿入したいレコードのカラムを選択し、すべての文字を削除します。 Enterキーを押して、コミットするとnullが挿入されます。た…

【Oracle】all_catalogテーブルを用いた高速なテストデータの作成

はじめに Oracleを使ったアプリケーションの開発で大量のテストデータが必要になることがあります。 テストデータを作成するために、その都度PL/SQLを書いてInsert文を大量に発行していたんだけど、数百万件とかのオーダになると時間がかかってしまう。時間…

【Oracle】lpad関数で数字の先頭から0埋め(ゼロ埋め)する

はじめに Oracle DBで5桁の数値項目をゼロ埋め(00001のような表記)したい場合は、lpad関数を使います。 lpadの使い方 select lpad(rownum, 5, '0') from dual; -- 00001となる lpadの第一引数に変換したい数値、第二引数に桁数、最後に埋めるための文字を指…

OracleでBツリーインデックスの高さ(深さ)を確認する

photo credit: blmiers2 via photopin cc はじめに Oracleのインデックスは通常Bツリーと呼ばれる二分木で管理されます。レコードが削除されると、Bツリーの高さが高くなり、レコードのへのアクセス効率が悪くなります。プロとしてのOracle PL/SQL入門 【第3…

Oracle SQL Developerで行番号を表示する方法

はじめに Oracle SQL Developerで行番号を表示する方法を紹介します。 Oracle SQL Developerで行番号を表示する 1.メニューバーからツール(T)→プリファレンス(P)を選択します。 2.コード・エディタ→行の左余白を選択し、行番号の表示(N)にチェックを入れ…

ORA-01480: STRバインド値に終了のNULLがありません。

はじめに Pro*Cでデータベースに値をInsertしようとしたら、以下のエラーになってしまいました。 ORA-01480: STRバインド値に終了のNULLがありません。 原因 insert文に使用しているバインド変数がNULL止めになっていなかったことが原因でした。Oracle/ProC -…

Oracle 11gでAWRのレポートを取得する方法

はじめに Oracle Database 11gでAWR(自動ワークロード・リポジトリ)のレポートを取得してみました。Oracle データベース ポケットリファレンス ~Oracle11g/12c対応posted with amazlet at 14.06.17若杉 司 技術評論社 売り上げランキング: 95,277Amazon.co.j…

Oracleでユーザのパスワードを変更する

管理者権限で以下のクエリを実行します。これによって、sysユーザのパスワードをoracleに変更されます。 ALTER USER sys IDENTIFIED BY "oracle";

Oracle 11gでテーブルをロックしたままのセッションを削除する

はじめに Oracleのテーブルをロックするようなプログラムを作成中に、ロールバック処理に不備があるとテーブルがロックされたままになってしまいます。 こうなってしまった場合に、ロックしているセッションを強制的に終了させる方法をまとめました。機能で…

ダイレクト・パスのマルチスレッド最適化が使用禁止です

はじめに 前回、SQL*Loaderの記事を書いたのですが、SQL*Loaderの実行ログに以下のようなメッセージが出力されていることに気づきました。 ダイレクト・パスのマルチスレッド最適化が使用禁止です エラーメッセージと勘違いしましたが、マルチスレッドのオプ…

Oracle SQL*Loaderを使ったデータ挿入の方法

photo credit: Sprengben [why not get a friend] via photopin cc はじめに SQL*Loaderは、CSVファイルからデータを読み取って、テーブルにデータを挿入するツールです。大量のデータをテーブルに挿入する際、ループ文を使ってinsert文を何度も発行するより…

SQL DeveloperでIo Exception: Got minus one from a read call

はじめに Oracle SQL DeveloperでクライアントマシンからDBサーバに接続する際、以下のエラーが出ました。 Io Exception: Got minus one from a read call 許可/除外リストが怪しい 原因が良くわからないんだけど、TCP.VALIDNODE_CHECKINGパラメータが怪しい…

Oracle SQL DeveloperでSQLの実行計画を取得する

photo credit: candrews via photopin cc はじめに Oracle DBを操作するOracle SQL DeveloperでSQLの実行計画を取得する方法を紹介します。図解入門よくわかる最新Oracleデータベースの基本と仕組み (How‐nual Visual Guide Book)posted with amazlet at 14.…

OracleでSQLの実行計画を調べる3つの方法まとめ

photo credit: __MaRiNa__ via photopin cc はじめに Oracle DBでSQLの実行計画を取得するにはいくつかの方法があります。 この記事では実行計画を取得する3つの方法をまとめました。新・門外不出のOracle現場ワザ エキスパートが明かす運用・管理の極意 (D…

Oracleで直前に実行したSQLを確認する

はじめに Oracleで直前に実行したSQL文を知りたい場合、v$sqlを参照すると良いです。Oracleで流れたSQLを取得するには - バックパッカープログラマの備忘録 新・門外不出のOracle現場ワザ エキスパートが明かす運用・管理の極意 (DB Selection)posted with a…

Oracle Pro*cで作成した関数をC++から呼び出す

Oracle Pro*cで作成した関数をC++のプログラムから呼び出そうとしたら、リンクエラーが出てしまってうまくいきませんでした。 原因は、プロトタイプ宣言の仕方でした。よくみる extern "C" {} と __cplusplus - はこべブログ ♨ extern "C"を使ってC言語スタ…

Oracle Pro*cでORA-01405のエラーを回避する方法

はじめに Oracle Pro*cでNULLを含むカラムをフェッチした際に出力されるエラー「ORA-01405: フェッチした列の値がNULLです」を回避する2つの方法についてまとめました。 1.インジケータ変数(標識変数)を使用する 1つ目の方法は、データフェッチを行う際…