以前書いたOracleの想定テーブルサイズ計算SQLが翔泳社のDMマガジン6月号に載りました。およそ1ページも使って(もっとも3分の2はSQLリストだけど)。
ありがたいことです。
以前書いたOracleの想定テーブルサイズ計算SQLが翔泳社のDMマガジン6月号に載りました。およそ1ページも使って(もっとも3分の2はSQLリストだけど)。
ありがたいことです。
いまさらながら、Oracle8iの8.1.6をインストールする必要ができた。
構成はPentium4のWindows Server 2003R1に、VMware Serverをインストールして、仮想マシンにWindows NT 4.0 Serverを構築。Oracleをインストールしようとすると、Universal Installerが起動しない。
構成をXeon、VMware ESX Server、Windows NT 4.0 Serverにしても同じ。ちなみに8.1.7はインストールできる。
いろいろ調べてみた結果、OracleのインストールCDにPentium4(以降)に対応していないDLLが含まれているみたい。で、以下の手順でインストールできた。
古いバージョンを使うと、いろいろめんどくさいね。
オラクルでデータの検索には欠かせない索引機能には、通常の昇順(1、2、3とかA、B、C)索引以外にも、降順(9、8、7とかZ、Y、X)索引も作れる。でも、期待した動作と違ったり、ちょっと癖があるので、ここで自己満足的にまとめてみた。
スキルアップ講座『Oracle9i 物理設計』を斜め読みして、既存のテーブルから想定レコード件数のサイズを求めるSQLを書いてみた。
引数にスキーマ名、テーブル名、想定レコード件数を指定して実行すると、指定したテーブルのインデックスサイズを計算する。もっとも、求まる値はぎちぎちにレコードが詰まった状態なので、マージンやエクステント分は状況に応じて加えて欲しい。
また以前公開した想定テーブルサイズ計算SQLもちょっと直した。計算結果は変わらないけど。
OracleのLONGは最大2GBものデータを格納するデータ型。それをSQL*Plusで表示したら大変なことになってしまうので、初期値として先頭80バイトまでしか表示しないようになっている。でもこれではデータディクショナリなどで、必要な情報を表示しきれないことがある。
これをSQL*Plusで“SET LONG 200”とすれば、200バイトまで表示する。この時、80バイトで折り返されてしまうのでさらに、“SET LONGCHUNKSIZE 200”とすれば一行に表示される。
LONGがデータサイズ、LONGCHUNKSIZEが行サイズと覚えればいいかな。
オラクルがSQLを実行するときに、実行計画を立てる。その方式にルールベースオプティマイザ(RBO) とコストベースオプティマイザ(CBO)があるのは、周知のとおり。ルールベースならインデックスがあるというだけで利用するのに対し、コストベースでは事前に取得した統計情報を元に、使うインデックスやそもそもインデックスを使うのか検討する。
どちらも人の目から見ると、使ってほしいインデックスを無視することがある。そんなときはSQLにヒント句をもぐり込ませると、意図したインデックスを使ってくれるようになる(ヒント句にはもっといろいろな指示ができる)。
ところがSQLにヒント句を入れると、そのSQLはコストベースで動くようになる。ヒント句で指示を出したんだからルールベースになるような気がしていたので、ちょっと意外。
[過去記事 元:2004-12-09 10:11:36 一部変更]
WindowsサーバにOracleをインストールすると、サービスにOracleのプロセスを登録してくれて、特に設定しなくても自動起動するので便利だ。
しかし、Oracleのアンインストールやインスタンスの削除をしても、サービスに残されてしまうときがある。
そのときはOracle付属のoradimコマンドを使う。
インスタンスのサービスを削除するなら
oradim -delete -sid インスタンス名
とする。
[過去記事 元:2004-10-06 11:18:46]
久々にオラクルネタを。
スキルアップ講座『Oracle9i 物理設計』を斜め読みして、既存のテーブルから想定レコード件数のサイズを求めるSQLを書いてみた。
引数にスキーマ名、テーブル名、想定レコード件数を指定して実行すると、テーブルサイズを計算する。もっとも求まる値はぎちぎちにレコードが詰まった状態なので、マージンやエクステント分は状況に応じて加えて欲しい。
[過去記事 元:2004-05-26 17:50:44]
Oracleのsqlplusで"&"を含む文字列を使いたいときには、エスケープ機能を利用する。
通常"&"を使うと、入力プロンプトになってしまうが、何か任意の文字をエスケープ記号として指定することによって、そのエスケープ記号に続いて"&"を書けば文字として利用できる。
たとえば":"をエスケープ記号として使いには以下のようにする。
SQL>SET ESCAPE ':'
SQL>INSERT INTO TEST VALUES ('A:&B');
1行が作成されました。
SQL>SELECT * FROM TEST;
TEST
----------
A&B
後日談
この話はよく人に尋ねられる。
[過去記事 元:2004-02-03 11:27:01]
OracleではテーブルにMONITORING属性をつけ監視モードにすることが出来る(CREATE、ALTERどちらでも可)。
では、監視モードとは何だろうか。