ただ今当サイトはメンテナンス中です ご不便をお掛けいたしまして、誠に申し訳ございません。 ご理解の程、よろしくお願いいたします。 Sorry for the inconvenience but we’re performing some maintenance at the moment. Maintenance Schedule Date and Time Start Date
動画 Tanel Poder’s Hacking Session: How Oracle SQL Plans Are Really Executed – Part 1 Tanel Poder’s Hacking Session: How Oracle SQL Plans Are Really Executed – Part 2 Tanel Poder’s Exadata Snapper Hacking session videos Oracle full table scans, direct path reads, object level checkpoints, ORA-8103s 資料 Oracle Database オラクル・コンサルが語る! SQLチューニングに必要な考え方 Oracle SQL Plan Execution: How it really works OWI(O
信じられないDB文化「固定長DB」でもあうんです。大規模コンシューマ向けサービスのRDB設計 - 山本大の日記に引き続き、大規模コンシューマ向けサービスのRDBの意外な使い方について。 僕らのサービスでは、統計情報を手作業でセットして固定化していた。 こんなことは普通やらないけれど、しかしながら非常にシステムのパフォーマンスを安定させるのに効果があった。 Oracleの統計情報(オプティマイザ統計情報)とは まず統計情報とは何かというところから始める。 統計情報とは、正式名称「オプティマイザ統計情報」といい、OracleがSQLを解析して最適な実行計画を作成するために利用する情報である。 実行計画を作成する機能のことをCBO(コスト・ベース・オプティマイザ)という、このオプティマイザ向けの統計的な情報だから、オプティマイザ統計情報と呼ばれる。 統計情報の実体は何かというと、データベースの各
パーティションの変更 名前 追加・削除 インデックス作成 [/2008-06-28] パーティション定義の照会 [/2009-01-06] パーティション内のデータ データ操作SQL [/2009-10-06] 特定パーティションへのSQL実行 [/2010-02-04] 格納されているパーティションの確認 [2009-01-09] パーティションのエクスポート [2007-12-13] パーティションを使うには、Enterprise Editionである必要がある。[2009-12-24] SQL> create table part_test 2 (key number) 3 partition by hash(key); create table part_test * 行1でエラーが発生しました。: ORA-00439: 機能は使用可能ではありせん: Partitioning SQ
(行ロック)SELECT〜FOR UPDATE [WAIT | NOWAIT] SELECT〜FOR UPDATEは行レベルでロックをするためのSQL文。 (10秒までは競合するトランザクションの完了を待つ) SELECT column FROM table WHERE column = 1 FOR UPDATE OF column WAIT 10; WAITとNOWAITについて WAIT -> 競合した場合にはロックが解除されるのを待機 NOWAIT -> ロックが競合した場合に即エラーで制御を戻す INSERT/UPDATE/DELETEでNOWAITや待機時間を制限する指定はできない UPDATEやDELETEはSELECT〜FOR UPDATEを使用して該当する行をロック可能であるが、 INSERTの場合にはロックできない (表ロック)LOCK TABLE (排他モードで表ロック
Oracleにはoerrというツールが付属しており、これを使うとOracleのエラーコード毎に、その意味が確認できる。Oracleのエラーは複合的な原因によるものが多いので必ずしもこれ一発で原因に辿り着ける可能性は低いが、ちょっとした確認には十分役に立つコマンドなので是非覚えておきたい。ちなみにMySQLでは「perror」というツールがこれとよく似ている(参考:perrorでMySQLエラーメッセージ確認)。 ツールの場所を確認 [oracle@shibainu55 ~]$ env | grep ^ORA ORACLE_SID=SHIBA10G ORACLE_BASE=/opt/oracle ORACLE_HOME=/opt/oracle/product/10.2.0/db_1 [oracle@shibainu55 ~]$ which oerr ~/product/10.2.0/db_1
SQLのパフォーマンス問題は、SQLそのものと同じぐらいの歴史がある―― ある人は、SQLはそもそも遅いものだとすら言うかもしれません。これは、SQLの歴史が始まった頃は正しかったかもしれませんが、今となっては全く 当てはまらないでしょう。にもかかわらず、SQLのパフォーマンス問題は今も一般的でよくあることです。どうしてそうなってしまうのでしょうか? SQL言語は、恐らく最も成功した第4世代言語(4GL)でしょう。その最大の利点は、「何を」と「どのように」 を分離できることです。SQL文は、どのようにそれを実行するかを記述せずに、単純に 何を必要としているかのみの記述になっています。以下のような例を考えてみましょう。 SELECT date_of_birth FROM employees WHERE last_name = 'WINAND'SQLのクエリは、データを要求する英語の文として読
サイレントモードでSQL*Plusを起動する Top | Knowledge| DB構築| 文字列関数| 日付関数| 集計関数| SQL関数(アルファベット順) SQL(抽出・更新)| SQL*Plus| PL/SQL| Utility| Structure| スキーマ| チューニング| 用語| 参考書 SQL*Plus をサイレントモード(-S) で起動する SQL*Plus 起動時、終了時のメッセージやバージョン情報、コマンドプロンプトなどを出力させずに実行する。特にバッチ処理向けにスクリプトファイルを呼び出して問い合わせ結果を スプール する場合に用いる。 サイレントオプションを使用する サイレントオプション付き(sqlplus -s) でスクリプトファイル silent.sql を実行する例 silent.sql の内容 C:\>sqlplus -s rivus/rivus_pas
前書き アプリケーションのRDBMSでデッドロックが発生した際に、なんらかの手段(JP1とか)でアラートを上げる設定をすることがあります。 実際にアラートが上がるかテストする必要があるわけですが、Oracle環境でさくっとデッドロックを発生させる手順をまとめました。 デッドロックの仕組み デッドロックは2つ以上のユーザが同じテーブルの同じ複数行に対し更新をかけ、両方ともがお互いを待っている状態です。 図にすると以下のような具合です。 パワポ感満載ですが、気にしないでください。 上図を実際に実行すると、簡単にデッドロックを発生できます。では早速やってみます。 デッドロック発生手順 sqlplusでログインし、テスト用テーブルを作成 sqlplus user1/xxxxx CREATE TABLE TEST_TBL1( test_id INT NOT N
REDOログ書き込みのタイミング 3秒置き COMITT要求時 ログ・バッファの3分の1がいっぱいになったとき DBWRが書き込みを行う直前 のようにいくつかのタイミングがあります。「ログ・バッファの3分の1がいっぱいになったとき」の動作は、ログ・バッファのサイズによって影響を受けます。ログ・バッファはSGA内のメモリ上に確保され、パラメータ「log_buffer」で設定できます。このサイズはどの程度で設定すべきかが、重要な管理項目です。デフォルトでは「128Kbytes×CPU_COUNT」で設定されており、CPU数が5未満であれば500Kbytes(524288bytes)となるようです。 ログ・バッファのサイズが適正であるかどうかは、ログ・バッファに書き込むREDOエントリで競合が起きているかどうかで判断します(リスト1)。統計情報の「redobuffer allocation re
statspackさわる - kagamihogeの日記でstatspackを自分の環境で手軽に試せるようになった。なので、練習がてら分かりやすくハッキリと差が出るレポートを取得して眺めてみる。 やることは、10万回insertを実行するJavaのプログラムを2種類用意する。1つは、1回ごとにcommitする。もう1つは、1回だけ最後にcommitする。この2つの間でstatspackのレポートにどんな差が出るかを確認する。 環境 DB CentOS-6.4-x86_64 Oracle Database Express Edition 11g Release 2 Java Java SE Development Kit 7u40 Eclipse Kepler(4.3.1) SR1 IDE for Java EE Developers Oracle Database 11g Release
開発時に発生するエラー ORA-00911: 文字が無効です。 原因 非引用識別子の先頭文字に英字以外の記号や数値、日本語を使用している。 対応 引用識別子と非引用識別子を正しく使い分ける。⇒引用符と引用識別子 原因 SQL 文の中に全角スペースなどが混入している。 対応 エラーが発生しない場合がほとんどかとは思うが全角スペースを半角スペースの替わりに使用してはいけない。これを見つけるのは難しい。文字列を反転表示するなどで確認する。 また、その他の見えないコントロールコード(タブと改行以外)や不適切な改行が含まれていないかを確認する。 原因 SQL*Plus 以外の SQL 実行インターフェイスを使用している場合に SQL 文の終端にセミコロン(;) が付けてある。 例: PL/SQL の 動的SQL や Java など 対応 動的 SQL の DDL や DML にはセミコロンは不要。
VBA経由でOracleを操作するときのライブラリを調べるのに、とりあえず10.2.0.5のOracle Client全部入り環境に何が入っているかを見てみた。可能であれば、最小構成のOracle Clientしか入っていない環境で動かしたいのだけど…… たぶん使ってるのはこのOracle Provider for OLE DBってやつ……。 Excel‐Oracle連携(2)Page 2/3 お手軽が一番、ExcelをOracleクライアントに http://www.atmarkit.co.jp/fdb/rensai/excel2oracle02/excel2oracle02_2.html ADOでOracleにつなぐサンプルを書いてみる これを参考にしてサンプルコードを書いてみましょう…… Private serverName As String Private userName As
結合を含んだ更新(Update)のOracleでの書き方。 SQL-Serverと違ってUpdate句の中でJoinが使えないのでサブクエリ内で結合する。 また、更新する列をサブクエリ内で取得しておく必要がある。 ※テーブル1とテーブル2で結合し、テーブル2の項目でテーブル1を更新する例 ・SQL-Serverの場合 UPDATE table1 SET COL1 = B.COL1 FROM table1 A INNER JOIN table2 B ON A.CD1 = B.CD1 ・Oracleの場合 UPDATE ( SELECT A.COL1 A_COL, B.COL2 B_COL FROM table1 A INNER JOIN table2 B ON A.CD1 = B.CD1 ) SET A_COL = B_COL
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く