Oracleの最近のブログ記事

例えばOracleの停止シェルを作成する場合など、シェルスクリプト内でSQL*Plusを実行する場合は以下のように書きます。
oracleユーザで実行します。

--------------------ここから--------------------
#!/bin/bash

export ORACLE_SID=hoge

sqlplus /nolog < connect / as sysdba
shutdown immediate
exit
EOF
--------------------ここまで--------------------

『<

『EOF』という文字列自体にはあまり意味はなく、以下のように『AAA』などに変えても問題ありません。

--------------------ここから--------------------
#!/bin/bash

export ORACLE_SID=hoge

sqlplus /nolog < connect / as sysdba
shutdown immediate
exit
AAA
--------------------ここまで--------------------

ただし、終わりの方の『EOF(AAAの場合も)』は行の先頭から書かれていないといけません(スペースなどでインデントしてはいけない)。

■Oracleバージョン
 11.2.0.3.0

■OSバージョン
 Red Hat Enterprise Linux 5.5

■変更前の初期化パラメータ
 sec_case_sensitive_logon = true
 ※パスワードの大文字・小文字を区別する

■変更後の初期化パラメータ
 sec_case_sensitive_logon = false
 ※パスワードの大文字・小文字を区別しない

■目的
 Oracle 11gのデフォルトではパスワードの大文字・小文字を区別するように設定されている。
 これを区別しないように変更する。

■手順
# su - oracle
$ export ORACLE_SID=hoge
$ sqlplus /nolog

SQL*Plus: Release 11.2.0.2.0 Production on 金 4月 6 10:42:01 2012

Copyright (c) 1982, 2010, Oracle. All rights reserved.

SQL > connect / as sysdba
接続されました。
SQL hoge > show parameter sec_case_sensitive_logon

NAME TYPE
------------------------------------ ---------------------------------
VALUE
------------------------------
sec_case_sensitive_logon boolean
TRUE
SQL hoge > alter system set sec_case_sensitive_logon = false scope = both;

システムが変更されました。

SQL hoge > show parameter sec_case_sensitive_logon;

NAME TYPE
------------------------------------ ---------------------------------
VALUE
------------------------------
sec_case_sensitive_logon boolean
FALSE
SQL hoge > exit
Oracle Database 11g Release 11.2.0.2.0 - 64bit Productionとの接続が切断されました。
$ exit

■Oracleバージョン
 11.2.0.3.0

■OSバージョン
 Red Hat Enterprise Linux 5.5

■既存のREDOログメンバ
 /data/oracle/hoge/red00/redo00_00.log
 /data/oracle/hoge/red00/redo01_00.log
 /data/oracle/hoge/red00/redo02_00.log

■追加するREDOログメンバ
 /data/oracle/hoge/red01/redo00_01.log
 /data/oracle/hoge/red01/redo01_01.log
 /data/oracle/hoge/red01/redo02_01.log
 ※REDOロググループ1~3に1ファイルずつ追加する

■目的
 オンラインREDOログのグループ1~3にメンバを1つずつ追加する。

■手順
1)SQL*PlusでOracleに接続する
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
# su - oracle
$ export ORACLE_SID=hoge ←インスタンス名
$ sqlplus /nolog

SQL*Plus: Release 11.2.0.2.0 Production on 木 4月 5 16:56:18 2012

Copyright (c) 1982, 2010, Oracle. All rights reserved.

SQL > connect / as sysdba
接続されました。


2)変更前の状態を確認する
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
SQL hoge > select * from v$log;

GROUP# THREAD# SEQUENCE# BYTES BLOCKSIZE MEMBERS ARCHIVED STATUS FIRST_CHANGE# FIRST_TI NEXT_CHANGE# NEXT_TIM
---------- ---------- ---------- ---------- ---------- ---------- --------- ------------------------------------------------ ------------- -------- ------------ --------
1 1 0 536870912 512 1 YES UNUSED 0 0
2 1 29 536870912 512 1 NO CURRENT 306210 12-04-05 2.8147E+14
3 1 0 536870912 512 1 YES UNUSED 0 0

SQL hoge > select * from v$logfile;

GROUP# STATUS TYPE
---------- --------------------- ---------------------
MEMBER
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
IS_RECOVE
---------
1 ONLINE
/data/oracle/hoge/red00/redo00_00.log
NO

