2008年12月23日火曜日

現在のサービスの状況確認&設定方法

システム起動時に自動的に実行されるデーモン起動スクリプトの状況確認と設定は、
以下のコマンドにて、実施する
%)chkconfig --list
全サービスの状況表示

%)chkconifg --level 6 httpd on
httpd デーモンをランレベル6で起動するように変更

%)chkconfig --list httpd
httpdデーモンのサービス状況を表示

※その他細かいパラメタは、man にて参照されたし

2008年12月19日金曜日

Listenerの肥大したログの対応

リスナーのログファイルは、リスナープロセスが
ファイルをオープンし続けているため削除してはいけないらしい(Oracle10g)

そのため、ログ出力先を変更し、変更前のファイルを削除していくようにする必要がある。
以下、サンプル(Web抜粋)

# ①現在出力しているファイルを一時的に別のファイルへ変更
LSNRCTL> set log_file listener.tmp.log

# ②それまでに出力していたファイルを別のファイルにReName
%) mv listener.log listener.old

# ③ ①で別のファイルへ変更していたのを元に戻す
LSNRCTL> set log_file listener.log

# ログファイルの結合(ふるいログを直近のファイルで、作成しなおす)
(1) %)cat listener.old listener.tmp.log > listener_YYYYMMDD.log
or
(
2) %)cat listener.tmp.log >> listener.old
'>>''>' にタイプミスするとログが上書きされるので、注意。

2008年12月18日木曜日

ARCServe 再インストール時に、Ingresのインストールでエラーの対応

【事象】
ARCServeの再インストール時に、Ingresが既にインストール済みです という
エラーになり、再インストールを進められない。
(正規のアンインストール方法ではなく、インストールディレクトリごと、rmしてしまった状態)
ARCServe Backup Server 11.5 for Linux

【対応】
Ingresのパッケージを全て削除して、再インストールを実施。

Step1:Ingresパッケージの確認
%)rpm -qa | grep ca-ingres

Step2:Ingresパッケージの強制削除
%)rpm -e -f --noscripts パッケージ名

※Step2で、依存関係でエラーになる場合は、エラーの出たパッケージを先に削除

Step3:ARCServe のインストール
%)install

ランレベルについて

ランレベルについて、以下抜粋
 
ランレベル

意味
 
0
シャットダウン(システムの停止)
 
1
シングルユーザーモード(rootのみ)
 
2
ネットワークなしのマルチユーザーモード
 
3
通常のマルチユーザーモード(テキストログイン)
 
4
未使用
 
5
グラフィカルログインによるマルチユーザーモード
 
6
システムの再起動

 動作モードが異なるということは、起動されるプログラムが違うということだ。Linuxでは、
ランレベル別のディレクトリ(/etc/rc.d/rc?.d)にあるファイル
(実際には各プログラムの起動スクリプトへのリンク)の名前により、
各ランレベルで実行するプログラムを指定している。

 例えば、ランレベル3の場合は/etc/rc.d/rc3.dにあるスクリプトが実行される。
/etc/rc.d/rc3.dには、「Kと2けたの数字」で始まるファイルと、
「Sと2けたの数字」で始まるファイルがある。
「K」はKill、つまり実行されないスクリプトを表し、「S」はStart、
つまり実行されるスクリプトを表す。KやSに続く数字は、
実行されるスクリプトの優先順位だ。数字の小さいスクリプトから順に実行される。

シェルでSQLファイルを実行させる方法

sqlplus ID/PASSWORD@SID < $HOME/script/data.sql


※data.sqlファイルに、実行SQLを記述する。

シェルでFTPする方法

ftp -n IPアドレス << _EOF
user iposusr ipospsw
cd /tmp
get aaa.txt
bye
_EOF

ARCServeで、E1138 メディアを検出できませんでした。 タイムエラーの対応

【事象】
ARCServeにて、バックアップジョブをスケジュール化して、実施したところ、
E1138 メディアを検出できませんでした。 タイムエラー。」が発生し、ジョブが異常終了。

【対応】
以下、Web、抜粋
ARCserveはメディアをラベル名とIDさらにはシーケンス番号で管理します。
ラベル名はフォーマットした際の名前ですね、さらにIDは一意の番号になります。
ラベル名:月曜日+ID:0001、とラベル名:月曜日+ID:F001とは表面上同じように見えますがARCserveではまったく別のメディアとして管理されています。
同じ名前で複数のメディアをフォーマットしてもかまわないのですが、IDは必ず別のものになります。
シーケンス番号は一本のメディアに収まらなかった場合の2本目のメディアがシーケンス番号「2」になります。(この際のラベル名、IDは一緒になります、シーケンス番号だけが違う)

