ラベル Oracle Database の投稿を表示しています。 すべての投稿を表示
ラベル Oracle Database の投稿を表示しています。 すべての投稿を表示

2010/10/21

セッションタイムアウト

概要
何らかの理由で、Oracle Database Server 側にセッションが残る場合がある。
プロファイルの CONNECT_TIME , IDLE_TIME を設定することで、セッションを終了させる事が出来る。
この機能を有効にするには、RESOURCE_LIMIT を TRUE に設定する必要がある。

確認
RESOURCE_LIMITを確認 (初期値はFALSE)
SHOW PARAMETER RESOURCE_LIMIT
ユーザのプロファイルを確認 (注)ユーザは、明示してプロファイル指定しなければ、「DEFAULT」プロファイルが適用される
SELECT USERNAME, PROFILE FROM DBA_USERS;
プロファイルの内容を確認 (注)プロファイルDEFAULTのCONNECT_TIME,IDLE_TIMEは共にUNLIMITEDが初期値である。
SELECT * FROM DBA_PROFILES;

設定
RESOURCE_LIMITを有効にする
ALTER SYSTEM SET RESOURCE_LIMIT = TRUE;
(注)上記はデータベースの再起動なく変更できるが、再起動すると無効となるため、初期化パラメータに設定する必要がある。

ユーザにプロファイルを割り当てる
ALTER USER xxx IDENTIFIED BY XXXXX PROFILE aaa;
プロファイルを作成する。
create profile test01 limit idle_time 100 connect_time 1000
(注)IDLE_TIME,CONNECT_TIME共に単位は分。
プロファイルを削除する。
DROP PROFILE aaa;
資料-DEFAULT
PROFILE RESOURCE_NAME RESOURCE_TYPE LIMIT
DEFAULT COMPOSITE_LIMIT KERNEL UNLIMITED
DEFAULT SESSIONS_PER_USER KERNEL UNLIMITED
DEFAULT CPU_PER_SESSION KERNEL UNLIMITED
DEFAULT CPU_PER_CALL KERNEL UNLIMITED
DEFAULT LOGICAL_READS_PER_SESSION KERNEL UNLIMITED
DEFAULT LOGICAL_READS_PER_CALL KERNEL UNLIMITED
DEFAULT IDLE_TIME KERNEL UNLIMITED
DEFAULT CONNECT_TIME KERNEL UNLIMITED
DEFAULT PRIVATE_SGA KERNEL UNLIMITED
DEFAULT FAILED_LOGIN_ATTEMPTS PASSWORD 10
DEFAULT PASSWORD_LIFE_TIME PASSWORD UNLIMITED
DEFAULT PASSWORD_REUSE_TIME PASSWORD UNLIMITED
DEFAULT PASSWORD_REUSE_MAX PASSWORD UNLIMITED
DEFAULT PASSWORD_VERIFY_FUNCTION PASSWORD NULL
DEFAULT PASSWORD_LOCK_TIME PASSWORD UNLIMITED
DEFAULT PASSWORD_GRACE_TIME PASSWORD UNLIMITED

2010/10/17

sqlplusの折り返し

sqlplus接続後次のコマンドを実行する。
set linesize [桁数]

set linesize 1000

INACTIVEの状況を確認する

次のSQLで、アイドル時間を調べる。
SELECT SID,USERNAME,STATUS,LOGON_TIME,LAST_CALL_ET FROM V$SESSION;
select sid,username,status,last_call_et from v$session where status='INACTIVE' order by last_call_et desc;
last_call_et は秒。

2010/07/15

最大オープン・カーソル数を超えました。

状況
ORA-01000 最大オープン・カーソル数を超えました。
原因
ホスト言語プログラムがオープンしようとしているカーソルの数が多すぎます。1ユーザー当たり(セッション毎)のカーソルの最大数は、初期化パラメータOPEN_CURSORSによって決定されています。
対応
1.初期パラメータを調べる。
SQL> SHOW PARAMETER OPEN_ CURSORS
2.現在の状況を調べる。
SQL> SELECT SID, USER_NAME, COUNT(SID) FROM V$OPEN_CURSOR GROUP BY SID,USER_NAME
3.処置する。
a)不正なプログラムを修正する。
次のSQLを実行し、同じSQLが多数ある場合はクローズしていない可能性がある。
SQL> SELECT SID, USER_NAME, SQL_TEXT FROM V$OPEN_CURSOR;
b)初期パラーメータを変更する。