2 ONLINE
/data/oracle/hoge/red00/redo01_00.log
NO

3 ONLINE
/data/oracle/hoge/red00/redo02_00.log
NO

SQL hoge > host ls -l /data/oracle/hoge/red01/
合計 1591504
-rw-r----- 1 oracle oinstall 17448960 4月 5 19:58 control_01.ctl
drwx------ 2 root root 16384 10月 19 19:04 lost+found


3)REDOログメンバを追加する
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
SQL hoge > alter database add logfile member '/data/oracle/hoge/red01/redo00_01.log' to group 1;

データベースが変更されました。

SQL hoge > alter database add logfile member '/data/oracle/hoge/red01/redo01_01.log' to group 2;

データベースが変更されました。

SQL hoge > alter database add logfile member '/data/oracle/hoge/red01/redo02_01.log' to group 3;

データベースが変更されました。


4)変更後の状態を確認する
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
SQL hoge > select * from v$log;

GROUP# THREAD# SEQUENCE# BYTES BLOCKSIZE MEMBERS ARCHIVED STATUS FIRST_CHANGE# FIRST_TI NEXT_CHANGE# NEXT_TIM
---------- ---------- ---------- ---------- ---------- ---------- --------- ------------------------------------------------ ------------- -------- ------------ --------
1 1 0 536870912 512 2 YES UNUSED 0 0
2 1 29 536870912 512 2 NO CURRENT 306210 12-04-05 2.8147E+14
3 1 0 536870912 512 2 YES UNUSED 0 0

SQL hoge > select * from v$logfile;

GROUP# STATUS TYPE
---------- --------------------- ---------------------
MEMBER
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
IS_RECOVE
---------
1 ONLINE
/data/oracle/hoge/red00/redo00_00.log
NO

2 ONLINE
/data/oracle/hoge/red00/redo01_00.log
NO

3 ONLINE
/data/oracle/hoge/red00/redo02_00.log
NO

1 INVALID ONLINE
/data/oracle/hoge/red01/redo00_01.log
NO

2 INVALID ONLINE
/data/oracle/hoge/red01/redo01_01.log
NO

3 INVALID ONLINE
/data/oracle/hoge/red01/redo02_01.log
NO


6行が選択されました。

SQL hoge > host ls -l /data/oracle/hoge/red01/
合計 1591504
-rw-r----- 1 oracle oinstall 17448960 4月 5 19:58 control_01.ctl
drwx------ 2 root root 16384 10月 19 19:04 lost+found
-rw-r----- 1 oracle oinstall 536871424 4月 5 19:57 redo00_01.log
-rw-r----- 1 oracle oinstall 536871424 4月 5 19:57 redo01_01.log
-rw-r----- 1 oracle oinstall 536871424 4月 5 19:57 redo02_01.log

SQL hoge > exit
Oracle Database 11g Release 11.2.0.2.0 - 64bit Productionとの接続が切断されました。

■Oracleバージョン
 11.2.0.3.0

■OSバージョン
 Red Hat Enterprise Linux 5.5

■変更前のオンラインREDOログファイルパス
 /data/oracle/hoge/red00/redo01.log ・・・50MB
 /data/oracle/hoge/red00/redo02.log ・・・50MB
 /data/oracle/hoge/red00/redo03.log ・・・50MB

■変更後のオンラインREDOログファイルパス
 /data/oracle/hoge/red00/redo01.log ・・・512MB
 /data/oracle/hoge/red00/redo02.log ・・・512MB
 /data/oracle/hoge/red00/redo03.log ・・・512MB

■目的
 オンラインREDOログファイルのサイズを1メンバ当たり50MBから512MBへ変更する。

■手順
1)SQL*PlusでOracleに接続する
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
# su - oracle
$ export ORACLE_SID=hoge ←インスタンス名
$ sqlplus /nolog

SQL*Plus: Release 11.2.0.2.0 Production on 木 4月 5 16:56:18 2012

Copyright (c) 1982, 2010, Oracle. All rights reserved.

SQL > connect / as sysdba
接続されました。


2)変更前のサイズを確認する
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
SQL hoge > select * from v$log;