想定するに今回の問題は下記のような状態かなぁと思われます。

1.即時実行でバックアップ、バックアップ対象は現在テープ装置に入っているメディア「ラベル名:フルバックアップ+ID:AAAA」、「上書き - 同名のメディア、ブランク メディアのみ」<=標準の設定
バックアップ対象にするターゲットを選択する際、ついそのメディアを選んでしまうんです。
2.バックアップは正常に実施される
ただし、メディアは上書<=つまりフォーマットされます<=「ラベル名:フルバックアップ+ID:BBBB」
フォーマットされるのでIDが変わってしまうんです!
3.即実行のジョブを変更してそのまま繰り返しのジョブとして登録すると。。。。
バックアップ対象のターゲットは「ラベル名:フルバックアップ+ID:AAAA」のままです。
4.バックアップは失敗します。対象のメディアがないといわれる、なぜ??
バックアップのジョブではターゲットは「ラベル名:フルバックアップ+ID:AAAA」
しかし現在入っているメディアは2でフォーマットされて「ラベル名:フルバックアップ+ID:BBBB」
これはバックアップ対象にしたものと違うメディアなんです。

対処方法
1.何でも上書してしまう問題があるのですが、すぐに確認するには最適な方法で
「上書き - 同名のメディア、ブランク メディア、その他のメディア」にしてしまう。
※テープ装置がローダ(複数のメディアを入れることができる装置)なんかだと絶対やってはいけない方法ですけど。(常に1スロット目のメディアしか使用されません)
2.IDは無視して再利用してもらう設定
本当はこの設定が良いです。
Windows版でもLinux版でもバックアップ対象をデスティネーションで選ぶ際、メディアを選ばず
グループを左ペインで選び(例:GROUP0)、上のメディア名が[*]になりますのでここに[フルバックアップ]など直接キーボードから入力してくださ い。<=これでIDがどんなものでも「ラベル名:フルバックアップ」が利用されます。この入力は登録直前に行うのをお勧めします。(ソース画面を設定した りしてると設定がなくなることがありましたので)

※確認方法:ジョブステータス画面で対象のジョブを選ぶとしたのペインにジョブ詳細が表示されますがその中でメディアIDが表示されていなかったり、[*]になっていればOKです。
※この設定はr11.5のWindows版なら「名前のみを使用してメディアを区別する」のオプションがあるのですがLinux版は確かないので直接入力します。

ARCserveの繰り返しジョブで失敗する(1回目は良いけど。。)多くのケースがこれです。
画面を見ながら、試験してみてください。

2008年12月17日水曜日

ARCServe Agent for OracleでOracleDBにログインできない件の対応

【事象】
ARCServeの管理画面からバックアップマネージャにて、
DBのあるサーバにログイン後、該当するDBにログインすると、
Database is offline というエラーになって、バックアップ対象ファイルが見えない

【対応】
回避
ログを見ると、Oracleユーザにロックが掛かっており、見えないと判明。
暫定的に、ロックを解除して回避
根本的に、なぜ、ロックが掛かっていたかは不明(調査中)

ARCServe でインストール時にライセンスキーが入らない場合の対応

前提:ARCServe Backup 11.5 for linux

インストール時に、購入時のライセンキーを入力しても、Invalid Lisenceと言われる場合、
以下の対応にて、回避をした。

1.インストール時は、ライセンスキーをいれずに、Skipして、そのままインストール
2.インストール完了後、以下のディレクトリのコマンドを実行してキーを投入。
/opt/CA/SharedComponents/ca_lic/CALicense ライセンキーNO

特定のセッションを停止

以下のSQLを実行

ALTER SYSTEM KILL SESSION '7,15';

※'7,15'は 接続中のセッションのSID,SERIAL#

接続中のセッション情報を表示

以下のSQLを実行

SELECT SID,SERIAL#,STATUS
FROM V$SESSION WHERE USERNAME = 'caomu';

USERNAMEは、該当するユーザを指定して、検索が可能。

Oracleユーザ削除

以下のコマンドを実行

%)sqlplus /nolog
SQL>conn sys as sysdba
SQL>drop user caomu cascade;

cascadeのオプションつきで、関連しているデータも消えます。

Oracleユーザ作成

SQL*PLUSから以下のコマンドを実行

%)sqlplus /nolog
SQL>conn sys as sysdba

SQL>create user caomu
SQL>identified by caomu
SQL>default tablespace users
SQL>temporary tablespace temp;

bash プロンプトの変更方法

bashのプロンプトを変更するには