2010/04/09

フラッシュリカバリ領域のアーカイブログをOSコマンドで消してしまったとき

flash_recovery_areaのアーカイブログファイルをOSコマンドで削除してしまうと管理上のサイズと不一致を起こす。

回復手順

rman target / nocatalog

RMAN> CROSSCHECK ARCHIVELOG ALL;
RMAN> DELETE EXPIRED ARCHIVELOG ALL;

2010/03/13

用語集

http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/network.102/B19208-02/glossary.htm#61568

ネーミング・メソッド

環境

Oracle Databse 10g R2

ネーミング・メソッド

データベース・サーバーへのクライアント接続に関する接続ための方法
  1. ローカル・ネーミング クライアントのtnsnames.oraファイルに格納されたネット・サービス名を解決します。
  2. ディレクトリ・ネーミング 集中化されたLDAP準拠のディレクトリ・サーバーに格納されたデータベースのサービス名、ネット・サービス名またはネット・サービス別名を解決します。
  3. 簡易接続ネーミング 構成を行うことなく、データベース・サーバーにクライアントを接続できます。クライアントは、ホスト名、オプション・ポート、サービス名から構成される簡単なTCP/IPアドレスの接続文字列を使用します。
    CONNECT username/password@host[:port][/service_name]
  4. 外部ネーミング サード・パーティ製のネーミング・サービスに格納されているサービス情報を解決します。

tnsnames.oraサンプル

sales=
(DESCRIPTION=
(ADDRESS= (PROTOCOL=tcp)(HOST=sales-server)(PORT=1521))
(CONNECT_DATA=
(SERVICE_NAME=sales.us.acme.com)))

簡易接続ネーミング・メソッド構成検証手順

  1. Oracle Net Managerを起動します。
  2. ナビゲータ・ペインで、「ローカル」→「プロファイル」を展開します。
  3. 右ペインのリストから、「ネーミング」を選択します。
  4. 「メソッド」タブをクリックします。
    「選択メソッド」リストにEZCONNECTがリストされていることを確認します。リストされていない場合は、ステップ5に進みます。
  5. 「使用可能なメソッド」リストから「EZCONNECT」を選択し、右矢印ボタンをクリックします。
  6. 「選択メソッド」リストから「EZCONNECT」を選択し、「上へ」ボタンを使用して選択済項目をリストのトップに移動します。
  7. 「ファイル」→「ネットワーク構成の保存」を選択します。
    sqlnet.oraファイルは、NAMES.DIRECTORY_PATHパラメータで更新され、次のようにhostnameが最初に表示されます。
    NAMES.DIRECTORY_PATH=(ezconnect, tnsnames)

Ref. http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/network.102/B19208-02/naming.htm

WindowsでOracleインスタンスが自動起動しない

環境

Windows 2003 Server R2 SP2
Oracle Database Server 10g R2

チェックポイント

1. Windowsサービス「OracleService[SID名]」のスタートアップの種類を「自動」にする。
2. レジストリのORA_[SID名]_AUTOSTARTの値を「TRUE」にする。
3. ORACLE_HOME\NETWORK\ADMIN\sqlnet.oraで SQLNET.AUTHENTICATION_SERVICES =(NONE)を設定する。

x. NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)

2010/03/02

Oracle Database 11gR2 リスナーの作成

ユーザ oracle でOSにログインし、Oracle Net Condiguration Assistant を起動する。
$ netca
1.「リスナー構成」を選択
2.「追加」を選択
3.「リスナー名」←LISTENER
4.「選択済プロトコル」←TCP
5.「標準ポート番号の1521を使用」を選択
6. 他のリスナーを構成しますか←いいえ
7. 次へ
8. 完了

Oracle Database 11g R2 をインストール

環境