GROUP# THREAD# SEQUENCE# BYTES BLOCKSIZE MEMBERS ARCHIVED STATUS FIRST_CHANGE# FIRST_TI NEXT_CHANGE# NEXT_TIM
---------- ---------- ---------- ---------- ---------- ---------- --------- ------------------------------------------------ ------------- -------- ------------ --------
1 1 28 52428800 512 1 NO CURRENT 295065 12-04-05 2.8147E+14
2 1 26 52428800 512 1 NO INACTIVE 278975 12-04-05 287768 12-04-05
3 1 27 52428800 512 1 NO INACTIVE 287768 12-04-05 295065 12-04-05


3)グループ2のサイズを変更する
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
SQL hoge > alter database drop logfile group 2;

データベースが変更されました。

SQL hoge > select * from v$log;

GROUP# THREAD# SEQUENCE# BYTES BLOCKSIZE MEMBERS ARCHIVED STATUS FIRST_CHANGE# FIRST_TI NEXT_CHANGE# NEXT_TIM
---------- ---------- ---------- ---------- ---------- ---------- --------- ------------------------------------------------ ------------- -------- ------------ --------
1 1 28 52428800 512 1 NO CURRENT 295065 12-04-05 2.8147E+14
3 1 27 52428800 512 1 NO INACTIVE 287768 12-04-05 295065 12-04-05

SQL hoge > host rm /data/oracle/hoge/red00/redo02.log

SQL hoge > host ls -l /data/oracle/hoge/red00/
合計 68340
-rw-r----- 1 oracle oinstall 17448960 4月 5 18:42 control_00.ctl
drwx------ 2 root root 16384 10月 19 19:04 lost+found
-rw-r----- 1 oracle oinstall 52429312 4月 5 18:21 redo01.log
-rw-r----- 1 oracle oinstall 52429312 4月 5 18:21 redo03.log

SQL hoge > alter database add logfile group 2 '/data/oracle/hoge/red00/redo02.log' size 512m;

データベースが変更されました。

SQL hoge > select * from v$log;

GROUP# THREAD# SEQUENCE# BYTES BLOCKSIZE MEMBERS ARCHIVED STATUS FIRST_CHANGE# FIRST_TI NEXT_CHANGE# NEXT_TIM
---------- ---------- ---------- ---------- ---------- ---------- --------- ------------------------------------------------ ------------- -------- ------------ --------
1 1 28 52428800 512 1 NO CURRENT 295065 12-04-05 2.8147E+14
2 1 0 536870912 512 1 YES UNUSED 0 0
3 1 27 52428800 512 1 NO INACTIVE 287768 12-04-05 295065 12-04-05


4)グループ3のサイズを変更する
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
SQL hoge > alter database drop logfile group 3;

データベースが変更されました。

SQL hoge > select * from v$log;

GROUP# THREAD# SEQUENCE# BYTES BLOCKSIZE MEMBERS ARCHIVED STATUS FIRST_CHANGE# FIRST_TI NEXT_CHANGE# NEXT_TIM
---------- ---------- ---------- ---------- ---------- ---------- --------- ------------------------------------------------ ------------- -------- ------------ --------
1 1 28 52428800 512 1 NO CURRENT 295065 12-04-05 2.8147E+14
2 1 0 536870912 512 1 YES UNUSED 0 0

SQL hoge > host rm /data/oracle/hoge/red00/redo03.log

SQL hoge > host ls -l /data/oracle/hoge/red00/
合計 541888
-rw-r----- 1 oracle oinstall 17448960 4月 5 18:45 control_00.ctl
drwx------ 2 root root 16384 10月 19 19:04 lost+found
-rw-r----- 1 oracle oinstall 536871424 4月 5 18:43 redo01.log
-rw-r----- 1 oracle oinstall 536871424 4月 5 18:43 redo02.log

SQL hoge > alter database add logfile group 3 '/data/oracle/hoge/red00/redo03.log' size 512m;

データベースが変更されました。

SQL hoge > select * from v$log;

GROUP# THREAD# SEQUENCE# BYTES BLOCKSIZE MEMBERS ARCHIVED STATUS FIRST_CHANGE# FIRST_TI NEXT_CHANGE# NEXT_TIM
---------- ---------- ---------- ---------- ---------- ---------- --------- ------------------------------------------------ ------------- -------- ------------ --------
1 1 28 52428800 512 1 NO CURRENT 295065 12-04-05 2.8147E+14
2 1 0 536870912 512 1 YES UNUSED 0 0
3 1 0 536870912 512 1 YES UNUSED 0 0