Linuxの標準シェルであるbashでは、PS1という環境変数によってプロンプトを定義している。
従って、exportコマンドでPS1を変更すればいい。

 デフォルトでは「[ユーザー名@ホスト名 カレントディレクトリ]」というプロンプトになっている。これを単純に「$」というプロンプトに変更するには、以下のコマンドを実行する。
export PS1="$ "

 デフォルトのプロンプトに戻すには、以下のコマンドを実行する。
export PS1="[\u@\h \W]\\$ "

 bashのプロンプトには、以下のような特殊な文字を使用できる。これらを組み合わせれば、オリジナルプロンプトも作成可能だ。
\a ASCIIのベル文字(07)を表示する(ビープ音を鳴らす)
\d 「曜 日 月 日」の形式(例:Fri Jan 5)で日付を表示する
\e ASCIIのエスケープ文字(033)を表示する
\h ホスト名のうち最初の「.」までの部分を表示する
\H ホスト名を表示する
\n 改行する
\r 復帰する
\s シェルの名前を表示する
\t 現在の時刻を24時間の「HH:MM:SS」形式で表示する
\T 現在の時刻を12時間の「HH:MM:SS」形式で表示する
\@ 現在の時刻を12時間の「am/pm」形式で表示する
\u 現在のユーザー名を表示する
\v bashのバージョンを表示する
\V bashのリリースを表示する
\w 現在の作業ディレクトリを、ユーザーのホームディレクトリからの絶対パスで表示する
\W 現在の作業ディレクトリを表示する
\! このコマンドの履歴番号を表示する
\# このコマンドのコマンド番号(現在のシェルのセッション中に実行されたコマンドのシーケンスにおける位置)を表示する
\$ 実効UIDが0の場合に#となり、それ以外の場合に$となる
\nnn 8進数nnnに対応する文字を表示する
\\ バックスラッシュを表示する
\[ 非表示文字のシーケンスを開始する。これを使って、プロンプト中に端末の制御シーケンスを埋め込むことができる
\] 非表示文字のシーケンスを終了する

VPN経由でARCServeの管理画面でエラーの対応方法

前提:VPN Clientで、ARCServe Backupがインストールされているサーバへアクセス。

以下のポートがルータに定義されていなかったためと判明。
TCP :80
6060
6072
6051
UDP:6051

ネットワークの設定

■ネットワークカードの情報
 /etc/sysconfig/network-scripts/ifcfg-eth*(*は任意の数字です)
■ルーティングの情報
 /etc/sysconfig/static-routes
■ホスト名やゲートウェイ情報
 /etc/sysconfig/network
に保持されています

gatewayだけの情報を維持したいのであれば/etc/sysconfig/networkに
GATEWAY="xxx.xxx.xxx.xxx(任意のIP)"としておけばいいでしょうし
ルーティング情報を保持したいのであれば
/etc/sysconfig/static-routesにrouteコマンドのroute add以下の
記述内容を入れておけばネットワーク再起動後でも反映されます。
##勿論上記更新後にネットワークの再起動をお忘れなきよう。

# TurboLinux Static Routes File
# Generated by TurboNetCfg's Routing plug-in module.
# Generated on Tue Apr 18 14:31:14 2000

eth1 net ???.???.???.??? netmask ???.???.???.??? gw ???.???.???.???

Java Out Of Memoryが発生したときのアプローチ

以下、Webからの抜粋

【OutOfMemoryError が出た時のアプローチ(①)】
OutOfMemoryError はメモリの使用量がヒープメモリサイ ズの指定を超えると発生します。
OutOfMemoryError に陥るケースは二つあります。

 (A) 不要なオブジェクトが無駄にメモリに残っている場合
 (B) ヒープサイズの絶対量が不足している場合
 以下にそれぞれの対処を記します。

  (A)不要なオブジェクトが無駄にメモリに残っている場合
  この場合、まず問題のあるオブジェクトを 見つけます。
  問題のあるオブジェクトに対して、以下の対処を施します。

   1. 不要になったオブジェクトは参照を破棄 ( 変数に null を代入 ) する

使い終わった不要なオブジェクトをメモリから解放し、メモリを有効活用でき るようにします。
Java の場合、使い終わった不要なオブジェクトはガーベージコレクション ( 以下 GC ) によりメモリから解放されます。
通常、GC が行われることで OutOfMemoryError は発生しません。

この GC は不定期に実行されるもので、「不要となったオブジェクト」を解放 します。
GC は解放の前に「不要であるかどうか」判断します。

GC が実行されても、GC が不要と判断しない限り、オブジェクトはメモリから 解放されません。

GC は「オブジェクトへの参照が無い」事を見て不要と判断します。

