サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
今年の「かわいい」
www.shift-the-oracle.com
DataPump / Export、Import (オプション) Top | Knowledge| DB構築| 文字列関数| 日付関数| 集計関数| SQL関数(アルファベット順) SQL(抽出・更新)| SQL*Plus| PL/SQL| Utility| Structure| スキーマ| チューニング| 用語| 参考書 DataPump expdp、impdp (コマンド・オプション) ⇒ オリジナルのエクスポート・インポート(コマンド・オプション) Datapump のエクスポート・インポートコマンドのコマンドライン・オプションは、パラメータファイルに記述してある内容より優先順位が高いため、設定の上書きが可能。 例) impdp "hoge"/"hogepass" parfile='opt.par' sqlfile=dryrun.sql userid は 二重引用符(") で囲い、フ
TRIM 関数の内容 文字列 string 中の左右(前後)の双方から文字を探索し削除したい文字 trim_char に該当する場合に、その文字を削除(サプレス)していく。 TRIM( string ) の構文でサプレスされる文字は半角のスペース(' ') に固定される。 文字列がすべてサプレスされたしまったときは NULL 値 になる。 TRIM ( string ) 形式の使用例 見やすくするために半角スペースを('_')、全角スペースを('△') にしている。 SQL> select str, TRIM(str) from trim_sample; STR TRIM(STR) -------------------------- -------------------------------- ___あいう___
フェッチ・アクロス・コミット (fetch across commit) 処理 フェッチ・アクロス・コミットとは SELECT カーソルのループ内において、トランザクションを発生させて COMMIT 処理 しているもの。 ロールバックセグメントの設計(個数・サイズ)によっては ORA-01555: スナップショットが古すぎます: ロールバック・セグメント番号string、名前"string"が小さすぎます。 のエラーが発生する。このエラーは、色々な現場でよく話題になる。(自動UNDO管理 に移行が望ましい) 注意 フェッチ・アクロス・コミットでは、(COMMIT で ロックは解放されるため) SELECT 〜 FOR UPDATE を カーソル にしたフェッチ・アクロス・コミットは使用できない。そのため WHERE CURRENT OF による更新もできない。SELECT 〜 FOR UP
ALTER TABLE <ログ記録属性> Top | Knowledge| DB構築| 文字列関数| 日付関数| 集計関数| SQL関数(アルファベット順) SQL(抽出・更新)| SQL*Plus| PL/SQL| Utility| Structure| スキーマ| チューニング| 用語| 参考書 ALTER TABLE <ログ記録属性> の設定変更 ALTER TABLE <alter_table_properties> <logging_attribute> ALTER TABLE 〜 LOGGING 表のロギング属性を ON にする。 ロギングを ON にすることでオブジェクトの作成および変更、レコードの挿入および 移動(≠ update) 時に REDO ログ情報 を記録するようになる。 my_table の REDO ログ記録を ON に変更する。 ALTER TABLE my
WITH 句 / 共通テーブル式 (Common Table Expression : SQL-99) WITH 句は、副問い合わせに名前を付ける句である。この名前を付けられた副問い合わせは、「インラインビュー」 または 「一時表」として使用される。 同じインラインビューを何度も SQL の中に記述するよりも WITH 句で問い合わせに名前付けを行なうことで視認性が高まり、場合によりパフォーマンスが向上する可能性がある。 特に WITH では一時表を作ることがあるという特殊性(※)から実行計画に Merge Join Cartesian(直積)が出てビックリすることがあるかもしれない。 しかし、これは「大きな表と小さな表の結合」+「大きな表と別な小さな表の結合」の検索処理より 「小さな表同士の直積結合」+「直積した表と大きな表の結合」を選択した方が高速であるとオプティマイザが算出した結果な
NULL 値の検索 IS NULL 比較演算子 NULL 値は WHERE colname = NULL のような条件では NULL のレコードを抽出することはできない。
KILL SESSION or DISCONNECT SESSION Top | Knowledge| DB構築| 文字列関数| 日付関数| 集計関数| SQL関数(アルファベット順) SQL(抽出・更新)| SQL*Plus| PL/SQL| Utility| Structure| スキーマ| チューニング| 用語| 参考書 ALTER SYSTEM KILL SESSION と DISCONNECT SESSION Oracle 11g でようやくマニュアルに書かれている仕様なりつつある? ALTER SYSTEM KILL SESSION と ALTER SYSTEM DISCONNECT SESSION コマンド ALTER SYSTEM KILL SESSION Oracle 10g までの構文 ALTER SYSTEM KILL SESSION 'sid,serialNo' [
Oracle 8、8i、9i、10g の違い Top | Knowledge| DB構築| 文字列関数| 日付関数| 集計関数| SQL関数(アルファベット順) SQL(抽出・更新)| SQL*Plus| PL/SQL| Utility| Structure| スキーマ| チューニング| 用語| 参考書
遅延セグメント作成 (deferred segment creation) 表を作成したときに同時に セグメント を作成せずにデータが初めて挿入されたときにセグメントを実体化(マテリアライズ)する機能である。 そして、この振る舞いが 11gR2 からデフォルトになっている。 ※ この機能はエンタープライズ版(Oracle11g R2時点) の機能であるため SE1 や SE ではデフォルト無効であるかのようにみえる。 セグメント確保が遅延されるのは ローカル管理表領域 上の ヒープ表 が対象となる。 但し、パーティション表は 11.2.0.2 からの対応となっている。 セグメントがマテリアライズ(実体)化してるか調べる テーブルの場合 USER_TABLES 系の SEGMENT_CREATED を確認する
ALTER INDEX <REBUILD> Top | Knowledge| DB構築| 文字列関数| 日付関数| 集計関数| SQL関数(アルファベット順) SQL(抽出・更新)| SQL*Plus| PL/SQL| Utility| Structure| スキーマ| チューニング| 用語| 参考書 ALTER INDEX REBUILD による索引の再構築 ALTER INDEX REBUILD 〜 コマンドは索引を完全に再作成するコマンドである。COALESCE 操作と異なり再構築によりインデックスの高さを減らすことも可能。 ALTER INDEX REBUILD ALTER INDEX my_index REBUILD [ { REVERSE | NOREVERSE } ] /* 以下順序入れ替え可能 */ [ TABLESPACE my_tablespace ] [ { NOLO
GRANT の基本構文 GRANT システム権限 TO {ユーザー名|ロール名|PUBLIC} [WITH ADMIN OPTION] GRANT オブジェクト権限 ON {オブジェクト名} TO {ユーザー名|ロール名|PUBLIC} [WITH GRANT OPTION] システム権限は、Oracle を管理するための権限でデータベース全体に対する権限。 オブジェクト権限は、テーブルなどのオブジェクト(非スキーマ 含む)に対する権限。 WITH ADMIN OPTION or WITH GRANT OPTION を付けると与えられた権限を再度別のユーザーに対して付与することができる状態になる。 ⇒ もう少し詳しく オブジェクト権限とシステム権限 テーブルに対する権限を付与する rivus というユーザーが admin というユーザーのテーブル my_table に対して SELECT、
全員の name を並び順を気にせずに連結する。 WITHIN GROUP は省略できないので意味のない 「order by null」 を指定してみた。数値を指定してもカラムの第 N 番目でソートというわけでない。 Oracle 11g R2 時点では実行計画に SORT GROUP BY があり、暗黙的に expr 昇順にソートされている。 SQL> select LISTAGG(name) WITHIN GROUP (order by null) concat_name 2 from listagg_sample; CONCAT_NAME -------------------------------------------------- あおきこばやしさとうすずきたかはしやまもと 部門毎に名前をカンマ区切りで連結する。名前の並び順は給料の高い順 SQL> select dep
ノーアーカイブログモードにするには ノーアーカイブログモードは十分に障害対策がされており、データの復元を容易に行える環境(※)以外で 使用するのはおまりお勧めできない。例えば、オペレータよるエントリ作業がある業務など。 ノーアーカイブログモード時にはオンラインでの表領域のバックアップができない。 リカバリには前回取得したコードルバックアップに戻し、一貫性のある整合性のとれたエクスポートデータを適用する 必要がある。 障害が発生時したときのデータの損失と修復作業には相当なストレスとオペレータによる再入力作業の損失が発生する。 (※) スタンバイ、クラスタ化処理が施されたハード構成、バッチ処理の再投入などで即座にリカバリできる運用環境 の場合において大量データの高速処理という目標がある場合にはアーカイブログモードは足かせになる。 ノーアーカイブログ モードへの移行 アーカイブログモードからノー
Linux OS でキャッシュをクリアする方法 (Kernel 2.6.16〜) 性能の試験をするときにファイルシステムのキャッシュによる影響を排除する。 root もしくはスーパーユーザーコマンドにて行なう。 % su root or sudo # sync # sysctl -w vm.drop_caches=1 # sysctl -w vm.drop_caches=2 # sysctl -w vm.drop_caches=3 or # echo 1 > /proc/sys/vm/drop_caches # echo 2 > /proc/sys/vm/drop_caches # echo 3 > /proc/sys/vm/drop_caches 1 … ページキャッシュのクリア 2 … ディレクトリエントリー(dentry)と inode のクリア 3 … ページキャッシュおよびディレ
lsyncd ローカルファイルによるミラーリング Top | Knowledge| DB構築| 文字列関数| 日付関数| 集計関数| SQL関数(アルファベット順) SQL(抽出・更新)| SQL*Plus| PL/SQL| Utility| Structure| スキーマ| チューニング| 用語| 参考書 lsyncd を使ったファイルのミラーリング・バックアップ lsyncd とは Live SYNCing (Mirror) Daemon の略である。≒ そこそこリアルタイムにファイルをミラーすることができるデーモンである。 設定とソフトウェアの構成次第でリモートマシンへのミラーも可能。 lsyncd を使用するには Linux の kernel 2.6.13(2005 年公開) で組み込まれた inotify が必要。 inotify とはディレクトリまたはファイルの粒度でファイルが
このような DDL CREATE TABLE SKIP_SAMPLE ( USER_ID NUMBER(5,0) NOT NULL, GENDER CHAR(1), ZIP VARCHAR2(7), AGE NUMBER(3,0), NAME VARCHAR2(100), CONSTRAINT SKIP_SAMPLE_PK PRIMARY KEY (USER_ID) ) ; CREATE INDEX SKIP_SAMPLE_IX ON SKIP_SAMPLE (GENDER, ZIP, AGE) ; ...データの投入... 統計情報を取らないとコストベースオプティマイザ(CBO) が有効に働いてくれない。 Oracle 9i 以降の場合には DBMS_STATS を使用する。 簡単な統計情報の取得例 BEGIN DBMS_STATS.GATHER_TABLE_STATS( TABNAME
デフォルト・プロファイルの初期設定値 Oracle 11g R1 以降 Oracle 11g からデフォルトでパスワードの入力ミスでアカウントがロックされたり、パスワード変更が要求されるまで期限が約 6カ月に設定されたりしているので要注意。 期限切れを迎えるとログイン時に ORA-28002: パスワードは、n日以内に期限切れになります。メッセージが出るようになる。 パスワードに関する初期値
tnsnames.ora ファイル tnsnames.ora はデータベースに接続する側(クライアント)に配備しておくファイルである。tnsname.ora ファイルと良く間違える。 その役割は「ネットサービス名」を「接続記述子」に変換して Oracle クライアントからデータベースサーバに接続することができるようにする。 データベースサーバ側に tnsnames.ora ファイルを配備することがある。 これは DBサーバにおいてプログラムやターミナルからOracle Net 経由で(自分自身または他のデータベースに)接続する=クライアントになる。 ということである。 データベースリンクなどでも参照されることがある。 UNIX で言うとホスト名からIPアドレスにローカルで変換する /etc/hosts ファイルと同じようなイメージである。 hosts ファイル ⇔ DNS (Domain
CREATE USER、ユーザーの作成 Top | Knowledge| DB構築| 文字列関数| 日付関数| 集計関数| SQL関数(アルファベット順) SQL(抽出・更新)| SQL*Plus| PL/SQL| Utility| Structure| スキーマ| チューニング| 用語| 参考書 CREATE USER によるユーザーの作成 ユーザーの作成は、CREATE USER という DDL (Data Definition Language) にて行なう。 ユーザーを作成することでスキーマも作成される。 基本的な CREATE USER の構文 説明のパート毎にリンクになっています。 CREATE USER my_name IDENTIFIED BY "my_password" [DEFAULT TABLESPACE my_tablespace] [TEMPORARY TABLE
SQLCODE と SQLERRM SQLCODE と SQLERRM の2つは特別な関数であり、デフォルトの呼び出しでは直前のエラーコードとエラーメッセージを戻す PL/SQL だけで使用できる関数である。 SQLCODE のエラーコードには正常終了も含まれているので SQL の実行などが正常に完了すると SQLCODE は 0 になる。 SQLERRM はエラーコードをパラメータにすることで該当するエラーメッセージのテンプレート(※)を戻す。 (※) エラーメッセージ内のスキーマやファイル名などの変化するフィールドが %p などの内部書式で格納されている。 SQLCODE SQLCODE は 0(※) 〜 (マイナス) -65535 までが用意されている。 それ以外にも独自の PL/SQL 例外 (User-Defined Exception) として +1 、 さらに 事前定義例外
暗黙カーソル PL/SQL において、すべての SQL は カーソル によって実行される。 パッケージ、ストアドファンクション、ストアドプロシージャ において、 カーソルを定義せずにソースコートに埋め込まれている DML(SELECT 含む) は暗黙カーソルによって実行される。 PL/SQL における暗黙カーソルの識別子は SQL である。 対称的にカーソルを定義して DML を実行している場合には 明示カーソルと呼ばれる。その場合にもカーソル識別子から以下のプロパティを参照することができる(BULK_〜を除く)。 暗黙カーソル SQL の属性値(プロパティ) ユーザー参照できる暗黙カーソルの識別子は、SQL 一つしかないため、直前に実行した SQL 文の結果の内容のみを保持する。 属性値は SQL%ROWCOUNT などのように '%' を使用して参照する。
tnsping and trcroute Top | Knowledge| DB構築| 文字列関数| 日付関数| 集計関数| SQL関数(アルファベット順) SQL(抽出・更新)| SQL*Plus| PL/SQL| Utility| Structure| スキーマ| チューニング| 用語| 参考書 Net Service ユーティリティ (tnsping と trcroute) 接続識別子での導通テスト(TNSPING) 接続識別子と接続文字列は、ホスト名と IP アドレスの関係に似ており TNS 用の ping コマンドが用意されている。 接続識別子から接続文字列を取得することも可能 tnsping をネットサービス名で使う # tnsping net_service_name [ try_count ] ......... Attempting to contact (DESCRIP
ALTER SYSTEM FLUSH ALTER SYSTEM FLUSH SHARED_POOL ALTER SYSTEM FLUSH SHARED_POOL は SGA (システム・グローバルエリア)に確保されている「共有プール(SHARED POOL)」 上のすべてのデータをフラッシュする。 共有プール 内には以下のデータがキャッシュされている。 データディクショナリ のキャッシュ SHARED SQL AREA(共有 SQL エリア) SHARED PL/SQL AREA(共有 PL/SQL エリア) ストアド・サブプログラム トリガー 但し、(正常稼動しなくなるので) まさに実行中のキャッシュは削除されない。 ALTER SYSTEM FLUSH SHARED_POOL 使用時の問題点 SQL の解析情報が消去されるため後続の SQL がすべてハード解析される。局所的に負荷のピー
TRUNC(数値) 関数の内容 数値式 number を小数第 integer 位(省略時は 0)に切り捨てた値を戻す。 切り捨てする位 integer が負の場合は小数点の左桁、つまり整数部の指定桁以下が切り捨て対象となる。 TRUNC(数値) 使用例 SQL> select num, p, TRUNC(num,p) from trunc_sample; NUM P TRUNC(NUM,P) ---------- ---------- ------------ 123.456 2 123.45 123.456 1 123.4 123.456 0 123 123.456 -1 120 123.456 -2 1
USER_TABLES を ソートして CSV 化する例 その1 組み込んである GET_CSV 表関数 を使用して、SELECT 文だけで 1カラムの CSV を取り出す。(1レコード 4000 バイト以下) set pagesize 0 set linesize 300 select * from table(unload.get_csv(q'{select * from user_tables order by table_name}')); q'{〜}' を使用すると SQL 文内に自然な形で単一引用符(')を使える ⇒ 代替引用符 USER_TABLES を ソートして CSV 化する例 その2 組み込んである GET_CSV_CLOB 表関数 を使用して、SELECT 文だけで 1カラムの CSV を取り出す。(CLOB として抽出) set pagesize 0 set li
[oracle@rivus ~]$ env HOSTNAME=rivus SHELL=/bin/bash TERM=xterm HISTSIZE=1000 NLS_LANG=American_Japan.AL32UTF8 USER=oracle ORACLE_SID=orcl MAIL=/var/spool/mail/oracle PATH=/u01/app/oracle/product/10.2.0/db_1/bin:/usr/kerberos/bin ... INPUTRC=/etc/inputrc PWD=/home/oracle EDITOR=vi LANG=ja_JP.UTF-8 SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass SHLVL=1 HOME=/home/oracle LOGNAME=oracle LESSOPEN=
ALTER TABLESPACE <DATAFILE> Top | Knowledge| DB構築| 文字列関数| 日付関数| 集計関数| SQL関数(アルファベット順) SQL(抽出・更新)| SQL*Plus| PL/SQL| Utility| Structure| スキーマ| チューニング| 用語| 参考書 ALTER TABLESPACE <DATAFILE> 以下の操作を行なうには ALTER TABLESPACE システム権限 が必要。 SYSAUX 表領域に対して変更を行なうには SYSDBA システム権限 が必要となる。 ALTER TABLESPACE ADD DATAFILE 表領域 my_tablespace に サイズ 10M の自動拡張しないデータファイルを追加する。 既にデータファイルが存在していればエラーにする。 ALTER TABLESPACE my_tab
インデックス・スキャン インデックス・ユニーク・スキャン 例) colmn_name = search_value インデックス・レンジ・スキャン 例) BETWEEN a AND b, like 'a%', < , > など ~ 参考: B-Tree インデックス インデックス・スキップ・スキャン 例) [[INDEX SKIP SCAN]]~ インデックス・フル・スキャン 高速・フル・インデックス・スキャン (CBO のみ) 例) インデックス化されたカラムのみで構成されている。 (パラレル・マルチブロック読み込み対応) もしインデックス化したカラムだけを参照(条件を含む)している SQL の場合 インデックスのデータにアクセスするだけで処理を完了することができるためテーブルにアクセスしない。 テーブル・フル・スキャン テーブルフルスキャンとは、テーブル全体をバッファ内に読み込むアクセ
DBID、データベース名を変更する方法 NEWIDユーティリティは、DBID のみ変更、データベース名のみ変更、DBID(≠ORACLE_SID) とデータベース名の変更が可能。 DBID の変更を伴う処理を行うと、過去のすべてのアーカイブログ、バックアップファイルが使用不能になる。 また、このコマンドはファイル内部の DBID, DB_NAME 情報を書き換えるものであり、ファイル名やディレクト名に含まれる <DB_NAME>を変更するものではない。 テスト環境もしくは複製直後の環境であり十分な回復知識がある場合にのみ利用し、稼動状態にあるデータベースへの利用はお勧めできない。 リカバリ、クラッシュ・リカバリ が必要な状態で実行すると、かなり危険(未検証) (移行に失敗すると完全に修復不可能になることがあり、本番環境で実行する必要がある場合には、Oracle のサポートのうえで実行する)
次のページ
このページを最初にブックマークしてみませんか?
『SHIFT the Oracle - Oracle DBA, Oracle SQL and PL/SQL Tips』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く