5)強制ログスイッチする
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
SQL hoge > alter system switch logfile;

システムが変更されました。

SQL hoge > select * from v$log;

GROUP# THREAD# SEQUENCE# BYTES BLOCKSIZE MEMBERS ARCHIVED STATUS FIRST_CHANGE# FIRST_TI NEXT_CHANGE# NEXT_TIM
---------- ---------- ---------- ---------- ---------- ---------- --------- ------------------------------------------------ ------------- -------- ------------ --------
1 1 28 52428800 512 1 NO ACTIVE 295065 12-04-05 306210 12-04-05
2 1 29 536870912 512 1 NO CURRENT 306210 12-04-05 2.8147E+14
3 1 0 536870912 512 1 YES UNUSED 0 0


6)グループ1のサイズを変更する
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
SQL hoge > alter database drop logfile group 1;

データベースが変更されました。

SQL hoge > select * from v$log;

GROUP# THREAD# SEQUENCE# BYTES BLOCKSIZE MEMBERS ARCHIVED STATUS FIRST_CHANGE# FIRST_TI NEXT_CHANGE# NEXT_TIM
---------- ---------- ---------- ---------- ---------- ---------- --------- ------------------------------------------------ ------------- -------- ------------ --------
2 1 29 536870912 512 1 NO CURRENT 306210 12-04-05 2.8147E+14
3 1 0 536870912 512 1 YES UNUSED 0 0

SQL hoge > host rm /data/oracle/hoge/red00/redo01.log

SQL hoge > host ls -l /data/oracle/hoge/red00/
合計 1066700
-rw-r----- 1 oracle oinstall 17448960 4月 5 19:07 control_00.ctl
drwx------ 2 root root 16384 10月 19 19:04 lost+found
-rw-r----- 1 oracle oinstall 536871424 4月 5 19:07 redo02.log
-rw-r----- 1 oracle oinstall 536871424 4月 5 19:05 redo03.log

SQL hoge > alter database add logfile group 1 '/data/oracle/hoge/red00/redo01.log' size 512m;

データベースが変更されました。

SQL hoge > select * from v$log;

GROUP# THREAD# SEQUENCE# BYTES BLOCKSIZE MEMBERS ARCHIVED STATUS FIRST_CHANGE# FIRST_TI NEXT_CHANGE# NEXT_TIM
---------- ---------- ---------- ---------- ---------- ---------- --------- ------------------------------------------------ ------------- -------- ------------ --------
1 1 0 536870912 512 1 YES UNUSED 0 0
2 1 29 536870912 512 1 NO CURRENT 306210 12-04-05 2.8147E+14
3 1 0 536870912 512 1 YES UNUSED 0 0


7)変更後のファイルサイズを確認する
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
SQL hoge > host ls -l /data/oracle/hoge/red00/
合計 1591508
-rw-r----- 1 oracle oinstall 17448960 4月 5 19:22 control_00.ctl
drwx------ 2 root root 16384 10月 19 19:04 lost+found
-rw-r----- 1 oracle oinstall 536871424 4月 5 19:08 redo01.log
-rw-r----- 1 oracle oinstall 536871424 4月 5 19:22 redo02.log
-rw-r----- 1 oracle oinstall 536871424 4月 5 19:05 redo03.log

SQL hoge > exit

■Oracleバージョン
 11.2.0.3.0

■OSバージョン
 Red Hat Enterprise Linux 5.5

■変更前のオンラインREDOログファイルパス
 /data/oracle/hoge/redo01.log
 /data/oracle/hoge/redo02.log
 /data/oracle/hoge/redo03.log

■変更後のオンラインREDOログファイルパス
 /data/oracle/hoge/red00/redo01.log
 /data/oracle/hoge/red00/redo02.log
 /data/oracle/hoge/red00/redo03.log

■目的
 オンラインREDOログの格納場所を変更する。

■手順
1)SQL*PlusでOracleに接続する
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
# su - oracle
$ export ORACLE_SID=hoge ←インスタンス名
$ sqlplus /nolog

SQL*Plus: Release 11.2.0.2.0 Production on 木 4月 5 16:56:18 2012

Copyright (c) 1982, 2010, Oracle. All rights reserved.

