SlideShare a Scribd company logo
1 of 46
Download to read offline
JPOUG> SET EVENTS 20140907 
2014/09/07 吉川 和宏
自己紹介 
• Twitter:@yoshikaw 
• Web技術を用いたシステムの開発や運用に携わっています。 
• 近年は主にOracle Databaseを用いたシステムの運用をしています。 
• 扱うOSはLinux(RHEL)が多く、商用UNIXの知識はありません。 
• ほとんどの作業をCUIで行うため、多少こだわりがあります。 
• ツールをカスタマイズして使いこなせるようになることが好きです。 
• 個人的に「三種の神器」としているVim、Zsh、GNU Screenに 
ついては、よりよい設定を探す毎日です。 
2
本日お伝えしたいこと 
• SQL*Plusを使いやすくする 
• プロンプトを豊かに 
• SQLバッファの操作 
• リファレンスを手軽に 
• シェルの機能を使いこなす 
• SQL*Plusをrlwrapで強化する 
• おまけ:CUI三種の神器 
3 
セッションでお話しできなかったので、 
資料からはこの部分は省略しています。
SQL*Plusを使いやすくする 
4
SQL*Plusを使いやすくする 
• Oracle Databaseの運用にはSQL*Plusが欠かせません。 
• え?今どきDB管理にはEnterprise Manager使うのが普通でしょ? 
• そんなことありません。自分のまわりではシングルインスタンスでも 
Database Controlすら使っていないところがほとんどです。 
• 「Grid Control?なにそれうまいの?」「」 
• でもちょっとCUIでの作業は初期設定では使い辛いですよね。 
• 設定をカスタマイズしたり、ツールの力を借りて使いやすくする方法 
を紹介します。 
5
SQL*Plusを使いやすくする〜プロファイル 
• SQL*Plusの構成は、プロファイルと呼ばれる2種類のOSファイルで 
設定できます。 
• サイト・プロファイル(サーバー全体) 
$ORACLE_HOME/sqlplus/admin/glogin.sql 
• ユーザー・プロファイル(ユーザー個別) 
$PWD/login.sql または $SQLPATH/login.sql 
• ユーザー・プロファイルに記述したSQLコマンド、PL/SQLブロック 
またはSQL*PlusコマンドがSQL*Plus起動時に実行されます。 
• SQLPATH環境変数は、SQL*Plusセッション中に@で起動するスク 
リプトを参照する際のパスとしても利用されますので、よく使用する 
コマンドをまとめたファイルの設置場所を設定しておくと便利です。 
6
SQL*Plusを使いやすくする〜プロンプトを豊かに(1) 
• 初期状態だと、あまりにも情報が少なすぎて寂しいと思いませんか? 
! 
! 
• シンプルで良いのですが、個人的にはシェルのプロンプトと同様、意 
味のある情報を含めるべきだと思っています。 
• ちなみにThe Tom Kyte Blogで紹介されているコードでは次のよう 
になっています。 
! 
• 必要最小限の情報がまとまっていて、いいですね。でももう一声! 
7 
$ sqlplus scott/tiger 
SQL> 
ops$tkyte%ORA12CR1>
SQL*Plusを使いやすくする〜プロンプトを豊かに(2) 
• プロンプトはSETシステム変数SQLPROMPTで定義します。 
• 任意の文字列を指定できますが、いくつか事前定義変数が使えます。 
_CONNECT_IDENTIFIER 接続文字列9i R2~ 
! 
_DATE 現在の日付10g~ 
! 
_USER 現行のユーザ10g~ 
! 
_PRIVILEGE ユーザの権限レベル10g~ 
! 
SQL> SET SQLPROMPT ”_DATE _USER’@‘_CONNECT_IDENTIFIER 
PRIVILEGE> ! 
“ (実際は一行です) 
! 
07-SEP-14 SCOTT@orcl> conn / as sysdba 
Conencted. 
07-SEP-14 SYS@orcl AS SYSDBA> 
! 
• 設定例 
8
SQL*Plusを使いやすくする〜プロンプトを豊かに(3) 
• プロンプトに表示される日付について 
• _DATE事前定義変数の日付書式はNLS_DATE_FORMAT環境変数 
で指定した値が使用されます。 
• その値はSQL*Plusセッションで実行するコマンドにも影響を及ぼ 
すため、プロンプトの為だけに設定する場合は注意が必要です。 
• 時刻を表示するためにSETシステム変数TIMEを使うのも手です。 
9 
07-SEP-14 SCOTT@orcl> set time on 
! 
13:55:00 07-SEP-14 SCOTT@orcl>
SQL*Plusを使いやすくする〜プロンプトを豊かに(4) 
• 事前定義変数以外の情報(接続先のノード名やサービス名など)を表 
示したい場合は、任意のSQLで取得して設定します。 
接続先の権限によっては参照できない場合もあるので、あまり凝った 
ものは止めた方が無難です。 
! 
! 
! 
• 明文化されていませんがSQLPROMPT変数に設定できる文字数は50 
文字のようなので、あまり欲張らない方が良いみたいです。 
SQL> SET SQLPROMPT 
"12345678901234567890123456789012345678901234567890>" 
string beginning ""123456789..." is too long. maximum 
size is 50 characters. 
10 
SQL> COLUMN h NEW_VALUE v1 
SQL> COLUMN s NEW_VALUE v2 
SQL> SELECT ... AS h FROM V$INSTANCE; 
SQL> SELECT ... AS s FROM V$SESSION; 
SQL> SET SQLPROMPT "&v1&v2 _USER _PRIVILEGE'>' " 
[node1]orcl/srv1 SYS AS SYSDBA>
SQL*Plusを使いやすくする〜SQLバッファの操作(1) 
• SQL*Plusで入力したSQLコマンド、PL/SQLブロックはSQLバッファ 
に格納されます。 
• このSQLバッファの操作コマンドを覚えておくと、ちょっとした作業 
が楽になります。 
11 
SQL> l 
1* select ename from emp; 
SQL> / 
! 
ENAME 
---------- 
JONES 
... 
! 
SQL> a where job = ‘MANAGER’ 
1* select ename from emp where job = 'MANAGER' 
SQL> /
SQL*Plusを使いやすくする〜SQLバッファの操作(2) 
• SQLバッファを表示、再実行するコマンド 
12 
コマンド略称用途 
list l または ; SQLバッファの全ての行を表示 
list n l n または n 行nを表示 
list * l * カレント行を表示 
list n * l n * 行nからカレント行まで表示 
list LAST l l 最終行を表示 
list m n l m n 行m~行nまで表示 
list * n l * n カレント行から行nまで表示 
run r または / 
SQLコマンドの再実行 
/はSQLバッファを表示せずに実行
SQL*Plusを使いやすくする〜SQLバッファの操作(3) 
• SQLバッファを編集するコマンド 
13 
コマンド略称用途 
append text a text カレント行の末尾にテキストを追加 
change/old/new c/old/new カレント行のoldをnewに変更 
change/text c/text textをカレント行から削除 
input i 一つ以上の行を追加 
input text i text textを追加 
del または del * (なし) カレント行を削除 
del n * (なし) 行nからカレント行まで削除 
del LAST (なし) カレント行から行nまで削除 
del m n (なし) 行m~行nまで削除 
del * n (なし) カレント行から行nまで削除 
del n (なし) 行nを削除 
clear buffer cl buff 全ての行を消去
SQL*Plusを使いやすくする〜SQLバッファの操作(4) 
• SQLバッファの編集は基本的に行単位です。 
正直、今どきedのような行指向の編集は覚えたくありません。 
• _EDITOR事前定義変数を設定すると、EDITコマンドでSQLバッファ 
を使い慣れたエディタで編集できます。 
• SQLバッファの内容が出力された一時ファイルを指定してエディタが 
起動します。 
編集を終えてエディタを終了すると、SQLバッファに反映されますの 
でrunなどで実行できます。 
• エディタの設定によりますが、シンタックスハイライトなどを考慮す 
ると、一時ファイル名の拡張子をsqlにしておくと便利です。 
14 
SQL> define _editor=vim 
SQL> set editfile afiedt.sql 
SQL> edit 
Wrote file afiedt.sql
シェルの機能を使いこなす 
15
シェルの機能を使いこなす 
• Oracle Databaseに限らず管理作業などでサーバにログインする場合 
には、シェルに対してコマンドラインを入力します。 
• シェルはコマンドラインを入力したとおりに実行してくれますが、 
シェルの機能を知っていると、その入力が楽になります。 
• ここではLinuxやOracle SolarisなどのOSでデフォルトの対話式シェ 
ルとなっているBourne-Againシェル(bash)のいくつかの機能を紹 
介したいと思います。 
• カーソル移動、テキストの削除、コマンドの繰り返し、コマンド 
ヒストリの参照 
• コマンドラインの再利用、コマンドラインの編集、パラメータ展 
開、ブレース展開、その他 
16
シェルの機能を使いこなす〜カーソル移動(1)〜 
• bashのデフォルトではemacsの基本的なコマンドが使えます。 
17 
キー動作 
C-a カーソルを行の先頭に移動(beginning-of-line) 
C-e カーソルを行の末尾に移動(end-of-line) 
C-f カーソルを1文字順方向(右)に移動(forward-char) 
C-b カーソルを1文字逆方向(左)に移動(backward-char) 
M-f カーソルを1単語順方向(右)に移動(forward-word) 
M-b カーソルを1単語逆方句(左)に移動(backward-word) 
※以降の説明では、C-a は Control-a 、M-f は ESC-f の略記 
M-b M-f 
! 
! 
C-a C-e 
! 
$ cd $ORACLE_HOME/network/w 
admin 
! 
C-b C-f
シェルの機能を使いこなす〜カーソル移動(2)〜 
• 文字を検索してカーソルを移動することも出来ます。 
(viのコマンドモードにおけるF、fと同じ) 
18 
キー動作 
C-] 
入力文字が次に現れる場所にカーソルを移動(viのF) 
(character-search) 
M-] 
入力文字が前に現れる場所にカーソルを移動(viのf) 
(character-search-backword) 
M-] n C-] / 
! 
! 
! 
$ cd $ORACLE_HOME/network/admin 
! 
M-] c C-] n 
w 
M-] t C-] o
シェルの機能を使いこなす〜テキストの削除(1)〜 
19 
キー動作 
C-d カーソル位置の文字を削除(delete-char) 
C-h 
DEL カーソル位置の左の文字を削除(Rubout) 
M- 
カーソル前後の空白とタブを全て削除 
(delete-horizontal-space) 
$ sqlplus scottt/tiger 
$ sqlplus scott/tiger 
! 
$ sqlplus scottt/tiger 
$ sqlplus scott/tiger 
! 
$ sqlplus / as sysdba 
$ sqlplus /as sysdba 
t 
/ C-d 
t 
C-h 
t 
a M-
シェルの機能を使いこなす〜テキストの削除(2)〜 
• 次の削除コマンドはいわゆる切り取り(キル)として動作しますので、 
キルした文字列を貼り付け(ヤンク)できます。 
C-u は入力したコマンドラインを取り消す目的でよく使います。 
キー動作 
C-k カーソル位置から行末までを削除(kill-line) 
C-u カーソル位置から行頭までを削除(unix-line-discard) 
C-w カーソル位置から前の単語を削除(unix-word-rubout) 
C-y 最後にkill操作した文字列を取り出し(yank) 
$ sqlplus scott/tiger 
$ sqlplus 
$ 
! 
$ sqlplus scott/tiger 
$ sqlplus 
$ sqlplus scott/tiger 
20 
s 
C-k 
C-u 
C-w 
  