Oracle Enterprise Linux 5
Oracle Database 11g R2
ハードウェア VMware Server 2.0.2 VM, メモリ1GB, ディスク20GB

パッケージのインストール

# yum -y install binutils
# yum -y install compat-libstdc++-33
# yum -y install elfutils-libelf
# yum -y install elfutils-libelf-devel
# yum -y install glibc
# yum -y install glibc-common
# yum -y install glibc-devel
# yum -y install glibc-headers
# yum -y install gcc
# yum -y install gcc-c++
# yum -y install libaio
# yum -y install libaio-devel
# yum -y install libgcc
# yum -y install libstdc++
# yum -y install libstdc++-devel
# yum -y install make
# yum -y install sysstat
# yum -y install unixODBC-2.2.11
# yum -y install unixODBC-devel-2.2.11
実際はこれで可能
yum -y install elfutils-libelf-devel
yum -y install glibc-devel
yum -y install glibc-headers
yum -y install gcc
yum -y install gcc-c++
yum -y install libaio
yum -y install libaio-devel
yum -y install sysstat
yum -y install unixODBC-2.2.11
yum -y install unixODBC-devel-2.2.11

グループとユーザーの作成

# groupadd oinstall
# groupadd dba
# useradd -g oinstall -G dba oracle
# passwd oracle

カーネル・パラメータ

/etc/sysctl.confファイルを編集をします。
注意:現在の値いずれかが最小値より大きい場合は、大きい値を指定します。
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
実際にはこんな感じ
# Kernel sysctl configuration file for Oracle Enterprise Linux
#
# For binary values, 0 is disabled, 1 is enabled. See sysctl(8) and
# sysctl.conf(5) for more details.

# Controls IP packet forwarding
net.ipv4.ip_forward = 0

# Controls source route verification
net.ipv4.conf.default.rp_filter = 1

# Do not accept source routing
net.ipv4.conf.default.accept_source_route = 0

# Controls the System Request debugging functionality of the kernel
kernel.sysrq = 0

# Controls whether core dumps will append the PID to the core filename
# Useful for debugging multi-threaded applications
kernel.core_uses_pid = 1

# Controls the use of TCP syncookies
net.ipv4.tcp_syncookies = 1

# Controls the maximum size of a message, in bytes
kernel.msgmnb = 65536

# Controls the default maxmimum size of a mesage queue
kernel.msgmax = 65536

# Controls the maximum shared segment size, in bytes
kernel.shmmax = 4294967295

# Controls the maximum number of shared memory segments, in pages
kernel.shmall = 268435456

### for Oracle Database 11gR2
fs.aio-max-nr = 1048576
fs.file-max = 6815744
#kernel.shmall = 2097152
#kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
カーネル・パラメータの現行の値を変更するには、次のコマンドを入力します。
# /sbin/sysctl -p

ディレクトリの作成

# mkdir -p /opt/oracle/product/11.2/db_1
# chown -R oracle:oinstall /opt/oracle
# chmod -R 755 /opt/oracle

oracleユーザーのシェル制限の設定

ソフトウェアのパフォーマンスを向上させるには、oracleユーザーの次のシェル制限を増やす必要があります。
シェル制限 / limits.confにある項目 / 強い制限
最大オープン・ファイル記述子数 / nofile / 65536
単一ユーザーが使用可能な最大プロセス数 / nproc / 16384
シェル制限を増やすには、次の手順を実行します。