SQL > connect / as sysdba
接続されました。


2)Oracleを停止する
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
SQL hoge > shutdown immediate
データベースがクローズされました。
データベースがディスマウントされました。
ORACLEインスタンスがシャットダウンされました。
SQL hoge > exit
Oracle Database 11g Release 11.2.0.2.0 - 64bit Productionとの接続が切断されました。


3)オンラインREDOログファイルを新しい場所へコピーする
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
$ cd /data/oracle/hoge/
$ cp -piv redo0* /data/oracle/hoge/red00/.


4)OracleをMOUNT状態で起動する
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
$ sqlplus /nolog

SQL*Plus: Release 11.2.0.2.0 Production on 木 4月 5 17:03:02 2012

Copyright (c) 1982, 2010, Oracle. All rights reserved.

SQL > connect / as sysdba
接続されました。
SQL hoge > startup mount
ORACLEインスタンスが起動しました。

Total System Global Area 3423965184 bytes
Fixed Size 2231288 bytes
Variable Size 704644104 bytes
Database Buffers 2701131776 bytes
Redo Buffers 15958016 bytes
データベースがマウントされました。


5)オンラインREDOログファイル名を変更する
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
SQL hoge > alter database rename file '/data/oracle/hoge/redo01.log',
2 '/data/oracle/hoge/redo02.log', '/data/oracle/hoge/redo03.log'
3 to '/data/oracle/hoge/red00/redo01.log',
4 '/data/oracle/hoge/red00/redo02.log', '/data/oracle/hoge/red00/redo03.log';

データベースが変更されました。


6)データベースをオープンする
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
SQL hoge > alter database open;

データベースが変更されました。

SQL hoge > exit

■Oracleバージョン
 11.2.0.3.0

■OSバージョン
 Red Hat Enterprise Linux 5.5

■変更前の制御ファイルパス
 /data/oracle/hoge/und00/control_00.ctl
 /data/oracle/hoge/und01/control_01.ctl

■変更後の制御ファイルパス
 /data/oracle/hoge/red00/control_00.ctl
 /data/oracle/hoge/red01/control_01.ctl

■目的
 インストール時に制御ファイルのパスを間違ったので、インストール後に変更する。

■手順
1)SQL*PlusでOracleに接続する
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
# su - oracle
$ export ORACLE_SID=hoge ←インスタンス名
$ sqlplus /nolog

SQL*Plus: Release 11.2.0.2.0 Production on 木 4月 5 16:56:18 2012

Copyright (c) 1982, 2010, Oracle. All rights reserved.

SQL > connect / as sysdba
接続されました。


2)変更前の設定を確認する
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
SQL hoge > show parameter control_files

NAME TYPE
------------------------------------ ---------------------------------
VALUE
------------------------------
control_files string
/data/oracle/hoge/und00/con
trol_00.ctl, /data/oracle/hoge
/und01/control_01.ctl


3)SPFILEの内容を書き換える
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
SQL hoge > alter system set control_files='/data/oracle/hoge/red00/control_00.ctl',
2 '/data/oracle/hoge/red01/control_01.ctl' scope=spfile;

システムが変更されました。


4)Oracleを停止する
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
SQL hoge > shutdown immediate
データベースがクローズされました。
データベースがディスマウントされました。
ORACLEインスタンスがシャットダウンされました。
SQL hoge > exit
Oracle Database 11g Release 11.2.0.2.0 - 64bit Productionとの接続が切断されました。


5)制御ファイルを新しい場所へ移動する
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
$ cd /data/oracle/hoge/und00/
$ mv control_00.ctl /data/oracle/hoge/red00/.
$ cd /data/oracle/hoge/und01
$ mv control_01.ctl /data/oracle/hoge/red01/.


6)Oracleを起動する
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
$ sqlplus /nolog

SQL*Plus: Release 11.2.0.2.0 Production on 木 4月 5 17:03:02 2012

Copyright (c) 1982, 2010, Oracle. All rights reserved.

SQL > connect / as sysdba
接続されました。
SQL hoge > startup
ORACLEインスタンスが起動しました。

Total System Global Area 3423965184 bytes
Fixed Size 2231288 bytes
Variable Size 704644104 bytes
Database Buffers 2701131776 bytes
Redo Buffers 15958016 bytes
データベースがマウントされました。
データベースがオープンされました。


