Oracle DB 基本文法 sqlplus
前提
sqlplusがインストールされている、Oracleクライアント、もしくはOracleサーバーで作業するものとする。
※OracleサーバにEM(Enterprise Manager)がインストールされている場合、GUI操作できるのでそちらを使った方が楽。
EMの接続:
https://サーバー名:1158/em
ユーザー名とパスワードを入力してDBに接続する。
右下の方に「SQLワークシート」のリンクがあるので、それを開く。(Oracle11gの場合)
ブラウザで直接SQLコマンドを入力でき、結果も画面上で確認できる。
SQLPLUSの操作
以下は基本的にコマンドラインでの操作を前提とする。
データベースへの接続
$ sqlplus ユーザー名/パスワード@サーバー名:ポート/インスタンス名
※「/パスワード」を省略した場合、接続時にパスワードを聞かれる。
※サーバー上で実行する場合、サーバー名、ポート名は省略できる。
※サーバー上で実行する場合、インスタンス名は事前に、「set ORACLE_SID=インスタンス名」
を宣言することで省略できる。
※SYSDBA(管理者)でつなぐときは「ユーザー名/パスワード as SYSDBA」
そのあとの文とのつなぎはよくわかんない。
※sqlplusの起動文は結構パターンがあって把握しきれいていない。嘘書いてたらごめんなさい。
間違ってたらエラーコードORA-xxxxxが出るので、それでググれば割と解決する。(他人任せ)
ORACLE DBの構造
インスタンス
メモリ上に展開されて、コマンド実行を直接受け付けるところ。
DBのフロントエンドみたいなイメージ。
ORACLE_SID=で指定するのがインスタンス。
データベース
実際にディスク上に実体があるのがデータベース。
インスタンスはデータベースを「マウント」し、
ユーザーはインスタンス経由でデータベースにアクセスする。
シンプルなシステムでは1つのインスタンスと1つのデータベースを用いる。
インスタンス名とデータベース名は同じになっていることが多い。
複数のインスタンスが1つのデータベースをマウントすることもできる。
インスタンスの冗長化になる。
インスタンス一覧の取得
select * from v$instance;
テーブル一覧の取得
--テーブル名だけでいいとき select table_name from user_tables; --細かい情報も欲しい時 select * from user_table;
コマンド
基本的にMySQLと変わらないんだけど、違うところを書いてく。
上位X行を表示
limit とか top が使えないので、副問い合わせで表示する。
select * from (select * from テーブル名 order by ソートするカラム asc) where ROWNUM <= 10;
↑カラムを昇順に並べ替え、上の10レコード(ROWNUM=行番号が10以下のもの)を表示。
コマンド表示幅の変更
デフォルトでは幅が狭く、改行で見にくい時は広げる。
set linesize 240
※linesizeはlineに省略可能。
現在のlinesizeの確認
show linesize
各カラムの表示幅変更
column カラム名 format a20;
20のところが幅。任意に変える。
テーブルのカラム定義の確認
--簡易 desc テーブル名 --詳細 select COLUMN_NAME, DATA_TYPE, DATA_LENGTH, NULLABLE from ALL_TAB_COLUMN where TABLE_NAME='テーブル名' order by COLUMN_ID ASC;
別ユーザーのテーブルは参照できない。
テーブルのオーナー(スキーマ)がだれか調べる
select table_name, owner from dba_tables;
別ユーザーのテーブルを参照する場合はスキーマを指定する。
select * from スキーマ名.テーブル名;
セッション内でデフォルトのスキーマを変更することも可能。
alter session set current_schema = スキーマ名;
ビュー定義の確認
select * from USER_VIEWS where VIEW_NAME='ビュー名';
権限
GRANTコマンドで変える(あとで書く)
確認は、
select * from dba_sys_privs where grantee = 'ユーザー名';