次の行を/etc/security/limits.confファイルに追加します。
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
次の行が存在しない場合、/etc/pam.d/loginファイルに追加します。
session required pam_limits.so
oracleユーザーのデフォルト・シェルに応じて、デフォルトのシェル起動ファイルに次の変更をします。
次の行を/etc/profileファイルに追加します。
if [ $USER = "oracle" ]; then
if [ $SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
fi

oracleユーザーの環境の構成

# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi

alias ls="ls -FA"
ORACLE_SID=ol5h02; export ORACLE_SID
ORACLE_UNQNAME=ol5h02; export ORACLE_UNQNAME
JAVA_HOME=/usr/java/jdk1.6.0_18; export JAVA_HOME
ORACLE_BASE=/opt/oracle; export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/11.2/db_1; export ORACLE_HOME
NLS_DATE_FORMAT="YYYY-MM-DD HH24:MI:SS"; export NLS_DATE_FORMAT
TNS_ADMIN=$ORACLE_HOME/network/admin; export TNS_ADMIN
ORA_NLS11=$ORACLE_HOME/nls/data; export ORA_NLS11
NLS_LANG=Japanese_Japan.AL32UTF8; export NLS_LANG
PATH=.:${JAVA_HOME}/bin:${PATH}:$HOME/bin:$ORACLE_HOME/bin
PATH=${PATH}:/usr/bin:/bin:/usr/bin/X11:/usr/local/bin
export PATH
LD_LIBRARY_PATH=$ORACLE_HOME/lib
LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$ORACLE_HOME/oracm/lib
LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/lib:/usr/lib:/usr/local/lib
export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/JRE
CLASSPATH=${CLASSPATH}:$ORACLE_HOME/jlib
CLASSPATH=${CLASSPATH}:$ORACLE_HOME/rdbms/jlib
CLASSPATH=${CLASSPATH}:$ORACLE_HOME/network/jlib
export CLASSPATH
THREADS_FLAG=native; export THREADS_FLAG
export TEMP=/tmp
export TMPDIR=/tmp
umask 022

インストール

./runInstaller
セキュリティ・アップデート
「セキュリティ・アップデートをMy Oracle Support経由で受け取ります」←チェックを外す

インストール・オプション
「データベース・ソフトウェアのみインストール」←選択

Gridオプション
「単一インスタンス・データベースのインストール」←選択

製品の言語
「日本語」「英語」←選択

データベースのエディション
「Standard Edition」←選択

インストール場所
「Oracleベース」← /opt/oracle
「ソフトウェアの場所」← /opt/oracle/product/11.2/db_1

インベントリの作成
「インベントリ・ディレクトリ」← /opt/oracle/oraInventory

rootでシェルを実行
$ su -
Password: [rootのパスワードを入力]
# /opt/oracle/oraInventory/orainstRoot.sh
# /opt/oracle/product/11.2/db_1/root.sh
Enter the full pathname of the local bin directory: [/usr/local/bin]: [Enter]を入力
:
:
:

Oracle Database 11gR2 データベースの作成

前提
リスナー設定が完了していること。

ユーザ oracle でログインし、Database Configuration Assistant を実行する。
$ dbca
1.「データベースの作成」を選択
2.「汎用またはトランザクション処理」を選択
3.「グローバル・データベース名」← ol5h02.hk.dom
「SID」←ol5h02
4.次へ
5.「すべてのアカウントに同じ管理パスワードを使用」←パスワードを入力
6.次へ(「記憶域のタイプ」←ファイルシステム、「記憶域の場所」←テンプレートのデータベースファイル位置を使用)
7.次へ(「フラッシュ・リカバリ領域の指定」←チェック)
8.次へ
9.次へ
10.次へ
11.完了

Oracle Database 10g R2 をインストール

環境

Oracle Enterprise Linux 5
Oracle Database 10g R2
ハードウェア VMware Server 2.0.2 VM, メモリ1GB, ディスク20GB

パッケージをインストール

yum -y install compat-gcc-34
yum -y install compat-gcc-34-c++
yum -y install compat-libstdc++
yum -y install gcc
yum -y install gcc++
yum -y install glibc-devel
yum -y install libXp
yum -y install sysstat
yum -y install compat-db
yum -y install libgomp

yum -y install setarch
yum -y install make
yum -y install libaio
yum -y install openmotif

カーネルパラメータの設定

/etc/sysctl.conf を修正する。(注)既存の設定値が大きい場合は、大きい値を使用する。
kernel.sem = 250 32000 100 128
kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
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
変更を有効にするため、次のコマンドを実行します。
/sbin/sysctl -p

ユーザとグループの作成
# groupadd oinstall
# groupadd dba
# useradd oracle -g oinstall -G dba
# passwd oracle
インストール先ディレクトリの作成
# mkdir /opt/oracle/product/10.2/db_1/
# chown -R oracle:oinstall /opt/oracle
# chmod -R 755 /opt/oracle

インストール

Enterprise Manager

http://[host name]:[port]/em/
e.g) http://ol5h03.private.dom:1158/em/