GC にメモリを解放してもらうためには、プログラマ上では「この時点でこのオブジェクトはもう要らないな」 と判断できるところで、
そのオブジェクトへ の参照がない状態すなわち変数の値を null 値にします。

    2. Session オブジェクトに大きなオブジェクトを格納する事は極力避ける

SSJS、サーブレット、JSP の場合、Session にオブジェクトを格納して 画面間でデータを持ちまわったり画面遷移の制御をする
と思います。

Session に格納する時は、必要な分だけに留めるべきです。

アクセスが集中した時、セッション数が増えます。 大きなオブジェクトを格納するとセッションの数に比例してメモリ使用量が

大きく増加することとなる。

    3. Session に格納した場合、不要となった時点で削除する

格納したオブジェクトは不要になった時点で、セッションから削除します。

削除を怠れば、セッションタイムアウト時間までJava VM のメモリ上に残ったままになります。

(B) ヒープサイズの絶対量が不足している場合
上記(①)で対処を行ってもなお OutOfMemoryError が発生する場合は、システム の規模等に対し、ヒープサイズが不足しています
ので -Xms、-Xmx パラメータの値を調整して ヒープサイズを大きくとります。この時に設定する値は-Xms、-Xmxともに同じ値を設定する。

パラメータ -verbose:gc を使用することでFullGC の発生頻度、メモリ使用量、GC の 種類が確認できますので、得られた結果からチュー
ニングを行います。 設定できる値はディスクスワップの発生しないサイズ、すなわち物理メモリサイズです。
最大負荷をかけるテストを行い、FullGC の頻度と FullGC の実行時間を確認し、以下を 目安に調整します。

* FullGCの発生頻度が多い場合
ヒープサイズを大きくとる
Java VMパラメータでNew領域の内容を調整し、オブジェクトがOLD領域に移動しないようにする。

※Java VMパラメータにつきましては、以下のURLがチューニングの参考になります。
http://java.sun.com/docs/hotspot/
http://www.ingrid.org/java/jserv/performance
http://www.atmarkit.co.jp/fjava/rensai2/webopt06/webopt06.html
http://www.atmarkit.co.jp/fjava/rensai2/webopt09/webopt09.html


(2)Java VMパラメータチューニングによる安定動作の運用事例
現在まで弊社に届いた情報を元に安定的な稼動に成功している事例に共通する事項をまとめてみました。

以下の事項は、安定稼動が達成されている動作環境要件 と安定稼動を実現する為に行われたSun JavaVMのパラメータチューニング

についてより具体的な情報を記載いた します。
(A)動作環境要件

intra-martシステム稼動前のFreeメモリ容量(1サーバ当りの容量で仮想メモリは含みません。): 2GByte以上
(B)安定的な稼動を実現したSun JavaVMのパラメータ

Unix系
-Xms=1024m -Xmx=1024m -XX:PermSize=128m -XX:MaxPermSize=128m -XX:NewSize=320m -XX:MaxNewSize=320m
-XX:SurvivorRatio=2 -XX:TargetSurvivorRatio=80

Windows系
-Xrs -Xms=1024m -Xmx=1024m -XX:PermSize=128m -XX:MaxPermSize=128m -XX:NewSize=320m -XX:MaxNewSize=320m
-XX:SurvivorRatio=2 -XX:TargetSurvivorRatio=80

※上記パラメータは2行で表現されておりますが 実際に設定される場合は一行です。

再起動時にファイルシステムのチェックを行なう方法

以下のコマンドを実施

%)shutdown -F -r now
-Fがファイルチェックのオプション

パッケージの強制削除方法

以下のコマンドにて、実施。
rpm -e -f --noscripts パッケージ名

ファイルの文字コードを見る方法

以下のコマンドを実行

%)file ファイル名

exp)
file stock.csv
stock.csv: ASCII text, with CRLF line terminators

SQLファイルにパラメタを渡す方法

前提:シェルスクリプトからSQLファイルをコールし、シェルのパラメタをそのまま
    SQLファイルに渡して実行する

#!/bin/sh
# 実行するシェル
# パラメタ$1
# パラメタ$2
${ORACLE_HOME}/bin/sqlplus test/test@testora test.sql $1 $2


----------------------------------------------
test.sql
spool test.log

SELECT COUNT(*) FROM TM_PRD
WHERE M_DATE BETWEEN &1 AND &2;
spool off;     (↑引数部分を"%1"、"%2"では
exit;          なく、"&1"、"&2"とする)

2008年7月20日日曜日

第4回 Oracle10gインストール

さて、いよいよ、Oracle10gのインストールです。ではでは、いってみましょう!

1.Oracle10gのDVDを投入。
 念のため、内蔵HDにコピーしておく。