C-y
シェルの機能を使いこなす〜コマンドの繰り返し〜 
• 繰り返す数を指定してコマンドを実行できます。 
! 
! 
M-b M-b M-b 
! 
! 
! 
$ sqlplus scott/tiger@orcl 
! 
キー動作 
M-0 
M-1 
… 
指定した数繰り返す(digit-argument) 
! 
• C-hの文字削除コマンドを繰り返し実行する場合、切り取りることが 
できます。 
M-3 M-b 
21 
$ sqlplus scott/tiger@orcl 
$ sqlplus scott/tiger@ 
$ sqlplus scott/tiger@orcl 
M-4 C-h 
C-y
シェルの機能を使いこなす〜コマンドヒストリの参照〜 
• 過去に実行したコマンドラインをもう一度実行する場合や、引数など 
を少し変更して実行する場合に使います。 
22 
キー動作 
C-p 
↑ ヒストリの前の行を取り出す(previous-history) 
C-n 
↓ ヒストリの次の行を取り出す(next-history) 
C-r 
ヒストリの後方の履歴を遡ってインクリメンタル検索 
(reverse-search-history) 
C-s 
ヒストリの前方の履歴を遡ってインクリメンタル検索 
(forward-search-history) 
C-g インクリメンタル検索の中止(keyboard-quit) 
$ 
(reverse-i-search)`’: 
C-r plus 
(reverse-i-search)`plus’: sqlplus p 
scott/tiger
シェルの機能を使いこなす〜コマンドラインの再利用(1)〜 
• 最後に実行したコマンドラインを再利用することで、入力作業の軽 
減、打ち間違いを減らせます。 
23 
キー動作 
!! 最後のコマンドラインを実行 
!$ 最後のコマンドラインの最後の引数 
$ tail -f /path/to/log.file 
… 
^C 
$ !! 
tail -f /path/to/log.file 
… 
! 
$ ls -l /some/long/path/name/you/only/type/once/* 
$ rm -f !$ 
rm -f /some/long/path/name/you/only/type/once/* 
ワイルドカード展開後の 
ファイルを確認してから 
削除を実行する
シェルの機能を使いこなす〜コマンドラインの再利用(2)〜 
• コマンドラインをsedのように置換できます。 
置き換える文字列を間違えないように注意しましょう。 
キー動作 
^old^new 最後のコマンドラインの最初のoldをnewに置換して実行 
!!:gs/old/new 最後のコマンドラインの全てのoldをnewに置換して実行 
$ grep Warning /path/to/log.file 
… 
$ ^Warning^Error 
grep Error /path/to/log.file 
… 
! 
$ scp -p node1:/rdbms/orcl/node1/trace/alert_node1.log . 
… 
$ !!:gs/node1/node2 
scp -p node2:/rdbms/orcl/node2/trace/alert_node2.log . 
… 
24
シェルの機能を使いこなす〜コマンドラインの編集〜 
• ヒストリからのコマンドラインの再実行や文字列の置換で事足りない 
場合、fcコマンドでコマンドラインをエディタで編集できます。 
• FCEDIT環境変数またはEDITOR環境変数に指定されているエディタ、 
指定がなければviが起動します。 
• エディタでの編集終了後、コマンドラインとして直ぐに実行されます 
ので複数行に渡って編集している場合は注意が必要です。 
(少し使いづらい) 
25 
キー動作 
fc 最後のコマンドラインを編集 
fc -l コマンドラインをヒストリ番号とともに一覧表示 
fc first last 
コマンドラインのヒストリ番号firstからlastまでの 
コマンドラインを編集 
fc word wordが含まれる最後のコマンドラインを編集
シェルの機能を使いこなす〜パラメータ展開(1)〜 
• 変数の置換演算子を使うことで初期値の設定やエラーチェックなどが 
出来ます。主にシェルスクリプトで使用します。 
演算子動作 
${var:-word} ${var}が定義されていない場合、wordを返す 
${var:=word} ${var}が定義されていない場合、wordを設定して返す 
${var:?message} 
${var}が定義されていない場合、messageを 
表示してエラー終了 
${var:+word} 
${var}の定義されていてNULLではない場合wordを返 
す 
$ echo ${var:-default_value} 
default_value 
$ var=‘JPOUG> SET EVENTS’ 
$ echo ${var:=word} 
JPOUG> SET EVENTS 
$ echo ${var2:?’error!’} 
bash: var2: error! 
$ echo ${var:+1} 
1 
! 
26
シェルの機能を使いこなす〜パラメータ展開(2)〜 
• 変数のオフセットの指定やパターン照合を使うことで、値の部分的な 
取得が出来ます。こちらもシェルスクリプトでよく使います。 
演算子動作 
${var:offset} 
${var:offset:length} 
${var}の値のoffsetの位置から(lengthの長さ)の部 
分文字列を表示 
${#var} ${var}の文字列の長さ 
${var#pattern} 
${var##pattern} 
${var}の先頭からpatternの最短マッチ(#)、 
最長マッチ(##)部分を削除して残りを返す 
${var%pattern} 
${var%%pattern} 
${var}の末尾からpatternの最短マッチ(%)、 
最長マッチ(%%)部分を削除して残りを返す 
$ var=‘JPOUG> SET EVENTS’ 
$ echo ${var:5} 
> SET EVENTS 
$ echo ${var:7:3} 
SET 
$ echo ${#var} 
17 
$ echo ${var#*> } 
SET EVENTS 
$ echo ${var##* } 
EVENTS 
$ echo ${var% *} 
JPOUG> SET 
$ echo ${var%% *} 
JPOUG> 
27
シェルの機能を使いこなす〜パラメータ展開(3)〜 
演算子動作 
${var/pattern/string} 
${var//pattern/string} 
${var}の先頭からpatternにマッチする文字を 
stringに置換(/)。全てのマッチする文字を置換(//) 
$ echo $PWD 
/u01/app/oracle/diag/rdbms/orcl/orcl 
! 
$ echo ${PWD/orcl} 
/u01/app/oracle/diag/rdbms//orcl 
! 
$ echo ${PWD///orcl} 
/u01/app/oracle/diag/rdbms 
28
シェルの機能を使いこなす〜ブレース展開〜 
• シェルのブレース展開 {} を使うと任意の文字列を生成できます。 
• ブレース内にカンマ区切りで文字列を指定することで、ブレース前後 
の文字列と、ブレース内文字列を展開した文字列が生成されます。 
• cpコマンドによるファイルのバックアップや、同じ階層に複数のディ 
レクトリを作成する際によく使います。 
$ cp -pv some_script.sh{,.20140907} 
`some_script.sh' -> `some_script.sh.2014007’ 
! 
$ mkdir -pv path/to/dir/{adump,dpdump,pfile} 
mkdir: created directory `path/to/dir' 
mkdir: created directory `path/to/dir/adump' 
mkdir: created directory `path/to/dir/dpdump' 
mkdir: created directory `path/to/dir/pfile’ 
! 
$ tkprof orcl_ora_xxxx_*.trc{,.txt} aggregate=no … 
29
シェルの機能を使いこなす〜その他の展開〜 
• チルダ展開 
チルダ(~)で単語が始まった場合はチルダプレフィックスと解釈さ 
れてログイン名になる可能性がある文字列として扱われます。 
最近はあまり見かけませんが、個人ホームページのURLで目にしたこ 
ともありました。( http://example.com/~loginname/ ) 
• コマンド置換 
コマンドの実行結果を変数に取り込みたい場合などに使います。 
オリジナルのshでは `` 形式ですが、bashで使える$() 形式の場合は 
入れ子構造が取れますのでオススメです。 
$ echo `ls` 
$ echo $(echo $(ls)) 
30 
$ ls -1d ~oracle ~mysql 
/home/oracle 
/var/lib/mysql
シェルの機能を使いこなす〜手軽なディレクトリ移動〜 
• cdコマンドでディレクトリを移動した場合には、以前の作業ディレク 
トリ($PWD)が$OLDPWDとして記録されます。 
• ディレクトリの移動履歴はpushd、popdなどのコマンドでスタック 
として記録できますが、一つ前のディレクトリとの間を行ったり来た 
りする場合には - を使うと便利です。 
$ cd /u01/app/oracle/diag/rdbms/orcl/orcl/trace 
$ cd /some/work/path 
$ cd - 
$ pwd 
/u01/app/oracle/diag/rdbms/orcl/orcl/trace 
$ cd - 
$ pwd 
/some/work/path 
31
SQL*Plusを使いやすくする 
32 
rlwrapによる強化
SQL*Plusを使いやすくする〜rlwrapによる強化(1) 
• SQLを打ち間違えたりしたとき、ついシェルのヒストリを参照する感 
覚でCtrl-Pを押して悲しい思いをすることありませんか? 
! 
! 
! 
• PostgreSQLやMySQLのフロントエンドでは当たり前のように出来 
る、入力履歴を参照できたりするあの機能がないとイラッとします。 
• ライセンスの都合かも知れませんが、SQL*Plusでこの機能が使える 
日は来ない気がするので、rlwrapの力を借ります。 
33 
SQL> SELECT * FROM TABS WHERE TABLENAME LIKE ...; 
! 
ERROR at line 1: 
ORA-00904: "TABLENAME": invalid identifier 
! 
SQL> ^P
• rlwrapとは? 
GNU Readlineによるコマンドライン入力に対応していないプログラ 
ムに、その機能を提供するラッパーです。 
• すぐ効く嬉しい機能 
• rlwrapでラップしたプログラムでは、GNU EmacsやGNU Bash、 
Kshなどでおなじみの行編集が可能になります。 
• 入力した行のうち、空行でない実行された行は全てヒストリバッ 
ファに保存され、コマンドラインの再利用が容易になります。 
• 導入 
ソースコードは公開されていますが、Linuxの場合はFedoraプロジェ 
クトのEPELリポジトリにあるrpmパッケージを使うと楽です。 
34 
SQL*Plusを使いやすくする〜rlwrapによる強化(2)
SQL*Plusを使いやすくする〜rlwrapによる強化(3) 
• 使い方 
rlwrapに続いて任意コマンドを指定します。 
よく使うコマンドの場合はエイリアスに指定しておくと便利です。 
bashの説明で紹介したカーソルの移動、テキストの削除、コマンド 
の繰り返し、コマンドヒストリの参照などが使えるようになります。 
35 
$ rlwrap sqlplus 
$ alias sqlplus=‘rlwrap sqlplus’ 
! 
$ rlwrap sqlplus scott/tiger 
… 
SQL> SELECT * FROM TABS WHERE TABLENAME LIKE ...; 
! 
ERROR at line 1: 
ORA-00904: "TABLENAME": invalid identifier 
! 
SQL> SELECT * FROM TABS WHERE TABLENAME LIKE ...; 
! 
SQL> SELECT * FROM TABS WHERE TABLENAME LIKE ...; 
! 
SQL> SELECT * FROM TABS WHERE TABLE_NAME LIKE ...; 
C-p 
M-] N 
  
N 
N 
_
SQL*Plusを使いやすくする〜rlwrapによる強化(4) 
• rlwrapは行編集やヒストリ置換以外にも便利な機能があります。 
• プロンプトに色を付ける。 
接続先や実行するコマンドで区別するなどの使い分けができます。 
ANSIエスケープシーケンスも使えます。 
36 
$ rlwrap -pRed sqlplus scott/tiger@honban_db 
SQL> show user 
! 
$ rlwrap -pMagenta rman target / 
RMAN> list backup; 
! 
$ rlwrap -p‘4;36’ asmcmd -p 
ASMCMD [+] > ls 
! 
$ rlwrap -p‘0;31;43’ adrci 
adrci> show problem
SQL*Plusを使いやすくする〜rlwrapによる強化(5) 
• ユーザー定義辞書による補完 
補完したい単語を空白区切りのテキストとして用意することで、C-t 
による任意の補完が使用できます。 
! 
• Oracle Databaseに関連したコマンドとキーワードをまとめている 
rlwrap_extというスクリプト集を使うと手軽です。カスタマイズの参 
考にもなります。 
• adrci/asmcmd/rman 
• 動的パフォーマンス・ビュー 
• 静的データ・ディクショナリ・ビュー 
• 初期化パラメータ 
37 
$ rlwrap -f user_dict.txt sqlplus scott/tiger
リファレンスを手軽に 
38
リファレンスを手軽に 
• Oracle Databaseのマニュアルはオンラインのみならず、PDFや 
ePub、Mobiなど様々な電子ファイルで提供されていて非常に充実し 
ています。 
• とくにリファレンスは各種調査に必要なビュー、ディクショナリの確 
認のためによく参照します。 
• しかし11gのマニュアルから1項目1ページのレイアウトになってしまっ 
たため、ページを行ったり来たりするのが苦痛です。 
• さらに言うと、列定義の確認のためだけにブラウザを操作するのも面 
倒です。 
• マニュアルはHTMLテキスト。だったら手元にダウンロードして手軽 
に参照できるようにしましょう。 
39
リファレンスを手軽に〜w3mを使う(1) 
• テキストブラウザw3mには整形した内容を標準出力に書き出す-dump 
オプションがあるので、これとページャを組み合わせます。 
• 10gのリファレンスはファイル数が少ないので、wgetなどでローカ 
ルにダウンロードしていたものをw3mで動的に変換する方法が使え 
ます。 
• 以下のサンプルでは、冗長な罫線をperlで取り除くため、一度EUC-JP 
に変換しています。 
$ wget http://otndnld.oracle.co.jp/document/products/oracle10g/ 
102/doc_cd/server.102/B19228-04/statviews_1.htm 
! 
$ w3m -dump "file://$PWD/statviews_1.htm"  
40 
-t 4 -S -Oe -cols $COLUMNS  
| perl -pi -e 's/^(s|xA8(xA1|xA2|xA7|xA9|xAB))+$//g'  
| lv
リファレンスを手軽に〜w3mを使う(2) 
• 11gのリファレンスは1項目1ファイルなので、加工してひとつのファ 
イルにまとめる作業が必要です。 
1. toc.htmを取得 
2. toc.htm中の各項目のリンク先ファイルを取得 
3. それぞれに対してw3m -dumpでテキスト出力 
4. それらを連結してひとつのファイルに 
$ wget http://docs.oracle.com/cd/E16338_01/server.112/ 
b56311/toc.htm 
$ grep -E '^<li>.*="(whatsnew|initparams|statviews|dynviews| 
limits|scripts|waitevents).*</a></li>' toc.htm  
| perl -pi -e 's!^.*href="([^#"]+)?.*?">([^<]+)(?:<span 
class="italic">([^<]+)?</span>)?(.*)?</a></li>!$1 $2$3$4!'  
| while read file title 
do 
# リンク先ファイルを取得、加工して最終的な出力ファイルに追記 
done 
41
リファレンスを手軽に〜ツールのご紹介(1) 
• 以前はこのようにコマンドラインで実行していましたが、毎回手間な 
のでマニュアルのダウンロードと加工を行うツールを作成しました。 
https://github.com/yoshikaw/oracle-cui-reference 
# ツールをダウンロードする 
$ wget https://raw.githubusercontent.com/yoshikaw/ 
oracle-cui-reference/master/oracle-cui-reference. 
42 
sh 
! 
# ツールを読み込む 
$ source ./oracle-cui-reference.sh 
! 
# 12.1の日本語リファレンスを取得・加工する 
$ omkdata 121 
! 
# 12.1の英語リファレンスの初期化パラメータを表示する 
$ ODOC_LANG=en oinit 121
リファレンスを手軽に〜ツールのご紹介(2) 
• このツールではリファレンスマニュアルを加工して単一のHTMLとし 
て出力しますが、それを表示のたびに行うと時間がかかりますのでテ 
キストファイルとして保存します。 
• そのため保存されたファイルの表示幅は加工するコマンドを実行した 
ときの端末の幅になります。 
! 
43
おわりに 
• 私が普段の作業で使用しているSQL*Plusやその他のCUIツールにつ 
いて、かなり偏った観点でご紹介させていただきました。 
• CUIツールはコマンドなどを覚えるまでのハードルが少し高いです 
が、 GUIツールでは出来ない細かな対応や、定型的な作業において威 
力を発揮します。 
• 今回のセッションを通して、何か一つでもヒントとなるものを得てい 
ただけたのならば幸いです。 
44
参考資料(1) 
• SQL*Plus®ユーザーズ・ガイドおよびリファレンス リリース12.1 B71396-02 
http://docs.oracle.com/cd/E49329_01/server.121/b71396/toc.htm 
• O'Reilly Japan - 入門 bash 第3版 
http://www.oreilly.co.jp/books/4873112540/ 
• O'Reilly Japan - bashクックブック 
http://www.oreilly.co.jp/books/9784873113760/ 
• rlwrap 
http://utopia.knoware.nl/~hlub/rlwrap/#rlwrap 
• Linuxification.at: rlwrap_ext 
http://www.linuxification.at/rlwrap_ext.html.en 
• SQL*Plus使い方 - bashの便利機能を組み込む(シェルスクリプトTips-6) (オラクルエンジニ 
ア通信 - 技術資料、マニュアル、セミナー) 
https://blogs.oracle.com/oracle4engineer/entry/sqlplus_-_bashtips-6 
45
参考資料(2) 
• CUIでOracle Databaseリファレンスマニュアルを参照する - Keep It Simple, Stupid 
http://yskwkzhr.blogspot.jp/2012/12/refer-to-oracle-database-reference-manual-with-cui. 
html 
• Oracle Databaseを扱う上で知っておきたい変数10選 - Keep It Simple, Stupid 
http://yskwkzhr.blogspot.jp/2013/12/10-variables-that-you-should-know-to-operate-an- 
oracle-database.html 
• サーバ管理に役立つVim技10選 - Keep It Simple, Stupid 
http://yskwkzhr.blogspot.jp/2013/12/10-vim-tips-to-help-the-server-management.html 
• GNU Screenバージョン4.2がリリースされました - Keep It Simple, Stupid 
http://yskwkzhr.blogspot.jp/2014/04/gnu-screen-v-4.2-has-released.html 
46

More Related Content

What's hot

【学習メモ#1st】12ステップで作る組込みOS自作入門
【学習メモ#1st】12ステップで作る組込みOS自作入門【学習メモ#1st】12ステップで作る組込みOS自作入門
【学習メモ#1st】12ステップで作る組込みOS自作入門sandai
 
B lack jumbodog 運転と改造のすすめ
B lack jumbodog 運転と改造のすすめB lack jumbodog 運転と改造のすすめ
B lack jumbodog 運転と改造のすすめShinichi Hirauchi
 
【学習メモ#11th】12ステップで作る組込みOS自作入門
【学習メモ#11th】12ステップで作る組込みOS自作入門 【学習メモ#11th】12ステップで作る組込みOS自作入門
【学習メモ#11th】12ステップで作る組込みOS自作入門 sandai
 
【学習メモ#3rd】12ステップで作る組込みOS自作入門
【学習メモ#3rd】12ステップで作る組込みOS自作入門【学習メモ#3rd】12ステップで作る組込みOS自作入門
【学習メモ#3rd】12ステップで作る組込みOS自作入門sandai
 
【学習メモ#9th】12ステップで作る組込みOS自作入門
【学習メモ#9th】12ステップで作る組込みOS自作入門 【学習メモ#9th】12ステップで作る組込みOS自作入門
【学習メモ#9th】12ステップで作る組込みOS自作入門 sandai
 
【学習メモ#6th】12ステップで作る組込みOS自作入門
【学習メモ#6th】12ステップで作る組込みOS自作入門 【学習メモ#6th】12ステップで作る組込みOS自作入門
【学習メモ#6th】12ステップで作る組込みOS自作入門 sandai
 
MySQL ガチBeginnerがやってみたことと反省したこと
MySQL ガチBeginnerがやってみたことと反省したことMySQL ガチBeginnerがやってみたことと反省したこと
MySQL ガチBeginnerがやってみたことと反省したことSatoshi Suzuki
 
My sql casual_in_fukuoka_vol1
My sql casual_in_fukuoka_vol1My sql casual_in_fukuoka_vol1
My sql casual_in_fukuoka_vol1Makoto Haruyama
 
カジュアルにバックアップ - MySQL Casual Talks 福岡
カジュアルにバックアップ - MySQL Casual Talks 福岡カジュアルにバックアップ - MySQL Casual Talks 福岡
カジュアルにバックアップ - MySQL Casual Talks 福岡Aya Komuro
 
位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 Tokyo
位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 Tokyo位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 Tokyo
位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 TokyoYoshiyuki Asaba
 
2012 osc北海道 セッション資料「blackjumbodog利用のすすめ」
2012 osc北海道 セッション資料「blackjumbodog利用のすすめ」2012 osc北海道 セッション資料「blackjumbodog利用のすすめ」
2012 osc北海道 セッション資料「blackjumbodog利用のすすめ」Shinichi Hirauchi
 
tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1Ryosuke IWANAGA
 
【学習メモ#8th】12ステップで作る組込みOS自作入門
【学習メモ#8th】12ステップで作る組込みOS自作入門 【学習メモ#8th】12ステップで作る組込みOS自作入門
【学習メモ#8th】12ステップで作る組込みOS自作入門 sandai
 
MySQL Casual Talks in Fukuoka vol.2
MySQL Casual Talks in Fukuoka vol.2MySQL Casual Talks in Fukuoka vol.2
MySQL Casual Talks in Fukuoka vol.2学 松崎
 
配布用Beginnerならきっと役立つmaster slave環境
配布用Beginnerならきっと役立つmaster slave環境配布用Beginnerならきっと役立つmaster slave環境
配布用Beginnerならきっと役立つmaster slave環境yut148atgmaildotcom
 
そろそろRStudioの話
そろそろRStudioの話そろそろRStudioの話
そろそろRStudioの話Kazuya Wada
 
イルカさんチームからゾウさんチームに教えたいMySQLレプリケーション
イルカさんチームからゾウさんチームに教えたいMySQLレプリケーションイルカさんチームからゾウさんチームに教えたいMySQLレプリケーション
イルカさんチームからゾウさんチームに教えたいMySQLレプリケーションyoku0825
 

What's hot (20)

Slub data structure
Slub data structureSlub data structure
Slub data structure
 
【学習メモ#1st】12ステップで作る組込みOS自作入門
【学習メモ#1st】12ステップで作る組込みOS自作入門【学習メモ#1st】12ステップで作る組込みOS自作入門
【学習メモ#1st】12ステップで作る組込みOS自作入門
 
B lack jumbodog 運転と改造のすすめ
B lack jumbodog 運転と改造のすすめB lack jumbodog 運転と改造のすすめ
B lack jumbodog 運転と改造のすすめ
 
【学習メモ#11th】12ステップで作る組込みOS自作入門
【学習メモ#11th】12ステップで作る組込みOS自作入門 【学習メモ#11th】12ステップで作る組込みOS自作入門
【学習メモ#11th】12ステップで作る組込みOS自作入門
 
【学習メモ#3rd】12ステップで作る組込みOS自作入門
【学習メモ#3rd】12ステップで作る組込みOS自作入門【学習メモ#3rd】12ステップで作る組込みOS自作入門
【学習メモ#3rd】12ステップで作る組込みOS自作入門
 
【学習メモ#9th】12ステップで作る組込みOS自作入門
【学習メモ#9th】12ステップで作る組込みOS自作入門 【学習メモ#9th】12ステップで作る組込みOS自作入門
【学習メモ#9th】12ステップで作る組込みOS自作入門
 
Slub alloc and free
Slub alloc and freeSlub alloc and free
Slub alloc and free
 
MySQL SQL tuning
MySQL SQL tuningMySQL SQL tuning
MySQL SQL tuning
 
【学習メモ#6th】12ステップで作る組込みOS自作入門
【学習メモ#6th】12ステップで作る組込みOS自作入門 【学習メモ#6th】12ステップで作る組込みOS自作入門
【学習メモ#6th】12ステップで作る組込みOS自作入門
 
MySQL ガチBeginnerがやってみたことと反省したこと
MySQL ガチBeginnerがやってみたことと反省したことMySQL ガチBeginnerがやってみたことと反省したこと
MySQL ガチBeginnerがやってみたことと反省したこと
 
My sql casual_in_fukuoka_vol1
My sql casual_in_fukuoka_vol1My sql casual_in_fukuoka_vol1
My sql casual_in_fukuoka_vol1
 
カジュアルにバックアップ - MySQL Casual Talks 福岡
カジュアルにバックアップ - MySQL Casual Talks 福岡カジュアルにバックアップ - MySQL Casual Talks 福岡
カジュアルにバックアップ - MySQL Casual Talks 福岡
 
位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 Tokyo
位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 Tokyo位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 Tokyo
位置情報を使ったサービス「スマポ」をPostgreSQLで作ってみた db tech showcase 2013 Tokyo
 
2012 osc北海道 セッション資料「blackjumbodog利用のすすめ」
2012 osc北海道 セッション資料「blackjumbodog利用のすすめ」2012 osc北海道 セッション資料「blackjumbodog利用のすすめ」
2012 osc北海道 セッション資料「blackjumbodog利用のすすめ」
 
tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1
 
【学習メモ#8th】12ステップで作る組込みOS自作入門
【学習メモ#8th】12ステップで作る組込みOS自作入門 【学習メモ#8th】12ステップで作る組込みOS自作入門
【学習メモ#8th】12ステップで作る組込みOS自作入門
 
MySQL Casual Talks in Fukuoka vol.2
MySQL Casual Talks in Fukuoka vol.2MySQL Casual Talks in Fukuoka vol.2
MySQL Casual Talks in Fukuoka vol.2
 
配布用Beginnerならきっと役立つmaster slave環境
配布用Beginnerならきっと役立つmaster slave環境配布用Beginnerならきっと役立つmaster slave環境
配布用Beginnerならきっと役立つmaster slave環境
 
そろそろRStudioの話
そろそろRStudioの話そろそろRStudioの話
そろそろRStudioの話
 
イルカさんチームからゾウさんチームに教えたいMySQLレプリケーション
イルカさんチームからゾウさんチームに教えたいMySQLレプリケーションイルカさんチームからゾウさんチームに教えたいMySQLレプリケーション
イルカさんチームからゾウさんチームに教えたいMySQLレプリケーション
 

Similar to とあるDBAの黒い画面(ターミナル)II

CLUB DB2 第137回:基礎から再入門!DB2モニタリング入門
CLUB DB2 第137回:基礎から再入門!DB2モニタリング入門CLUB DB2 第137回:基礎から再入門!DB2モニタリング入門
CLUB DB2 第137回:基礎から再入門!DB2モニタリング入門Akira Shimosako
 
HandlerSocket plugin for MySQL
HandlerSocket plugin for MySQLHandlerSocket plugin for MySQL
HandlerSocket plugin for MySQLakirahiguchi
 
C# design note sep 2014
C# design note sep 2014C# design note sep 2014
C# design note sep 2014信之 岩永
 
第一回コンテナ情報交換会@関西
第一回コンテナ情報交換会@関西第一回コンテナ情報交換会@関西
第一回コンテナ情報交換会@関西Masahide Yamamoto
 
【学習メモ#4th】12ステップで作る組込みOS自作入門
【学習メモ#4th】12ステップで作る組込みOS自作入門【学習メモ#4th】12ステップで作る組込みOS自作入門
【学習メモ#4th】12ステップで作る組込みOS自作入門sandai
 
【アシアル塾】Linux超入門編・第一回はじめてのターミナル(黒い画面)操作
【アシアル塾】Linux超入門編・第一回はじめてのターミナル(黒い画面)操作【アシアル塾】Linux超入門編・第一回はじめてのターミナル(黒い画面)操作
【アシアル塾】Linux超入門編・第一回はじめてのターミナル(黒い画面)操作Yuki Okamoto
 
シェル芸初心者によるシェル芸入門 (修正版)
シェル芸初心者によるシェル芸入門 (修正版)シェル芸初心者によるシェル芸入門 (修正版)
シェル芸初心者によるシェル芸入門 (修正版)icchy
 
LPICレベル1技術解説セミナー(2012/11/11)
LPICレベル1技術解説セミナー(2012/11/11)LPICレベル1技術解説セミナー(2012/11/11)
LPICレベル1技術解説セミナー(2012/11/11)Kazuko Itoda
 
IT Pro のための PowerShell スクリプティング
IT Pro のための PowerShell スクリプティングIT Pro のための PowerShell スクリプティング
IT Pro のための PowerShell スクリプティングKazuki Takai
 
【アシアル塾】Linux超入門編・第一回はじめてのターミナル(黒い画面)操作
【アシアル塾】Linux超入門編・第一回はじめてのターミナル(黒い画面)操作【アシアル塾】Linux超入門編・第一回はじめてのターミナル(黒い画面)操作
【アシアル塾】Linux超入門編・第一回はじめてのターミナル(黒い画面)操作アシアル株式会社
 
Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3Ransui Iso
 
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識shigeya
 
JavaScript 講習会 #1
JavaScript 講習会 #1JavaScript 講習会 #1
JavaScript 講習会 #1Susisu
 
x86とコンテキストスイッチ
x86とコンテキストスイッチx86とコンテキストスイッチ
x86とコンテキストスイッチMasami Ichikawa
 
第1回勉強会スライド
第1回勉強会スライド第1回勉強会スライド
第1回勉強会スライドkoturn 0;
 

Similar to とあるDBAの黒い画面(ターミナル)II (20)

CLUB DB2 第137回:基礎から再入門!DB2モニタリング入門
CLUB DB2 第137回:基礎から再入門!DB2モニタリング入門CLUB DB2 第137回:基礎から再入門!DB2モニタリング入門
CLUB DB2 第137回:基礎から再入門!DB2モニタリング入門
 
d-kami x86-2
d-kami x86-2d-kami x86-2
d-kami x86-2
 
Unix
UnixUnix
Unix
 
HandlerSocket plugin for MySQL
HandlerSocket plugin for MySQLHandlerSocket plugin for MySQL
HandlerSocket plugin for MySQL
 
C# design note sep 2014
C# design note sep 2014C# design note sep 2014
C# design note sep 2014
 
第一回コンテナ情報交換会@関西
第一回コンテナ情報交換会@関西第一回コンテナ情報交換会@関西
第一回コンテナ情報交換会@関西
 
【学習メモ#4th】12ステップで作る組込みOS自作入門
【学習メモ#4th】12ステップで作る組込みOS自作入門【学習メモ#4th】12ステップで作る組込みOS自作入門
【学習メモ#4th】12ステップで作る組込みOS自作入門
 
【アシアル塾】Linux超入門編・第一回はじめてのターミナル(黒い画面)操作
【アシアル塾】Linux超入門編・第一回はじめてのターミナル(黒い画面)操作【アシアル塾】Linux超入門編・第一回はじめてのターミナル(黒い画面)操作
【アシアル塾】Linux超入門編・第一回はじめてのターミナル(黒い画面)操作
 
シェル芸初心者によるシェル芸入門 (修正版)
シェル芸初心者によるシェル芸入門 (修正版)シェル芸初心者によるシェル芸入門 (修正版)
シェル芸初心者によるシェル芸入門 (修正版)
 
LPICレベル1技術解説セミナー(2012/11/11)
LPICレベル1技術解説セミナー(2012/11/11)LPICレベル1技術解説セミナー(2012/11/11)
LPICレベル1技術解説セミナー(2012/11/11)
 
IT Pro のための PowerShell スクリプティング
IT Pro のための PowerShell スクリプティングIT Pro のための PowerShell スクリプティング
IT Pro のための PowerShell スクリプティング
 
【アシアル塾】Linux超入門編・第一回はじめてのターミナル(黒い画面)操作
【アシアル塾】Linux超入門編・第一回はじめてのターミナル(黒い画面)操作【アシアル塾】Linux超入門編・第一回はじめてのターミナル(黒い画面)操作
【アシアル塾】Linux超入門編・第一回はじめてのターミナル(黒い画面)操作
 
Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3
 
Objc lambda
Objc lambdaObjc lambda
Objc lambda
 
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識
 
JavaScript 講習会 #1
JavaScript 講習会 #1JavaScript 講習会 #1
JavaScript 講習会 #1
 
Tokyor23 doradora09
Tokyor23 doradora09Tokyor23 doradora09
Tokyor23 doradora09
 
x86とコンテキストスイッチ
x86とコンテキストスイッチx86とコンテキストスイッチ
x86とコンテキストスイッチ
 
第1回勉強会スライド
第1回勉強会スライド第1回勉強会スライド
第1回勉強会スライド
 
C# 3.0 以降
C# 3.0 以降C# 3.0 以降
C# 3.0 以降
 

Recently uploaded

論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 

Recently uploaded (9)

論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 

とあるDBAの黒い画面(ターミナル)II

  • 1. JPOUG> SET EVENTS 20140907 2014/09/07 吉川 和宏
  • 2. 自己紹介 • Twitter:@yoshikaw • Web技術を用いたシステムの開発や運用に携わっています。 • 近年は主にOracle Databaseを用いたシステムの運用をしています。 • 扱うOSはLinux(RHEL)が多く、商用UNIXの知識はありません。 • ほとんどの作業をCUIで行うため、多少こだわりがあります。 • ツールをカスタマイズして使いこなせるようになることが好きです。 • 個人的に「三種の神器」としているVim、Zsh、GNU Screenに ついては、よりよい設定を探す毎日です。 2
  • 3. 本日お伝えしたいこと • SQL*Plusを使いやすくする • プロンプトを豊かに • SQLバッファの操作 • リファレンスを手軽に • シェルの機能を使いこなす • SQL*Plusをrlwrapで強化する • おまけ:CUI三種の神器 3 セッションでお話しできなかったので、 資料からはこの部分は省略しています。
  • 5. SQL*Plusを使いやすくする • Oracle Databaseの運用にはSQL*Plusが欠かせません。 • え?今どきDB管理にはEnterprise Manager使うのが普通でしょ? • そんなことありません。自分のまわりではシングルインスタンスでも Database Controlすら使っていないところがほとんどです。 • 「Grid Control?なにそれうまいの?」「」 • でもちょっとCUIでの作業は初期設定では使い辛いですよね。 • 設定をカスタマイズしたり、ツールの力を借りて使いやすくする方法 を紹介します。 5
  • 6. SQL*Plusを使いやすくする〜プロファイル • SQL*Plusの構成は、プロファイルと呼ばれる2種類のOSファイルで 設定できます。 • サイト・プロファイル(サーバー全体) $ORACLE_HOME/sqlplus/admin/glogin.sql • ユーザー・プロファイル(ユーザー個別) $PWD/login.sql または $SQLPATH/login.sql • ユーザー・プロファイルに記述したSQLコマンド、PL/SQLブロック またはSQL*PlusコマンドがSQL*Plus起動時に実行されます。 • SQLPATH環境変数は、SQL*Plusセッション中に@で起動するスク リプトを参照する際のパスとしても利用されますので、よく使用する コマンドをまとめたファイルの設置場所を設定しておくと便利です。 6
  • 7. SQL*Plusを使いやすくする〜プロンプトを豊かに(1) • 初期状態だと、あまりにも情報が少なすぎて寂しいと思いませんか? ! ! • シンプルで良いのですが、個人的にはシェルのプロンプトと同様、意 味のある情報を含めるべきだと思っています。 • ちなみにThe Tom Kyte Blogで紹介されているコードでは次のよう になっています。 ! • 必要最小限の情報がまとまっていて、いいですね。でももう一声! 7 $ sqlplus scott/tiger SQL> ops$tkyte%ORA12CR1>
  • 8. SQL*Plusを使いやすくする〜プロンプトを豊かに(2) • プロンプトはSETシステム変数SQLPROMPTで定義します。 • 任意の文字列を指定できますが、いくつか事前定義変数が使えます。 _CONNECT_IDENTIFIER 接続文字列9i R2~ ! _DATE 現在の日付10g~ ! _USER 現行のユーザ10g~ ! _PRIVILEGE ユーザの権限レベル10g~ ! SQL> SET SQLPROMPT ”_DATE _USER’@‘_CONNECT_IDENTIFIER PRIVILEGE> ! “ (実際は一行です) ! 07-SEP-14 SCOTT@orcl> conn / as sysdba Conencted. 07-SEP-14 SYS@orcl AS SYSDBA> ! • 設定例 8
  • 9. SQL*Plusを使いやすくする〜プロンプトを豊かに(3) • プロンプトに表示される日付について • _DATE事前定義変数の日付書式はNLS_DATE_FORMAT環境変数 で指定した値が使用されます。 • その値はSQL*Plusセッションで実行するコマンドにも影響を及ぼ すため、プロンプトの為だけに設定する場合は注意が必要です。 • 時刻を表示するためにSETシステム変数TIMEを使うのも手です。 9 07-SEP-14 SCOTT@orcl> set time on ! 13:55:00 07-SEP-14 SCOTT@orcl>
  • 10. SQL*Plusを使いやすくする〜プロンプトを豊かに(4) • 事前定義変数以外の情報(接続先のノード名やサービス名など)を表 示したい場合は、任意のSQLで取得して設定します。 接続先の権限によっては参照できない場合もあるので、あまり凝った ものは止めた方が無難です。 ! ! ! • 明文化されていませんがSQLPROMPT変数に設定できる文字数は50 文字のようなので、あまり欲張らない方が良いみたいです。 SQL> SET SQLPROMPT "12345678901234567890123456789012345678901234567890>" string beginning ""123456789..." is too long. maximum size is 50 characters. 10 SQL> COLUMN h NEW_VALUE v1 SQL> COLUMN s NEW_VALUE v2 SQL> SELECT ... AS h FROM V$INSTANCE; SQL> SELECT ... AS s FROM V$SESSION; SQL> SET SQLPROMPT "&v1&v2 _USER _PRIVILEGE'>' " [node1]orcl/srv1 SYS AS SYSDBA>
  • 11. SQL*Plusを使いやすくする〜SQLバッファの操作(1) • SQL*Plusで入力したSQLコマンド、PL/SQLブロックはSQLバッファ に格納されます。 • このSQLバッファの操作コマンドを覚えておくと、ちょっとした作業 が楽になります。 11 SQL> l 1* select ename from emp; SQL> / ! ENAME ---------- JONES ... ! SQL> a where job = ‘MANAGER’ 1* select ename from emp where job = 'MANAGER' SQL> /
  • 12. SQL*Plusを使いやすくする〜SQLバッファの操作(2) • SQLバッファを表示、再実行するコマンド 12 コマンド略称用途 list l または ; SQLバッファの全ての行を表示 list n l n または n 行nを表示 list * l * カレント行を表示 list n * l n * 行nからカレント行まで表示 list LAST l l 最終行を表示 list m n l m n 行m~行nまで表示 list * n l * n カレント行から行nまで表示 run r または / SQLコマンドの再実行 /はSQLバッファを表示せずに実行
  • 13. SQL*Plusを使いやすくする〜SQLバッファの操作(3) • SQLバッファを編集するコマンド 13 コマンド略称用途 append text a text カレント行の末尾にテキストを追加 change/old/new c/old/new カレント行のoldをnewに変更 change/text c/text textをカレント行から削除 input i 一つ以上の行を追加 input text i text textを追加 del または del * (なし) カレント行を削除 del n * (なし) 行nからカレント行まで削除 del LAST (なし) カレント行から行nまで削除 del m n (なし) 行m~行nまで削除 del * n (なし) カレント行から行nまで削除 del n (なし) 行nを削除 clear buffer cl buff 全ての行を消去
  • 14. SQL*Plusを使いやすくする〜SQLバッファの操作(4) • SQLバッファの編集は基本的に行単位です。 正直、今どきedのような行指向の編集は覚えたくありません。 • _EDITOR事前定義変数を設定すると、EDITコマンドでSQLバッファ を使い慣れたエディタで編集できます。 • SQLバッファの内容が出力された一時ファイルを指定してエディタが 起動します。 編集を終えてエディタを終了すると、SQLバッファに反映されますの でrunなどで実行できます。 • エディタの設定によりますが、シンタックスハイライトなどを考慮す ると、一時ファイル名の拡張子をsqlにしておくと便利です。 14 SQL> define _editor=vim SQL> set editfile afiedt.sql SQL> edit Wrote file afiedt.sql
  • 16. シェルの機能を使いこなす • Oracle Databaseに限らず管理作業などでサーバにログインする場合 には、シェルに対してコマンドラインを入力します。 • シェルはコマンドラインを入力したとおりに実行してくれますが、 シェルの機能を知っていると、その入力が楽になります。 • ここではLinuxやOracle SolarisなどのOSでデフォルトの対話式シェ ルとなっているBourne-Againシェル(bash)のいくつかの機能を紹 介したいと思います。 • カーソル移動、テキストの削除、コマンドの繰り返し、コマンド ヒストリの参照 • コマンドラインの再利用、コマンドラインの編集、パラメータ展 開、ブレース展開、その他 16
  • 17. シェルの機能を使いこなす〜カーソル移動(1)〜 • bashのデフォルトではemacsの基本的なコマンドが使えます。 17 キー動作 C-a カーソルを行の先頭に移動(beginning-of-line) C-e カーソルを行の末尾に移動(end-of-line) C-f カーソルを1文字順方向(右)に移動(forward-char) C-b カーソルを1文字逆方向(左)に移動(backward-char) M-f カーソルを1単語順方向(右)に移動(forward-word) M-b カーソルを1単語逆方句(左)に移動(backward-word) ※以降の説明では、C-a は Control-a 、M-f は ESC-f の略記 M-b M-f ! ! C-a C-e ! $ cd $ORACLE_HOME/network/w admin ! C-b C-f
  • 18. シェルの機能を使いこなす〜カーソル移動(2)〜 • 文字を検索してカーソルを移動することも出来ます。 (viのコマンドモードにおけるF、fと同じ) 18 キー動作 C-] 入力文字が次に現れる場所にカーソルを移動(viのF) (character-search) M-] 入力文字が前に現れる場所にカーソルを移動(viのf) (character-search-backword) M-] n C-] / ! ! ! $ cd $ORACLE_HOME/network/admin ! M-] c C-] n w M-] t C-] o
  • 19. シェルの機能を使いこなす〜テキストの削除(1)〜 19 キー動作 C-d カーソル位置の文字を削除(delete-char) C-h DEL カーソル位置の左の文字を削除(Rubout) M- カーソル前後の空白とタブを全て削除 (delete-horizontal-space) $ sqlplus scottt/tiger $ sqlplus scott/tiger ! $ sqlplus scottt/tiger $ sqlplus scott/tiger ! $ sqlplus / as sysdba $ sqlplus /as sysdba t / C-d t C-h t a M-
  • 20. シェルの機能を使いこなす〜テキストの削除(2)〜 • 次の削除コマンドはいわゆる切り取り(キル)として動作しますので、 キルした文字列を貼り付け(ヤンク)できます。 C-u は入力したコマンドラインを取り消す目的でよく使います。 キー動作 C-k カーソル位置から行末までを削除(kill-line) C-u カーソル位置から行頭までを削除(unix-line-discard) C-w カーソル位置から前の単語を削除(unix-word-rubout) C-y 最後にkill操作した文字列を取り出し(yank) $ sqlplus scott/tiger $ sqlplus $ ! $ sqlplus scott/tiger $ sqlplus $ sqlplus scott/tiger 20 s C-k C-u C-w   C-y
  • 21. シェルの機能を使いこなす〜コマンドの繰り返し〜 • 繰り返す数を指定してコマンドを実行できます。 ! ! M-b M-b M-b ! ! ! $ sqlplus scott/tiger@orcl ! キー動作 M-0 M-1 … 指定した数繰り返す(digit-argument) ! • C-hの文字削除コマンドを繰り返し実行する場合、切り取りることが できます。 M-3 M-b 21 $ sqlplus scott/tiger@orcl $ sqlplus scott/tiger@ $ sqlplus scott/tiger@orcl M-4 C-h C-y
  • 22. シェルの機能を使いこなす〜コマンドヒストリの参照〜 • 過去に実行したコマンドラインをもう一度実行する場合や、引数など を少し変更して実行する場合に使います。 22 キー動作 C-p ↑ ヒストリの前の行を取り出す(previous-history) C-n ↓ ヒストリの次の行を取り出す(next-history) C-r ヒストリの後方の履歴を遡ってインクリメンタル検索 (reverse-search-history) C-s ヒストリの前方の履歴を遡ってインクリメンタル検索 (forward-search-history) C-g インクリメンタル検索の中止(keyboard-quit) $ (reverse-i-search)`’: C-r plus (reverse-i-search)`plus’: sqlplus p scott/tiger
  • 23. シェルの機能を使いこなす〜コマンドラインの再利用(1)〜 • 最後に実行したコマンドラインを再利用することで、入力作業の軽 減、打ち間違いを減らせます。 23 キー動作 !! 最後のコマンドラインを実行 !$ 最後のコマンドラインの最後の引数 $ tail -f /path/to/log.file … ^C $ !! tail -f /path/to/log.file … ! $ ls -l /some/long/path/name/you/only/type/once/* $ rm -f !$ rm -f /some/long/path/name/you/only/type/once/* ワイルドカード展開後の ファイルを確認してから 削除を実行する
  • 24. シェルの機能を使いこなす〜コマンドラインの再利用(2)〜 • コマンドラインをsedのように置換できます。 置き換える文字列を間違えないように注意しましょう。 キー動作 ^old^new 最後のコマンドラインの最初のoldをnewに置換して実行 !!:gs/old/new 最後のコマンドラインの全てのoldをnewに置換して実行 $ grep Warning /path/to/log.file … $ ^Warning^Error grep Error /path/to/log.file … ! $ scp -p node1:/rdbms/orcl/node1/trace/alert_node1.log . … $ !!:gs/node1/node2 scp -p node2:/rdbms/orcl/node2/trace/alert_node2.log . … 24
  • 25. シェルの機能を使いこなす〜コマンドラインの編集〜 • ヒストリからのコマンドラインの再実行や文字列の置換で事足りない 場合、fcコマンドでコマンドラインをエディタで編集できます。 • FCEDIT環境変数またはEDITOR環境変数に指定されているエディタ、 指定がなければviが起動します。 • エディタでの編集終了後、コマンドラインとして直ぐに実行されます ので複数行に渡って編集している場合は注意が必要です。 (少し使いづらい) 25 キー動作 fc 最後のコマンドラインを編集 fc -l コマンドラインをヒストリ番号とともに一覧表示 fc first last コマンドラインのヒストリ番号firstからlastまでの コマンドラインを編集 fc word wordが含まれる最後のコマンドラインを編集
  • 26. シェルの機能を使いこなす〜パラメータ展開(1)〜 • 変数の置換演算子を使うことで初期値の設定やエラーチェックなどが 出来ます。主にシェルスクリプトで使用します。 演算子動作 ${var:-word} ${var}が定義されていない場合、wordを返す ${var:=word} ${var}が定義されていない場合、wordを設定して返す ${var:?message} ${var}が定義されていない場合、messageを 表示してエラー終了 ${var:+word} ${var}の定義されていてNULLではない場合wordを返 す $ echo ${var:-default_value} default_value $ var=‘JPOUG> SET EVENTS’ $ echo ${var:=word} JPOUG> SET EVENTS $ echo ${var2:?’error!’} bash: var2: error! $ echo ${var:+1} 1 ! 26
  • 27. シェルの機能を使いこなす〜パラメータ展開(2)〜 • 変数のオフセットの指定やパターン照合を使うことで、値の部分的な 取得が出来ます。こちらもシェルスクリプトでよく使います。 演算子動作 ${var:offset} ${var:offset:length} ${var}の値のoffsetの位置から(lengthの長さ)の部 分文字列を表示 ${#var} ${var}の文字列の長さ ${var#pattern} ${var##pattern} ${var}の先頭からpatternの最短マッチ(#)、 最長マッチ(##)部分を削除して残りを返す ${var%pattern} ${var%%pattern} ${var}の末尾からpatternの最短マッチ(%)、 最長マッチ(%%)部分を削除して残りを返す $ var=‘JPOUG> SET EVENTS’ $ echo ${var:5} > SET EVENTS $ echo ${var:7:3} SET $ echo ${#var} 17 $ echo ${var#*> } SET EVENTS $ echo ${var##* } EVENTS $ echo ${var% *} JPOUG> SET $ echo ${var%% *} JPOUG> 27
  • 28. シェルの機能を使いこなす〜パラメータ展開(3)〜 演算子動作 ${var/pattern/string} ${var//pattern/string} ${var}の先頭からpatternにマッチする文字を stringに置換(/)。全てのマッチする文字を置換(//) $ echo $PWD /u01/app/oracle/diag/rdbms/orcl/orcl ! $ echo ${PWD/orcl} /u01/app/oracle/diag/rdbms//orcl ! $ echo ${PWD///orcl} /u01/app/oracle/diag/rdbms 28
  • 29. シェルの機能を使いこなす〜ブレース展開〜 • シェルのブレース展開 {} を使うと任意の文字列を生成できます。 • ブレース内にカンマ区切りで文字列を指定することで、ブレース前後 の文字列と、ブレース内文字列を展開した文字列が生成されます。 • cpコマンドによるファイルのバックアップや、同じ階層に複数のディ レクトリを作成する際によく使います。 $ cp -pv some_script.sh{,.20140907} `some_script.sh' -> `some_script.sh.2014007’ ! $ mkdir -pv path/to/dir/{adump,dpdump,pfile} mkdir: created directory `path/to/dir' mkdir: created directory `path/to/dir/adump' mkdir: created directory `path/to/dir/dpdump' mkdir: created directory `path/to/dir/pfile’ ! $ tkprof orcl_ora_xxxx_*.trc{,.txt} aggregate=no … 29
  • 30. シェルの機能を使いこなす〜その他の展開〜 • チルダ展開 チルダ(~)で単語が始まった場合はチルダプレフィックスと解釈さ れてログイン名になる可能性がある文字列として扱われます。 最近はあまり見かけませんが、個人ホームページのURLで目にしたこ ともありました。( http://example.com/~loginname/ ) • コマンド置換 コマンドの実行結果を変数に取り込みたい場合などに使います。 オリジナルのshでは `` 形式ですが、bashで使える$() 形式の場合は 入れ子構造が取れますのでオススメです。 $ echo `ls` $ echo $(echo $(ls)) 30 $ ls -1d ~oracle ~mysql /home/oracle /var/lib/mysql
  • 31. シェルの機能を使いこなす〜手軽なディレクトリ移動〜 • cdコマンドでディレクトリを移動した場合には、以前の作業ディレク トリ($PWD)が$OLDPWDとして記録されます。 • ディレクトリの移動履歴はpushd、popdなどのコマンドでスタック として記録できますが、一つ前のディレクトリとの間を行ったり来た りする場合には - を使うと便利です。 $ cd /u01/app/oracle/diag/rdbms/orcl/orcl/trace $ cd /some/work/path $ cd - $ pwd /u01/app/oracle/diag/rdbms/orcl/orcl/trace $ cd - $ pwd /some/work/path 31
  • 33. SQL*Plusを使いやすくする〜rlwrapによる強化(1) • SQLを打ち間違えたりしたとき、ついシェルのヒストリを参照する感 覚でCtrl-Pを押して悲しい思いをすることありませんか? ! ! ! • PostgreSQLやMySQLのフロントエンドでは当たり前のように出来 る、入力履歴を参照できたりするあの機能がないとイラッとします。 • ライセンスの都合かも知れませんが、SQL*Plusでこの機能が使える 日は来ない気がするので、rlwrapの力を借ります。 33 SQL> SELECT * FROM TABS WHERE TABLENAME LIKE ...; ! ERROR at line 1: ORA-00904: "TABLENAME": invalid identifier ! SQL> ^P
  • 34. • rlwrapとは? GNU Readlineによるコマンドライン入力に対応していないプログラ ムに、その機能を提供するラッパーです。 • すぐ効く嬉しい機能 • rlwrapでラップしたプログラムでは、GNU EmacsやGNU Bash、 Kshなどでおなじみの行編集が可能になります。 • 入力した行のうち、空行でない実行された行は全てヒストリバッ ファに保存され、コマンドラインの再利用が容易になります。 • 導入 ソースコードは公開されていますが、Linuxの場合はFedoraプロジェ クトのEPELリポジトリにあるrpmパッケージを使うと楽です。 34 SQL*Plusを使いやすくする〜rlwrapによる強化(2)
  • 35. SQL*Plusを使いやすくする〜rlwrapによる強化(3) • 使い方 rlwrapに続いて任意コマンドを指定します。 よく使うコマンドの場合はエイリアスに指定しておくと便利です。 bashの説明で紹介したカーソルの移動、テキストの削除、コマンド の繰り返し、コマンドヒストリの参照などが使えるようになります。 35 $ rlwrap sqlplus $ alias sqlplus=‘rlwrap sqlplus’ ! $ rlwrap sqlplus scott/tiger … SQL> SELECT * FROM TABS WHERE TABLENAME LIKE ...; ! ERROR at line 1: ORA-00904: "TABLENAME": invalid identifier ! SQL> SELECT * FROM TABS WHERE TABLENAME LIKE ...; ! SQL> SELECT * FROM TABS WHERE TABLENAME LIKE ...; ! SQL> SELECT * FROM TABS WHERE TABLE_NAME LIKE ...; C-p M-] N   N N _
  • 36. SQL*Plusを使いやすくする〜rlwrapによる強化(4) • rlwrapは行編集やヒストリ置換以外にも便利な機能があります。 • プロンプトに色を付ける。 接続先や実行するコマンドで区別するなどの使い分けができます。 ANSIエスケープシーケンスも使えます。 36 $ rlwrap -pRed sqlplus scott/tiger@honban_db SQL> show user ! $ rlwrap -pMagenta rman target / RMAN> list backup; ! $ rlwrap -p‘4;36’ asmcmd -p ASMCMD [+] > ls ! $ rlwrap -p‘0;31;43’ adrci adrci> show problem
  • 37. SQL*Plusを使いやすくする〜rlwrapによる強化(5) • ユーザー定義辞書による補完 補完したい単語を空白区切りのテキストとして用意することで、C-t による任意の補完が使用できます。 ! • Oracle Databaseに関連したコマンドとキーワードをまとめている rlwrap_extというスクリプト集を使うと手軽です。カスタマイズの参 考にもなります。 • adrci/asmcmd/rman • 動的パフォーマンス・ビュー • 静的データ・ディクショナリ・ビュー • 初期化パラメータ 37 $ rlwrap -f user_dict.txt sqlplus scott/tiger
  • 39. リファレンスを手軽に • Oracle Databaseのマニュアルはオンラインのみならず、PDFや ePub、Mobiなど様々な電子ファイルで提供されていて非常に充実し ています。 • とくにリファレンスは各種調査に必要なビュー、ディクショナリの確 認のためによく参照します。 • しかし11gのマニュアルから1項目1ページのレイアウトになってしまっ たため、ページを行ったり来たりするのが苦痛です。 • さらに言うと、列定義の確認のためだけにブラウザを操作するのも面 倒です。 • マニュアルはHTMLテキスト。だったら手元にダウンロードして手軽 に参照できるようにしましょう。 39
  • 40. リファレンスを手軽に〜w3mを使う(1) • テキストブラウザw3mには整形した内容を標準出力に書き出す-dump オプションがあるので、これとページャを組み合わせます。 • 10gのリファレンスはファイル数が少ないので、wgetなどでローカ ルにダウンロードしていたものをw3mで動的に変換する方法が使え ます。 • 以下のサンプルでは、冗長な罫線をperlで取り除くため、一度EUC-JP に変換しています。 $ wget http://otndnld.oracle.co.jp/document/products/oracle10g/ 102/doc_cd/server.102/B19228-04/statviews_1.htm ! $ w3m -dump "file://$PWD/statviews_1.htm" 40 -t 4 -S -Oe -cols $COLUMNS | perl -pi -e 's/^(s|xA8(xA1|xA2|xA7|xA9|xAB))+$//g' | lv
  • 41. リファレンスを手軽に〜w3mを使う(2) • 11gのリファレンスは1項目1ファイルなので、加工してひとつのファ イルにまとめる作業が必要です。 1. toc.htmを取得 2. toc.htm中の各項目のリンク先ファイルを取得 3. それぞれに対してw3m -dumpでテキスト出力 4. それらを連結してひとつのファイルに $ wget http://docs.oracle.com/cd/E16338_01/server.112/ b56311/toc.htm $ grep -E '^<li>.*="(whatsnew|initparams|statviews|dynviews| limits|scripts|waitevents).*</a></li>' toc.htm | perl -pi -e 's!^.*href="([^#"]+)?.*?">([^<]+)(?:<span class="italic">([^<]+)?</span>)?(.*)?</a></li>!$1 $2$3$4!' | while read file title do # リンク先ファイルを取得、加工して最終的な出力ファイルに追記 done 41
  • 42. リファレンスを手軽に〜ツールのご紹介(1) • 以前はこのようにコマンドラインで実行していましたが、毎回手間な のでマニュアルのダウンロードと加工を行うツールを作成しました。 https://github.com/yoshikaw/oracle-cui-reference # ツールをダウンロードする $ wget https://raw.githubusercontent.com/yoshikaw/ oracle-cui-reference/master/oracle-cui-reference. 42 sh ! # ツールを読み込む $ source ./oracle-cui-reference.sh ! # 12.1の日本語リファレンスを取得・加工する $ omkdata 121 ! # 12.1の英語リファレンスの初期化パラメータを表示する $ ODOC_LANG=en oinit 121
  • 43. リファレンスを手軽に〜ツールのご紹介(2) • このツールではリファレンスマニュアルを加工して単一のHTMLとし て出力しますが、それを表示のたびに行うと時間がかかりますのでテ キストファイルとして保存します。 • そのため保存されたファイルの表示幅は加工するコマンドを実行した ときの端末の幅になります。 ! 43
  • 44. おわりに • 私が普段の作業で使用しているSQL*Plusやその他のCUIツールにつ いて、かなり偏った観点でご紹介させていただきました。 • CUIツールはコマンドなどを覚えるまでのハードルが少し高いです が、 GUIツールでは出来ない細かな対応や、定型的な作業において威 力を発揮します。 • 今回のセッションを通して、何か一つでもヒントとなるものを得てい ただけたのならば幸いです。 44
  • 45. 参考資料(1) • SQL*Plus®ユーザーズ・ガイドおよびリファレンス リリース12.1 B71396-02 http://docs.oracle.com/cd/E49329_01/server.121/b71396/toc.htm • O'Reilly Japan - 入門 bash 第3版 http://www.oreilly.co.jp/books/4873112540/ • O'Reilly Japan - bashクックブック http://www.oreilly.co.jp/books/9784873113760/ • rlwrap http://utopia.knoware.nl/~hlub/rlwrap/#rlwrap • Linuxification.at: rlwrap_ext http://www.linuxification.at/rlwrap_ext.html.en • SQL*Plus使い方 - bashの便利機能を組み込む(シェルスクリプトTips-6) (オラクルエンジニ ア通信 - 技術資料、マニュアル、セミナー) https://blogs.oracle.com/oracle4engineer/entry/sqlplus_-_bashtips-6 45
  • 46. 参考資料(2) • CUIでOracle Databaseリファレンスマニュアルを参照する - Keep It Simple, Stupid http://yskwkzhr.blogspot.jp/2012/12/refer-to-oracle-database-reference-manual-with-cui. html • Oracle Databaseを扱う上で知っておきたい変数10選 - Keep It Simple, Stupid http://yskwkzhr.blogspot.jp/2013/12/10-variables-that-you-should-know-to-operate-an- oracle-database.html • サーバ管理に役立つVim技10選 - Keep It Simple, Stupid http://yskwkzhr.blogspot.jp/2013/12/10-vim-tips-to-help-the-server-management.html • GNU Screenバージョン4.2がリリースされました - Keep It Simple, Stupid http://yskwkzhr.blogspot.jp/2014/04/gnu-screen-v-4.2-has-released.html 46