7)変更後の設定を確認する
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
SQL hoge > show parameter control_files

NAME TYPE
------------------------------------ ---------------------------------
VALUE
------------------------------
control_files string
/data/oracle/hoge/red00/con
trol_00.ctl, /data/oracle/hoge
/red01/control_01.ctl
SQL hoge > exit
Oracle Database 11g Release 11.2.0.2.0 - 64bit Productionとの接続が切断されました。

まず以下のとおり、Oracleから必要なデータを抽出する。

# su - oracle
$ export ORACLE_SID=インスタンス名
$ sqlplus /nolog

SQL> connect / as sysdba
SQL> set pagesize 10000
SQL> set linesize 10000
SQL> select NUM||'!'||NAME||'!'||TYPE||'!'||VALUE||'!'||DISPLAY_VALUE||'!'||ISDEFAULT||'!'||ISSES_MODIFIABLE||'!'||ISSYS_MODIFIABLE||'!'||ISINSTANCE_MODIFIABLE||'!'||ISMODIFIED||'!'||ISADJUSTED||'!'||ISDEPRECATED||'!'||ISBASIC||'!'||DESCRIPTION||'!'||UPDATE_COMMENT||'!'||HASH from v$system_parameter;
SQL> exit

この出力結果をコピーし、Windowsのメモ帳などに貼り付ける。
メモ帳の置換機能で、『||'』と『'||』を全て削除する。
置換後にテキストとして保存する。
このテキストファイルをEXCELファイルで開く。
EXCELの[データ]メニューから[区切り位置]を選択する。
区切り文字として『!』を指定する。

Linuxでは稼働時間の経過と共に(ファイルの書き込みの度に?)freeコマンドで見たところのcachedの値が増加する傾向にある。
Linuxはファイルを書き込む際に、いきなりディスクに書き込むわけではなく、一旦キャッシュ(メモリ)上に書き込み、これでI/Oを完了したとすることでパフォーマンス向上を図っているためである(ディスクに書くよりメモリに書く方が速い)。
キャッシュ上のデータは非同期でディスクに書き込まれる。
このように使われていないメモリはどんどんキャッシュとして利用されるため、時間の経過と共にcachedの値が増加する。
最終的にはメモリ全体の使用率が95%程度まで(かな?)増加するため、単純にfreeコマンド等でメモリの使用率を見るとメモリが逼迫しているように見える。
しかし、OSやアプリケーションがメモリを必要とした際には、このキャッシュ領域が開放されて使われる。
freeコマンドで表示されるbuffersやcachedは必要に応じて解放されて使われるため、メモリの空き領域の一部として考えることが多い。

上記特徴から、Linuxでメモリの使用率監視を行う際には、freeコマンドの「-/+ buffers/cache」で表示される「used」の値を使用率と見て監視することが多い。

しかし、Oracle Databaseが稼働しているサーバでは、SGA、PGA、バックグラウンドプロセスの容量を足した数値(Oracleが使っているはずのメモリの容量)が、上記usedの値よりも小さく表示されていた。
使っているはずなのに使っているように見えない??
・・・だが、実際には大量のスワップが発生していたため、やはりメモリは使われていた様子。
調べてみると、Oracleの共有メモリはfreeコマンドで見たところのusedではなく、cachedに計上されている様子。
容量の内訳からしてそうかとは思っていたが。。。
ただ、Oracleの設定によってどこに計上されるかが変わるようなので、正確なところはもっと調査の必要有り。

また、JBossが稼働しているAPサーバでも同様の傾向があるため、こちらも要調査。

SQL > connect / as sysdba;
接続されました。
SQL インスタンス名 > select * from v$version;

BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Release 11.2.0.2.0 - 64bit Production
PL/SQL Release 11.2.0.2.0 - Production
CORE 11.2.0.2.0 Production
TNS for Linux: Version 11.2.0.2.0 - Production
NLSRTL Version 11.2.0.2.0 - Production

■ディレクトリ・オブジェクトの作成
# create directory ディレクトリ・オブジェクト名 as 'ディレクトリのフルパス';

例)
# create directory full_dump as '/data/db_export';


■ディレクトリ・オブジェクトの削除
# drop directory ディレクトリ・オブジェクト名;

例)
# drop directory full_dump;


