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