Monday, February 2, 2009

dba常用用的系统命令

dba常用用的系统命令



1、#ps -ef|grep "ora_"|grep -v grep|awk '{ print $2 }'|xargs kill –9 杀掉所有Oracle的进程

2、# find ./ -print |grep rdbms 在当前目录及所有子目录查找整个文件名或路径(包含路径)包含特定字符串rdbms 的文件或者路径

3、# find ./ -print|xargs grep -i good 当前目录下哪个文件的内容里含有good这个单词。

4、PS1=" `hostname`*\${ORACLE_SID}-\${PWD} >"

5、$ cat /etc/oratab|grep ^$ORACLE_SID:|cut -f2 -d':' 获取Oracle主目录(ksh)

6、将SQL*Plus脚本放入Unix shell
#!/bin/ksh
#请用正确的sid替换下面的sidname
ORACLE_SID=sidname
export ORACLE_SID
ORACLE_HOME=`cat /etc/oratab|grep ^$ORACLE_SID:|cut -f2 -d':'`
export ORACLE_HOME
PATH=$ORACLE_HOME/bin:$PATH
export PATH
$ORACLE_HOME/bin/sqlplus system/manager<SELECT name FROM v\$datafile;
@/home/oracle/sql/longscript.sql
exit
!

7、我们也可以在提示符下用下面的命令来执行SQL*Plus脚本:
# sqlplus system/manager @/home/oracle/sql/longscript.sql

8、将任务提交到后台执行 nohup命令可以作为一个后台进程来提交任务:
nohup run_sql.ksh > logfile.lst 2>&1 &

9、监控后台运行的进程的执行情况 tail -f logfile.list

10、确保合适的参数传递给Oracle Shell脚本
下面的代码展示怎样阻止不合适的参数传递给Oracle的shell脚本。你可以利用此技术来防止意外的破坏。在这个例子中,check_param.ksh脚本需要两个参数:一个Oracle SID和一个大于100的数字值。if语句的作用是条件不满足的时候退出脚本。
# Exit if no first parameter $1.
if [ -z "$1" ]
then
echo "Usage: check_parms.ksh \
<#_days> (where value is > 100)"
exit 99
fi
# Exit if no second parameter $2.
if [ -z "$2" ]
then
echo "Usage: check_parms.ksh \
<#_days> (where value is > 100)"
exit 99
fi
# Exit if parm is not greater than 100.
tmp=`expr $2` # Convert string to number.
if [ $tmp -lt 101 ]
then
echo
echo "Argument two is less than 100.\
Aborting Script."
echo
exit 99
fi
echo "Right para"
在这个脚本中,$1和$2代表第一个和第二个传递给脚本的参数。if语句中的-z参数检查是否返回null参数,也就是是否没有输入参数。头两个if检查是否传递了参数,第3个if检查第二个参数是否大于100。

11、保证只有Oracle用户可以运行脚本
#!/bin/ksh
if [ `whoami` != 'oracle' ]
then
echo "Error: You must be oracle to execute."
exit 99
fi
上面的语句只允许oracle用户来执行脚本。虽然unix文件权限可能允许任何用户来执行,但是经验丰富的DBA应该在脚本上加上限制,只允许oracle用户来运行特定的脚本,如关闭数据库等操作。

12、检查是否传递了正确的SID
这个脚本显示了怎样检查传递的Oracle SID是否有效。这个脚本假设第一个参数是 传入的SID,然后检查是否是有效的SID。接下来脚本会检查/etc/oratab文件,这个文件中会存有有效的SID。
#!/bin/ksh
# Exit if no first parameter $1 passed.
if [ -z "$1" ]
then
echo "Please pass a valid ORACLE_SID\
to this script"
exit 99
fi
# Validate the Oracle database name with
# lookup in /etc/oratab.
TEMP=`cat /etc/oratab|grep \^$1:| cut -f1 -d':'|wc -l`
tmp=`expr TEMP` # Convert string to number.
if [ $tmp -ne 1 ]
then
echo "Your input $1 is not a valid ORACLE_SID."
exit 99
fi
这个脚本可以检查传递的参数是否是有效的Oracle SID。注意,如果你使用Solaris,那么oratab参数文件将是/var/opt/oratab。另外,有的unix中可能不需要转换TEMP变量。如果上面的脚本不能运行,那么将tmp=`expr TEMP`语句去掉。

13、查看消耗CPU时间最长的进程:
$ ps -ef|grep oracle|sort +6|tail
$ps -ef|grep afis|sort +7|tail
$ ps auxgw|sort +2|tail

14、显示Oracle的活动连接用户数量
# ps -ef|grep $ORACLE_SID|grep -v grep|grep -v ora_|wc -l

15、Linux下显示内存大小: /usr/sbin/dmesg | grep "Physical:
显示分配的内存段 # ipcs -pmb