■ディレクトリ・オブジェクトの確認
# set pagesize 0;
# select * from dba_directories;

# su - oracle

$ export ORACLE_SID=インスタンス名

$ expdp \"/ as sysdba\" full=y directory=expdp_dir1 dumpfile=expdp_dump1.dmp logfile=expdp_dump1.log

【expdpのオプション】
 \"/ as sysdba\" ←sysユーザ(sysdba権限)で実行
 full=y ←フルエクスポート
 directory=expdp_dir1 ←書き込み先ディレクトリ・オブジェクト名
 dumpfile=expdp_dump1.dmp ←エクスポート・ダンプ・ファイル名
 logfile=expdp_dump1.log ←ログファイル名

・Oracle 10gからはOracle Data Pump(データ・ポンプ)のエクスポート/インポート・ユーティリティ(expdp/impdp)が使用可能となった。
・オリジナルのエクスポートユーティリティ(exp)はOracle 11gからは一般的な使用としてサポートされない。
・サポートされるのは11gR2以前の下位のデータベースにXML Typeでデータを移行する場合のみ。
・また、expとimpは対で実行されなければならないため、expで作成されたファイルをインポートする場合や、impでOracle 10gにインポートする予定のデータをエクスポートする場合もexp/impを使用する。
・エクスポート・ダンプ・ファイルは、Oracleのインポート・ユーティリティを使用した場合のみ読取りが可能。
・ダンプ・ファイルの作成に使用したエクスポート・ユーティリティより前のバージョンのインポート・ユーティリティは使用できない。
・データ・ポンプ・エクスポート・ユーティリティで生成されるダンプ・ファイルと、オリジナルのエクスポート・ユーティリティで生成されたダンプ・ファイルには互換性がない。

オリジナルのエクスポートおよびインポート
http://otndnld.oracle.co.jp/document/products/oracle11g/111/doc_dvd/server.111/E05768-02/exp_imp.htm

Oracle Data Pump
http://otndnld.oracle.co.jp/document/products/oracle11g/111/doc_dvd/server.111/E05768-02/part_dp.htm#298

対象のインスタンスにSQLPlusで接続し、以下を実行する。

SQL> set linesize 1000
SQL> set pagesize 0
SQL> spool /tmp/initora.csv
SQL> select NUM ||'|'|| NAME ||'|'|| TYPE ||'|'|| VALUE ||'|'|| DISPLAY_VALUE ||'|'|| ISDEFAULT ||'|'|| ISSES_MODIFIABLE ||'|'|| ISSYS_MODIFIABLE ||'|'|| ISINSTANCE_MODIFIABLE ||'|'|| ISMODIFIED ||'|'|| ISADJUSTED ||'|'|| ISDEPRECATED ||'|'|| ISBASIC ||'|'|| DESCRIPTION ||'|'|| UPDATE_COMMENT ||'|'|| HASH from v$parameter;
SQL> spool off

initora.csvファイルをEXCELで開く。

[データ]メニューの[区切り位置]で[カンマやタブなどの区切り文字によってフィールドごとに区切られたデータ]を選択する。

[区切り文字]で[その他]を選択し、区切り文字に「|」を入力して決定する。

■Oracleの表領域一覧を表示する
SQL> select * from dba_tablespaces;

■Oracleのデータファイル一覧を表示する
SQL> select * from dba_data_files;

■Oracleのテンプファイル一覧を表示する
SQL> select * from dba_temp_files;

■Oracleの起動(oracleユーザにて)

$ export ORACLE_SID=inst

$ sqlplus /nolog

SQL*Plus: Release 11.2.0.2.0 Production on 木 6月 16 13:45:54 2011

Copyright (c) 1982, 2010, Oracle. All rights reserved.

SQL > connect / as sysdba
アイドル・インスタンスに接続しました。
SQL inst >
SQL inst > startup
ORACLEインスタンスが起動しました。

Total System Global Area 3423965184 bytes
Fixed Size 2231288 bytes
Variable Size 2097153032 bytes
Database Buffers 1308622848 bytes
Redo Buffers 15958016 bytes
データベースがマウントされました。
データベースがオープンされました。
SQL inst >


■Oracleの停止(oracleユーザにて)

$ export ORACLE_SID=inst

$ sqlplus /nolog

SQL*Plus: Release 11.2.0.2.0 Production on 木 6月 16 13:45:54 2011

