崖っぷちの男

たぶん技術っぽいネタ。ブログ名が決められない

MySQL とか Postgres くらいしか普段触らない人が Oracle と格闘した

Oracle のデータベースを触る動機はまあ色々あると思うんだけど、自分の場合は運用ができるようになりたい、みたいに Oracle がメインな訳ではないです。Oracle を使うシステムがあって、その環境を再現するために Oracle を動かしてみよう、というのが動機。

でもっというと、SQL の中に「from hogehoge@fugafuga」みたいな部分があって、これは MySQL とかでは代用できないだろう、ってことで Oracle をやってみた。

まだまだ分からないことだらけだけど、今のところ分かったことをメモ。

  • 最新のバージョンは 11g。g はグリッドコンピューティングらしい。11i とか 11b とかある訳ではなくて 11 は 11g だけ。
  • Windows にだけ Express Edition (XE と表記される) というバージョンがあって、色々な制限があるけど無料。ちなみに Enterprise、Standard、Personal あたりは有料だけど期限付きの体験版あり。GUI で色々できるのは XE 以外のやつだと思うけど、期限があるのは困るので XE でがんばることを選択。
  • XE はデータベース 1 つしか使えないよ、的なことが書いてある気がするけど、コマンドラインとかでがんばったら増やせる。
  • イメージ的には 1 つのサービスに 1 つのデータベースって感じ。MySQL みたいに気軽に CREATE DATABASE とかできない。
  • データベースを作るためには、フォルダを用意したり、Windows の場合はサービスを追加したり、設定ファイルを書いたり色んな準備が必要。ただ結構色んなサイトにやり方が載ってる。こことか Oracle XE - Global Wiki
  • Oracle のバージョンによってフォルダ構成が違うっぽい。解説サイトとかの oradata フォルダと自分のやつがずれてたりするので、oradata フォルダのパスに要注意。
  • デフォルトのデータベースは XE って名前。サービスも同名。
  • sqlplus ってやつが mysql クライアントとかと同じような感じだけど、Oracle インスタンスとデータベースインスタンスはまた別で sqlplus の中でデータベースをマウントしたりシャットダウンしたりする。
  • 環境変数ORACLE_SID は大事 (デフォは XE)。SID とデータベース名とサービス名は全部一緒にすると思っておけばよさげ。
  • ユーザは一番偉いのが SYS で 次が SYSTEM。各ユーザのパスワードのデフォルトがある。system のパスワードは manager とか。
  • sqlplus 内で接続するときは conn ユーザ名/パスワードみたいな感じ。ローカルだと conn / as SYSDBA でユーザ名もパスワードもなんもなくても一番偉いので接続できる。
  • sqlplus でエラーメッセージが文字化けする。set NLS_LANG=american でうまくいくとかいかないとか。
  • データベースにテーブルが入っているんじゃなくてデータベースにテーブルスペースってのがあってその中にテーブルがある
  • ユーザを作る前にユーザ用のテーブルスペースを作る必要あり。
  • テーブルスペースは 1つ〜複数の .DBF ファイルを使う。このファイルのサイズとか、いっぱいになった時にどれくらい増えるか、増やせるかとかの設定ができて、適当にやるとはまる。今回の自分のようにちょっと再現するだけなら無制限でいい気がする。
  • sqlplus でイベントログがどうの、ってエラーがでたら Windows の管理ツールのイベントでアプリケーションログをクリアする。
  • catalog.sql と catproc.sql はまあまあ時間がかかる。 pupbld の方はやらないと普通のユーザでログインした時にメッセージが出てうっとうしいけど、開発でローカルでいじるだけなら実行しない方がよさげ。sqlplus でのログインに制限を追加するようなので
  • Access からアクセスする前に Windows の管理ツールのデータソース (ODBC) で登録。
  • 「from hogehoge@fugafuga」みたいなやつはデータベースリンクという。
  • コマンドラインの oradim で Windows サービス作ったり起動したり。他にコマンドラインで重要なのは lsnrctl っていうリスナーの管理っぽいやつ。
  • NLS_LENGTH_SEMANTICS ってやつがデフォルトで BYTE になっているけど CHAR にしといた方がいいかも。文字列をバイトと文字数どちらでカウントするかで、Access からテーブルをエクスポートする時文字列の長さがバイト単位のカラムが作られてしまってはまった。
  • MySQL Workbench とか pgAdmin とかと同じイメージのやつが SQL Developer。Oracle から XE とは別に落としてくる。メモリが足りなくてVMが起動しなかったりしたのでそうなったら設定ファイルを確認。


おそらく詳しい人からしたらつっこみ所多数と思われる。手取り足取り金取らないで教えてほしいなあ。。