16、 使用top
使用命令来显示Unix服务器的高CPU资源占用会话。top显示每个CPU的使用情况。top的输出分两部分。第一部分显示每个处理器的负载情况,第二部分显示使用CPU最多的会话信息。

17、使用vmstat
vmstat是通用的UNIX监控工具,vmstat在IRIX操作系统中是osview。vmstat的第一个参数是间隔的秒数,也可以带第二个参数,表明显示多少次。vmstat不同操作系统输出结果不一样,含义也可能有区别。

18、使用iostat iostat显示物理磁盘I/O情况。

19、$ ls -alt|head
使用head是为了限制输出数量,只输出最近动过的文件(默认10个)

20、显示最近修改过的文件 $ ls –alc|tail

21、删除未修改的文件
例如,删除5天以上未修改的归档文件
/usr/bin/find $DBA/$ORACLE_SID/arch/arch_prod*.arc -ctime +5 -exec rm {} \

22、批量删除过期的trace文件和审计文件脚本(deltrcandaudit.ksh)
#!/bin/ksh
for ORACLE_SID in `cat /etc/oratab|\
egrep ':N|:Y'|grep -v \*|cut -f1 -d':'`
do
ORACLE_HOME=`cat /etc/oratab|\
grep ^$ORACLE_SID:|cut -d":" -f2`
DBA=`echo $ORACLE_HOME | sed -e\
's:/product/.*::g'`/admin
find $DBA/$ORACLE_SID/bdump -name "*.trc" \
-mtime +14 -exec rm {} \;
find $DBA/$ORACLE_SID/udump -name \
"*.trc" -mtime +14 -exec rm {} \;
find $ORACLE_HOME/rdbms/audit -name \*.aud \
-mtime +14 -exec rm {} \;
done
上面的脚本在所有的实例中查找符合条件的trc文件并删除。

Chrome open source version

http://d.hatena.ne.jp/NyaRuRu/20080909/p1

http://code.google.com/intl/ja/chromium/

LinuxおよびWindows代替OSに対する感想

最近LinuxのWindows代替性についていろいろと考えてる。
とりあえずメモしておく

+ユーザに必要な機能
パソコン、OSではなくてユーザに必要なのは利用である。

安定
安心
すぐ利用できる
比較的に反応速く(絶対値ではなく)
おしゃれ
わかりやすい
使いやすい

記録
コミュニケーション
検索
簡単な計算
ウェブの閲覧
フラッシュの閲覧
動画の閲覧
デバイスの利用

+アイデア

最小限互換性のある機能をそろえて、すぐ起動できて、利用できるようにする

ブラウザ(FF)
ウェアレスラン
メモリカードあるいはHDの一部

+Linuxのコンパイルをやりやすいように

シンプルにする
ソフトウェアをリポジトリ化する
OSのライブラリなど情報をサーバにサブミットすれば、サーバが必要応じてコンパイルあるいはバイナリを探して、合体したソフトを提供してあげる

言語の設定LANG LC_ALL /etc/sysconfig/i18n $HOME/.i18n

言語の設定について
LANG
LC_ALL
/etc/sysconfig/i18n
$HOME/.i18n
の設定がある。

/etc/sysconfig/i18n サンプル:
#LANG="ja_JP.UTF-8"
SYSFONT="latarcyrheb-sun16"
#SUPPORTED="ja_JP.UTF-8:ja_JP:ja"
LANG="ja_JP.eucJP"
SUPPORTED="ja_JP.eucJP:ja_JP:ja"

/etc/man.config

LC_ ... VARIABLES

http://72.14.235.132/search?q=cache:n8bAsQgSgX0J:plaza.rakuten.co.jp/server/diary/200605250000/+Linux+LANG+LC&hl=ja&ct=clnk&cd=2&gl=jp&client=firefox-a

LC_環境変数 「UNIXで頑張ってます(25)」
[ さーばやったこと ]
LANG
 LC_ALLまたはLC_で始まる同様の環境変数のどちらによってもロケールが指定
 されていない場合に、ローカル・カテゴリーについて使用するロケールの名前。
 メッセージやその他の情報をユーザーに送信する際に使用する言語、テリトリー、
 またはキャラクタ・セットを指定します。

LC_ALL
 環境変数LANGまたはLC_で始まる他の環境変数で設定されたローカル・カテゴリー
 のどの値よりも優先されるロケールの名前。

LC_CTYPE
 文字の分類、大文字 / 小文字の変換、およびその他の文字属性を定義します。
 XL Fortran の場合は、主にマルチバイト文字の処理に影響を与えます。

LC_MONETARY
 通貨単位を指定するロケールの名前。

LC_NUMERIC
 数値の I/O に使用する形式を指定します。この変数をシェルで設定しても、
 コンパイラーにも XLF コンパイル済みプログラムにも影響を与えません。
 LC_NUMERIC カテゴリーは、プログラムの最初の I/O ステートメントによって
 POSIX に設定されているので、別の設定が必要なプログラムは、この箇所の後で
 リセットしてから、すべての I/O ステートメントに対して POSIX への設定を
 復元します。