Oracle Database 10g R2 の自動起動

環境

Oracle Enterprise Linux 5
Oracle Database 10g R2

Oracleの自動起動に必要なファイル

/etc/oratab インスタンスの定義ファイル
/etc/init.d/dbora サービスのスクリプト
$ORACLE_HOME/bin/dbstart DB起動スクリプト
$ORACLE_HOME/bin/dbstop DB停止スクリプト

oratab

/etc/oratab を編集し、インスタンスを自動起動に設定する。
$ORACLE_SID:$ORACLE_HOME:[Y|N] ←Y:自動起動
orcl:/opt/oracle/product/10.2/db_1:Y

dbora

以下のスクリプトを /etc/init.d/dbora に保存
(リスナーはdbstartが起動するため、dboraでは起動しない)
#!/bin/sh
#
# chkconfig: 345 99 10
# description: Oracle Database 10g R2
# proccessname: ora_
#
# Set ORA_HOME to be equivalent to the $ORACLE_HOME
# from which you wish to execute dbstart and dbshut;
#
# Set ORA_OWNER to the user id of the owner of the
# Oracle database in ORA_HOME.

ORA_HOME=/opt/oracle/product/10.2/db_1
ORA_OWNER=oracle
export ORACLE_HOME=$ORA_HOME

if [ ! -f $ORA_HOME/bin/dbstart -o ! -d $ORA_HOME ]
then
echo "Oracle startup: cannot start"
exit
fi

case "$1" in
start)
# Start the Oracle databases:
su - $ORA_OWNER -c "$ORA_HOME/bin/dbstart"
# Start Oracle Net
#su - $ORA_OWNER -c "$ORA_HOME/bin/lsnrctl start"
# Start emctl
su - $ORA_OWNER -c "$ORA_HOME/bin/emctl start dbconsole"

touch /var/lock/subsys/dbora
;;

stop)
# Stop Oracle Net
su - $ORA_OWNER -c "$ORA_HOME/bin/lsnrctl stop"
# Stop the Oracle databases:
su - $ORA_OWNER -c "$ORA_HOME/bin/dbshut"
# Stop emctl
su - $ORA_OWNER -c "$ORA_HOME/bin/emctl stop dbconsole"

rm -f /var/lock/subsys/dbora
;;
restart)
$0 stop
$0 start
;;
status)
if [ -f /var/lock/subsys/dbora ]; then
echo $0 started.
else
echo $0 stopped.
fi
;;
*)
echo "usage: dbora {start|stop|restart|status}"
exit 1
esac

exit 0

以下のコマンドを実行し、自動起動を登録する。
# chmod 755 /etc/init.d/dbora
# chkconfig --add dbora
# chkconfig dbora on
# chkconfig --list dbora
dbora 0:off 1:off 2:on 3:on 4:on 5:on 6:off

dbstart

# /etc/init.d/dbora start
Failed to auto-start Oracle Net Listene using /ade/vikrkuma_new/oracle/bin/tnslsnr
Processing Database instance "Ora10gTest": log file /opt/oracle/product/10.2/db_1/startup.log
上記エラーの解消のため、$ORACLE_HOME/bin/dbstart (78行目)を修正する。
修正前:ORACLE_HOME_LISTNER=/ade/vikrkuma_new/oracle
修正後:ORACLE_HOME_LISTNER=$ORACLE_HOME

手動起動

起動
# /etc/init.d/dbora start
停止
# /etc/init.d/dbora stop

ログ出力

dboraスクリプトの実行ログは$ORACLE_HOME配下に出力される。
shutdown.log
startup.log

sqlplus on Linux 文字化け

環境変数を設定する。

export NLS_LANG=Japanese_Japan.AL32UTF8

/home/[user]/.bash_profile に設定すれば、毎回コマンドを実行する必要はない。