2.Linuxにログインし、インストーラを実行
① xhostコマンドを投入
   %)xhost +
②oracle ユーザにswith
%)su - oracle
③インストーラの実行
   %)runInstaller

3.インストールの設定とインストール
  GUIで操作していくので、それにしたがって入力を行っていく。
①拡張インストールを選択して、次へ
②Inventoryのインストール先を選択して、次へ
今回は、/opt/oracle/oraInventory 配下を選択
③Oracle インストール先を選択して、次へ
今回は、/opt/oracle/product/10.2.0.1.0 配下を選択
③Oracleのインストールタイプを選択、製品言語を追加して、次へ
    インストールタイプは、Standard Edition、製品言語は、英語・日本語・中国語(2種類)を追加
④構成オプションの選択、次へ
  後で、DBを作成するので、ここでは、データベースソフトのみをインストール
⑤各インストール要件のチェック
インストールのチェックをインストーラが行ってくれるので、
そこで、すべて問題がなければ、次へ
問題があれば、インストールに必要な条件を満たした上で
再度、インストールを実施すること
⑥確認後、インストール
⑦インストール後、rootにて、orainstRoot.sh,root.shを実行
別のterminal を開いて、rootにて、orainstRoot.sh, root.sh を実行

2008年7月18日金曜日

swapファイルの追加方法

1.ddコマンドの実行
dd if=/dev/zero of=/swap/swap1 bs=1024 count=65536
"of="以降は、作成するswapファイルを指定。
 上記例の場合、/swapにswap1というswapファイルが作成される。

bsでバイト単位(ここでは1024バイト単位)を指定する。
countの数値は、幾らswap領域として新たに確保するのかに依る。
たとえば上記count=65536では、64MBのswapファイルを作成している。
計算式はbs値×用意MB(ここでは1024x64=65536)。


2.パーミッションの変更
chmod 600 /swap/swap13.swapファイルを初期化する。
mkswap /swap/swap1 65536

4.swap領域を有効にする
swapon /swap/swap1

※無効にするには
swapoff /swap/swap1
起動時に自動的に有効にする場合は、
/etc/fstab に以下の行を追加。
/swap/swap1 swap swap defaults 0 0

ORACLEのインストールに失敗したら・・・

ORACLEのインストールに失敗した場合、以下のファイルを削除すること。

1./etc/oraInst.locファイル
  /etc/oratabファイル
  /tmp/OraInstall* ファイルを削除する

2.中途半端にインストールされているOracle プロダクトも削除

rootアカウントを削除してしまったら・・・

1.シングルユーザモードで起動
LILOを使用している場合、マシンを再起動させて、
LILO boot: のプロンプトから
LILO boot:linux single を入力
もしくは、
LILO boot: linux 1

 GRUBの場合は、
GUIのメニューが表示されたら[A]キーを押す。
すると、
grub append> ro root=/dev/hda1

のようなプロンプト(grub append>)と
コマンドライン(ro root=/dev/hda1)が表示されるので、最後に「s」を追加する。
grub append> ro root=/dev/hda1 s

2./etc/passwd を変更

root:x:0:0:root:/root:/bin/bash
という行を追加する。

 もし/etc/shadowからもrootが消えているようなら、同じくエディタで開いて、
root::11376:0:99999:7:::

のような行を追加する。
ただし、この状態ではパスワードが設定されていないので、
すぐにpasswdコマンドでパスワードを設定する

バイナリファイルの表示方法

バイナリファイルの表示方法

Linuxでバイナリファイルを表示するときは、odコマンドを使う。
ただし、odは標準出力に結果を出力するので、moreやlessで画面が止まるようにしなければ、
一気に最後まで表示してしまう。

 odの主なオプションは以下。
  -a 文字の名前で表示する
  -b 8進でバイトを表示する(デフォルト)
  -c ASCII文字またはバックスラッシュ付きのエスケープ文字として表示する
  -d 符号なし10進short として表示する
  -f floatとして表示する
  -h 16進shortとして表示する
  -i 10進shortとして表示する
  -l 10進longとして表示する
  -o 8進shortとして表示する
  -x 16進shortとして表示する

OSの時間変更における影響について

Oracle 上で OS のシステム日時に変更があった場合には
下記のことが発生すると考えられます。

Oracle は時間情報を更新履歴のファイルと
各ファイル(制御ファイル、データファイル、REDO ログ)内に持っています。