Copyright (c) 1982, 2010, Oracle. All rights reserved.

SQL > connect / as sysdba
アイドル・インスタンスに接続しました。
SQL inst >
SQL inst > shutdown immediate
データベースがクローズされました。
データベースがディスマウントされました。
ORACLEインスタンスがシャットダウンされました。
SQL inst >

■データ・インデックス用表領域作成

CREATE TABLESPACE 表領域名
DATAFILE '/ディレクトリパス/ファイル名00.dbf' SIZE サイズM,
'/ディレクトリパス/ファイル名01.dbf' SIZE サイズM
AUTOEXTEND OFF
EXTENT MANAGEMENT LOCAL AUTOALLOCATE
SEGMENT SPACE MANAGEMENT AUTO;


■一時表領域作成

CREATE TEMPORARY TABLESPACE 一時表領域名
TEMPFILE '/ディレクトリパス/temp00.dbf' SIZE サイズM,
'/ディレクトリパス/temp01.dbf' SIZE サイズM
AUTOEXTEND OFF
EXTENT MANAGEMENT LOCAL;


サイズは2の倍数で指定すると綺麗なサイズになる。
1GBの場合は1024MBのように。

サイズにはGを指定することもできるようだが、ネット上の情報ではほとんどの場合がMを指定していたので、それに倣っている。

Oracle 11g R2で同じLinuxサーバ(Red Hat Enterprise Linux 5.5)上にOracle Clientの32bit版と64bit版をインストールする際には、プロダクトとインベントリのインストール先をそれぞれ32bitと64bitで分けなければならない。

以下に例を示す。

■32bit版Clientのインストール先
プロダクト: /opt/app/oracle/product/11.2.0/client32
インベントリ: /opt/app/oraInventory32

■64bit版Clientのインストール先
プロダクト: /opt/app/oracle/product/11.2.0/client64
インベントリ: /opt/app/oraInventory64

32bit版と64bit版のモジュールを同じディレクトリにインストールしてしまうと正常に動作しない。(らしい)

$ sqlplus /nolog
SQL> connect / as sysdba;
SQL> alter system switch logfile;

インスタンスが停止している状態で実行する。

$ sqlplus /nolog
SQL> connect / as sysdba;
SQL> startup mount;
SQL> alter database archivelog;
SQL> alter database open;

アーカイブログモードへ移行したことを確認するためには以下のコマンドを実行。

SQL> archive log list;
または
SQL> select log_mode from v$database;

Oracle 11gでファイルの場所を変更せずに、標準的にサンプルDBをインストールした場合

■初期化パラメータファイル
/u01/app/oracle/product/11.2.0/dbhome_1/dbs/spfileorcl.ora

■制御ファイル
/u01/app/oracle/oradata/orcl/control01.ctl
/u01/app/oracle/recovery_area/orcl/control02.ctl

■REDOログ
/u01/app/oracle/oradata/orcl/redo01.log
/u01/app/oracle/oradata/orcl/redo02.log
/u01/app/oracle/oradata/orcl/redo03.log

■データベースファイル
/u01/app/oracle/oradata/orcl/sysaux01.dbf
/u01/app/oracle/oradata/orcl/system01.dbf
/u01/app/oracle/oradata/orcl/temp01.dbf
/u01/app/oracle/oradata/orcl/undotabs.dbf
/u01/app/oracle/oradata/orcl/users01.dbf

■アーカイブログ
/u01/app/oracle/recovery_area/ORCL/archivelog/2011_02_17/o1_mf_1_10_6ossxy8o_.arc

■アラート・ログ
/u01/app/oracle/diag/rdbms/orcl/orcl/trace/alert_orcl.log

■リスナー・ログ
/u01/app/oracle/diag/tnslsnr/ホスト名/listener/trace/listener.log

■プロファイル構成ファイル
/u01/app/oracle/product/11.2.0/dbhome_1/network/admin/sqlnet.ora

■Oracle Net Service リスナー設定ファイル
/u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora

■Oracle Net Service ローカル・ネーミング設定ファイル
/u01/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora

このアーカイブについて

このページには、過去に書かれたブログ記事のうちOracleカテゴリに属しているものが含まれています。

前のカテゴリはMySQLです。

次のカテゴリはPHPです。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。