てみブログ

てみブログ

個人的な覚書用です

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 = 'ユーザー名';