* OS の時間を進める場合
特に問題は発生しないと考えられます。 
* OS の時間を遅らせる場合
o 時間指定でのリカバリができなくなる。
+ OracleはREDOログにタイムスタンプを持っています。
このタイムスタンプはトランザクション実行時のシステム時刻が
ベースとなっています。時間ベースのリカバリでは、
リカバリ指定時刻より未来のタイムスタンプが現れた時点でREDOの適用は
終了します。
o 未来に作成された表などをアクセスできなくなる。
+ 未来の作成日時を持つオブジェクトにアクセスすると、
ORA-1466が発生してデータを読み込むことができません。
CONSISTENT=Yでのエクスポートについても
内部的にSET TRANSACTION READ ONLY文が実行されますので、
同様の状況が発生する可能性があります。
o SYSDATE を使用したアプリケーションが正常に動作しなくなる。
+ SYSDATE関数はシステム時刻をもとに値を返しますので、
システム時刻の変更によりユーザ・アプリケーション、
ユーザ・データの整合性に影響を及ぼす可能性があります。
o ジョブ・キュー・プロセスによって実行されるジョブが正常に動作しなくなる。
+ ジョブ・キュー・プロセス(SNP)によって実行されるジョブは、
システム時刻をもとにスケジュールされています。
ユーザが作成しスケジュールしたジョブばかりでなく、
マテリアライズド・ビュー(スナップショット)の自動リフレッシュや
遅延トランザクションの伝播等でもジョブ・キューは使用されています。
ジョブが実行されるタイミングに関して十分な考慮が必要となります。

但し、ミリ秒単位で戻すのは問題ないようです。
内部は秒単位で管理しているようです。
また、時間を通常より遅く進めても構わないようです。
但し、OS 時間で1秒間に SCN
(System Change Number : COMMIT する都度、
増加する数)が16,000以上増加させる事はできません。

Oracle ではインスタンス起動中での、
OS のシステム日時の変更はサポートされていません。
また、インスタンス停止中であってもシステム日時を戻すことは、
「OS の時間を遅らせる場合」の状況が発生する場合がある可能性があります。

システム時間を整合性を持って戻すには、データベースを停止し、
システム時刻を戻した後、データベースを停止した時点のシステム時刻になるまで
データベースを起動しない。のが一番良いと思います。

上記のことから、

構成

* クラスタを構築したシステムでは、外部との時間同期を行わない。
あくまでノード間でのみ時刻を同期させる。
(外部の時刻源に合わせて、クラスタ内の時間が進んだり、戻ったりすることが発生するから。)
* Windows Time(W32Times) の時刻源となるサーバを自分自身とする。
具体的には、コマンド・プロンプトから
 net time /setsntp:サーバ名 と入力する。
設定を確認するのは
 net time /querysntp と入力すると設定されている SNTP サーバ名が表示される。
o 但し、私の環境下では SNTP サーバを設定しても、
W32Time がイベントにエラーを吐いているのは消えなかったので、
net time の設定は削除しました。
予測ですが、このサーバは PDC FSMO ではないため、
自分自身の W32Time から見て、 SNTP サーバの役目を行っていないためだと思います。
自分自身を時刻源として設定できるのは、
自分が PDC FSMO でないとできないかと考えられます。
また、 Windows Time のサービス自体を止めてしまおうかと考えましたが、
Windows Time サービスに依存しているサービスとして
"Cluster Service"が存在したので停止できませんでした。
現状でも、このエラーは出ている状態です。
* 「タイム・リソース・サービス」を保有するノード上に Oracle の DB を構築する。
(時刻源であるノード上にあれば、Oracle の時間の戻りは発生しないと考えられる。)
* フェィル・オーバ、フェィル・バックが発生しても、
「タイム・リソース・サービス」で同期を取っているので、
問題は発生しないと考えられる。
(微妙に時間のずれが発生する可能性はあるが、特に問題は出ないと考えられる。)

時間の合わせ方

1. Oracle のインスタンスを停止させる。
(Oracle 保持しているクラスタ・グループをオフラインにする。)
2. 「タイム・リソース・サービス」を保有しているノードの時間を合わせる。
(手動で「net time」のコマンド等を使用して、外部の時刻源と時間を合わせる。)
3. 別のノードの時間を「net time」のコマンドを使用して、
「タイム・リソース・サービス」を保有しているノードに合わせる。
NET TIME \\サーバ名 /set /y

OS の時間を進める場合は問題ないと考えられるが、
OS の戻す場合には Oracle のインスタンスを停止させた後、
あるポイントでの時刻を記録し、その時刻を基準となる時刻が越えてから時刻合わせを行う。
4. Oracle のインスタンスを起動する。
(Oracle 保持しているクラスタ・グループをオンラインにする。)