LC_TIME
 時刻形式カテゴリーに対して各国語を指定します。主にコンパイラー・リストに
 影響を与えます。

LC_MESSAGES
 送出されるメッセージに対して各国語を指定します。これは、コンパイラーおよび
 XLF コンパイル済みプログラムからのメッセージに影響を与えます。
 これらのメッセージは画面に表示することもできますし、リスト、モジュール、
 またはその他のコンパイラー出力ファイルに格納することもできます。

pctfree还启作用

http://space.itpub.net/7364032/viewspace-521209

Automatic segment-space management is a simpler and more efficient way of managing space within a segment. It completely eliminates any need to specify and tune the PCTUSED, FREELISTS, and FREELISTS GROUPS storage parameters for schema objects created in the tablespace.

没有eliminates--pctfree,说明还启作用

Sunday, February 1, 2009

Oracleで全文検索[Oracle Text]

Oracleで全文検索[Oracle Text] ctxsys
http://www.bnote.net/oracle/oracletext.shtml

Oracle9iで複数項目にまたがる全文検索を行います。

環境:Oracle9i[Release 9.2.0.1.0]
Oracleで全文検索に必要だった設定等

1.Oracle Text

2.データベースのキャラクタセットをJA16SJIS、JA16EUC、UTF8のいずれかで作成する。

3.対象となるテーブルにダミー項目を追加する。(微妙)
Oracle全文検索環境構築

日本語のテキストからトークンを抽出するには、レクサーにJAPANESE_VGRAM_LEXERまたは、JAPANESE_LEXERを指定します。この場合、Oracle9iでは、キャラクタセットがJA16SJIS、JA16EUC、UTF8のいずれかである必要があるので、DataBaseをUTF8で再構築しました。

今回は、puccaというユーザーを作り次のようなテーブルを作成します。

CREATE TABLE ITS
(
ID NUMBER(10,0) NOT NULL,
PLAN_START_DATE VARCHAR2(8),
PLAN_COMP_DATE VARCHAR2(8),
PRIORITY VARCHAR2(12),
TASK VARCHAR2(1000) NOT NULL,
MEASURE VARCHAR2(1000),
REMARKS VARCHAR2(128),
REFERENCE VARCHAR2(128),
DMY CHAR(1),
CONSTRAINT PK_ITS PRIMARY KEY (ID) USING INDEX
)

複数項目を対象とするには、テキストの格納方法にMULTI_COLUMN_DATASTOREを指定する必要があります。このMULTI_COLUMN_DATASTORE型のプリファレンスを作成できるのは、CTXSYSユーザのみのためCTXSYSユーザで接続し、全文検索に関わる属性を設定します。

BEGIN
CTX_DDL.CREATE_PREFERENCE('multi_item', 'MULTI_COLUMN_DATASTORE');
CTX_DDL.SET_ATTRIBUTE('multi_item', 'columns', 'TASK,MEASURE,REMARKS');
CTX_DDL.CREATE_PREFERENCE('japan_lexer', 'JAPANESE_LEXER');
END;

上記例では、TASK,MEASURE,REMARKSの3つの項目を対象としています。

次に索引を作成します。

CREATE INDEX
pucca.ITS_IDX on pucca.ITS(DMY)
INDEXTYPE IS CTXSYS.CONTEXT
PARAMETERS('datastore multi_item lexer japan_lexer');

以上で設定が完了します。
索引の同期化と最適化

Oracle Textでは、索引として何らかのトークンに分けて格納されます。しかし、テーブルにINSERTしただけでは、索引が作成されないようです。

索引を作成するには、索引の同期化を行います。

BEGIN
-- 引数にINDEX名を指定
CTX_DDL.SYNC_INDEX('ITS_IDX');
END;

索引が作成されたかは、次のSELECT文で確認することができます。テーブル名は、DR$インデックス名$I になっています。

select token_text from DR$ITS_IDX$I;


TOKEN_TEXT
-----------
システム
点
の
作成
管理
資料

INSERTと同様にUPDATEやDELETEを行っても上記トークン表は更新されません。そこで、変更を反映させるために索引の最適化を行います。

BEGIN
CTX_DDL.OPTIMIZE_INDEX('ITS_IDX','FULL');
END;

索引の最適化には、3つの方法があり第二引数に次のいずれかを指定します。
・完全(FULL)
・高速(FAST)
・トークン(TOKEN)
更新と検索

更新を行う場合、ダミー項目(DMY)を更新しないと索引の同期処理を行っても索引が更新されません。

テーブルから検索を行う場合、WHERE句でCONTAINS演算子を使用します。

SELECT * FROM ITS WHERE CONTAINS(DMY,'資料') > 0