大規模なサーバ環境下では、それなりのサーバを使用しており、
それなりのハードウェア・クロックを内蔵しており、
また、温度管理のされたマシンルーム等に設置されていると思われるので、
システム時間が大幅にずれてくることは少ないと思います。
その為、半年程度に1回程度、合わせるのが現実的かと思います。

ORA-28000 ユーザにロックが掛かってしまったとき・・・

1.sysもしくはsystemでログイン
sqlpus /nolog
conn sys as sysdba

2.ACCOUNT STATUSを確認
select username, account_status, lock_date from dba_users;

3.アカウントを解除
alter user (username) account unlock;

ORA-25153 一時表領域が空のエラーになったとき・・・

以下を確認する。

1.デフォルトの一時表領域を確認
select property_name, property_value from database_properties;

2.一時表領域を変更したい場合に以下を実行
alter database default temporary tablespace temp;

3.ユーザの一時表領域が2で変更したテーブルスペースになっているか確認
select username, temporary_tablespace, account_status from dba_users;

4.不正なテーブルスペースがある場合、変更する
alter user sys temporary tablespace temp;

SQL/LOADERでエラーになったとき・・・

エラー内容:
SQL*Loader-704: 内部エラー: ulconnect: OCIServerAttach [0]
ORA-12154: TNS: サービス名を解決できませんでした。

エラー原因:
  tnsname.ora のサービス名と
  listener.ora のサービス名が不一致していたので、一致させて解消

登録ユーザの確認方法

SELECT USERNAME,
DEFAULT_TABLESPACE,
TEMPORARY_TABLESPACE,
PROFILE,
CREATED,
ACCOUNT_STATUS
FROM DBA_USERS
;

初期パラメータ確認方法

SELECT NUM, NAME,
VALUE,
ISSYS_MODIFIABLE,
TYPE
FROM V$PARAMETER
;

テーブルスペースの情報確認方法

SELECT TABLESPACE_NAME,
INITIAL_EXTENT,
NEXT_EXTENT,
MIN_EXTENTS,
MAX_EXTENTS,
PCT_INCREASE,
MIN_EXTLEN,
STATUS,
EXTENT_MANAGEMENT,
ALLOCATION_TYPE
FROM DBA_TABLESPACES
;

テーブルスペースの使用状況確認方法

SELECT T.TABLESPACE_NAME,
TRUNC(T.BYTES/(1024*1024),0) TOTAL_M,
ROUND((T.BYTES - SUM(F.BYTES)) / (1024*1024),0) USED_M,
ROUND(SUM(F.BYTES) / (1024*1024),0) FREE_M,
ROUND((1-SUM(F.BYTES) / T.BYTES)*100,2) RATE
FROM SYS.DBA_FREE_SPACE F,
(SELECT TABLESPACE_NAME,
SUM(BYTES) BYTES
FROM SYS.DBA_DATA_FILES
GROUP BY TABLESPACE_NAME) T
WHERE T.TABLESPACE_NAME = F.TABLESPACE_NAME(+)
GROUP BY T.TABLESPACE_NAME,
T.BYTES
;

テーブルスペースの空き領域確認方法

SELECT B.FILE_NAME,
A.BYTES
FROM DBA_FREE_SPACE A,
DBA_DATA_FILES B
WHERE A.TABLESPACE_NAME = 'USERS'
AND A.FILE_ID = B.FILE_ID
;

テーブルスペースのオブジェクト情報取得方法

SELECT SEGMENT_NAME,
OWNER,
SEGMENT_TYPE,
TRUNC(BYTES/(1024*1024),0) AREA_M
FROM DBA_SEGMENTS
WHERE TABLESPACE_NAME = 'SYSTEM'
ORDER BY SEGMENT_TYPE,
SEGMENT_NAME
;

SGAの確認方法

SQL/PLUSで入って以下のSQLを実行
SELECT NAME,
VALUE
FROM V$SGA
;

第3回 Oracle10gインストール事前作業

今回は、Oracle10g をインストールするための事前作業をします。

インストールするOSは、Red Hat Enterprise Linux ES 4 Upate5 x86です。

事前のシステム条件を良く調べる必要あります。

1.インストール事前準備
①グループの作成
・dba … OSDBAグループ
・oper … OSOPERグループ
・oinstall …Oracleインベントリグループ
例)groupadd dba

②oracleユーザの作成
例)useradd -g oinstall -G dba,oper -s /bin/bash -d /home/oracle oracle

③oracle ユーザのパスワード設定
例)passwd oracle

④インストールディレクトリの作成
例)mkdir /opt/oracle/product/10.2.0.1.0
mkdir /opt/oracle/product/oraInventory
chown oracle:oinstall /opt/oracle/product/10.2.0.1.0
chown oracle:oinstall /opt/oracle/product/oraInventory
chmod -R 755 /opt/oracle/product/10.2.0.1.0
chmod -R 755 /opt/oracle/product/oraInventory

⑤libaioパッケージのインストール
Red Hat Linux の4枚目のCD-ROMに、libaioのパッケージが含まれているので、
それをローカルのディスクへコピー後、インストールを実施する
 
⑥カーネルパラメタの編集
/etc/sysctl.conf ファイルに以下の項目を追加
追加する前には、必ずバックアップをとること。
kernel.shmall = 2097152
kernel.shmmax = 2147483648 ←物理メモリサイズの1/2(バイト単位)
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
net.core.rmem_default = 262144
net.core.rmem_max = 262144
net.core.wmem_default = 262144
net.core.wmem_max = 262144


⑦/etc/hosts ファイルの編集
hostsファイルに、サーバのIPとサーバ名を定義する

⑧/etc/network ファイルの編集
HOSTNAMEに、/etc/hostsで定義したサーバ名を定義する

⑨リブート
%)shutdown -r now

第2回 OSのインストール

まず、今回、手配してもらっているOSをサーバへインストールします。
画像が貼り付けられないのが、残念ですが、とりあえず、手順の流れを記述します。

DELLの場合、DELLが用意しているUtilityのCDとOSのDVD1枚で全てが完了します。

1.DELLのUtility CD を サーバにいれて、電源オン
デフォルトで、CD-ROMからブートになっている?
(なってない場合は、BIOSの設定を変更して、CD-ROMをはじめに読み込むように変更する)

2.OSインストールの事前設定を行う
①RAIDの設定
今回、内蔵DISKが2枚しかないので、RAID-1で、構成を実施。
RAIDの設定を行う。
②サーバの時刻を選択
画面にでてくるOSのインストールをクリックして、
サーバ時刻を選択、タイムゾーンの設定があるので、それを中国で選択
③ネットワークデバイスの設定
今回のサーバには、NICが2つついていますが、1つしか使用しないので、
etho1? のIPアドレスを固定で暫定的に設定。(以後、顧客先へ搬入時に再度変更予定)
2つめのNICは無効で設定
④RAID構成の設定
RAID1 をチェックして、該当する物理デバイスも選択
⑤インストールする該当OSを選択
今回、Oracle 10g の手配が x86 32bit のものであるため、
Red Hat Enterprise Linxu ES 4 Update5 x86 32bit を選択
※PP群の相性を事前に確認しておく必要ありです。
今回、PPが順次に送付されてきた為、Oracle10g インストール時にリンクエラーが発生。
調べてみると、OSはx86 64bit で Oralce は、x86 版で 整合性が取れず
エラーになっており、Linuxを再インストールしました。

⑥rootのパスワード・デフォルトゲートウェイ・DNSサーバのIPアドレス・FireWallの設定
デフォルトゲートウェイ・DNSサーバも暫定的に、会社内部で使用しているものを設定
(以降、顧客先へ搬入時に、再度変更予定)
FireWallはとりあえず、無効にて設定
⑦スライスの定義
※swapは、あとからもファイルで作成できますが、ここでちゃんと定義しておきましょう。
物理メモリの約2倍が必要です。
  
3.OSのインストール
①OSのDVDと交換投入
DELLのUtilityCDでOSの基本的な設定が可能。
途中で、CDをOSのDVDを入れる問い合わせがくるので、
DVDを続けて投入(この時点では、DVDから該当のデータをサーバへコピーしている模様)
   
②サーバの自動再起動
その後、サーバが自動で再起動される。

③OSのインストール
再起動後、Red Hatの画面で、実際のインストールが行われる。
インストールが終わると、再度、サーバが自動再起動され、loginプロンプトが表示される。
   
④DELLサーバ管理ツールのインストール
login プロンプトからログイン後、DELLサーバ管理ツールのインストールの是非を
聞かれるので、yesでインストール及び、サービスの起動も行う

第1回 ハード・ソフト構成

まずは備忘録として記録を残します。

サーバサイドのアプリケーションをLinux上に構築していきます。
今回は、1筐体にDB及びWebアプリケーションを載せる構成です。
また、ネットワークについては、Clinet VPNの構築のみ。(Internet VPNはないです)


ハードウェアの構成
DELL Poweredge R200
DELL PowerVault114T
NetScreen SSG5

ソフトウェアの構成
RED HAT ENTERPRISE LINUX ES Version4 Update5 x86 32bit
Oracle 10g R2(10.2.0.1.0)
BrightStor ARCServe Backup for Linux r11.5
BrightStor ARCServe Backup for Linux r11.5 Agent for Oracle