天天看點

資料遷移 (filesystem to ASM) (第一部分)

本次試驗的内容是: 

Filesystem 向 asm 遷移:

第一部分:

Author:  Sheng Huiping

Date Jun 07 2012

先說一下和asm 有關的dict:

select * from v$asm_operation;

select * from v$asm_disk;

select * from v$asm_diskgroup;

先看一下環境:

 我們先看一下:cd $ORACLE_HOME/dbs 下沒有init+ASM.ora

[email protected] dbs]$ export ORACLE_SID=+ASM

[[email protected] dbs]$ ls -l init+ASM.ora

ls: init+ASM.ora: No such file or directory

[email protected] dbs]$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on Sat Jan 7 09:33:47 2012

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

Connected to an idle instance.

SQL> startup;

ORA-01078: failure in processing system parameters

LRM-00109: could not open parameter file '/u01/pp/oracle/product/10.2/db_1/dbs/init+ASM.ora'

SQL>

符合我們的預期,

好,下面我們建個init+TEST.ora

[[email protected] dbs]$ vi init+TEST.ora

asm_diskstring=''

background_dump_dest=/u01/pp/oracle/admin/+TEST/bdump

user_dump_dest=/u01/pp/oracle/admin/+TEST/udump

core_dump_dest=/u01/pp/oracle/admin/+TEST/cdump

instance_type='asm'

下面開始啟動一下:

[[email protected] ~]$ export ORACLE_SID=+TEST

[[email protected] ~]$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on Sat Jan 7 09:37:46 2012

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

Connected to an idle instance.

SQL> startup;

ORA-07446: sdnfy: bad value '/u01/pp/oracle/admin/+TEST/udump' for parameter user_dump_dest.

SQL> !

[[email protected] ~]$ id

uid=501(oracle) gid=501(oinstall) groups=501(oinstall),502(dba),503(oper)

[[email protected] ~]$ mkdir -p /u01/pp/oracle/admin/+TEST/bdump

[[email protected] ~]$ mkdir -p /u01/pp/oracle/admin/+TEST/udump

[[email protected] ~]$ mkdir -p /u01/pp/oracle/admin/+TEST/cdump

[[email protected] ~]$ exit

exit

SQL> startup;

ORA-15150: instance lock mode 'EXCLUSIVE' conflicts with other ASM instance(s)

SQL>

看一下alert 日志:

[email protected] bdump]$ more alert_+TEST.log

Sat Jan  7 09:39:09 2012

Starting ORACLE instance (normal)

Cannot determine all dependent dynamic libraries for /proc/self/exe

Unable to find dynamic library libocr10.so in search paths

RPATH = /ade/aime1_build2101/oracle/has/lib/:/ade/aime1_build2101/oracle/lib/:/ade/aime1_build2101/oracle/h

as/lib/:

LD_LIBRARY_PATH is not set!

The default library directories are /lib and /usr/lib

Unable to find dynamic library libocrb10.so in search paths

Unable to find dynamic library libocrutl10.so in search paths

Unable to find dynamic library libocrutl10.so in search paths

LICENSE_MAX_SESSION = 0

LICENSE_SESSIONS_WARNING = 0

Shared memory segment for instance monitoring created

Picked latch-free SCN scheme 2

Using LOG_ARCHIVE_DEST_1 parameter default value as /u01/pp/oracle/product/10.2/db_1/dbs/arch

Autotune of undo retention is turned off.

LICENSE_MAX_USERS = 0

SYS auditing is disabled

ksdpec: called for event 13740 prior to event group initialization

Starting up ORACLE RDBMS Version: 10.2.0.1.0.

System parameters with non-default values:

  instance_type            = asm

  background_dump_dest     = /u01/pp/oracle/admin/+TEST/bdump

  user_dump_dest           = /u01/pp/oracle/admin/+TEST/udump

  core_dump_dest           = /u01/pp/oracle/admin/+TEST/cdump

  asm_diskstring           =

PMON started with pid=2, OS id=5721

PSP0 started with pid=3, OS id=5723

MMAN started with pid=4, OS id=5725

DBW0 started with pid=5, OS id=5727

LGWR started with pid=6, OS id=5729

CKPT started with pid=7, OS id=5731

SMON started with pid=8, OS id=5733

RBAL started with pid=9, OS id=5735

Sat Jan  7 09:39:11 2012

sculkget: failed to lock /u01/pp/oracle/product/10.2/db_1/dbs/lk+ASM exclusive

sculkget: lock held by PID: 5038

Sat Jan  7 09:39:11 2012

USER: terminating instance due to error 15150

Instance terminated by USER, pid = 5719

---------------

分析下來,是因為,啟動了其他的ASM 的執行個體:

[[email protected] ~]$ ps -ef | grep smon | grep -v grep

oracle    5044     1  0 09:24 ?        00:00:00 asm_smon_+SHENG

我原來是裝過+SHENG 的ASM 執行個體。

[[email protected] ~]$ ps -ef | grep smon | grep -v grep

oracle    5044     1  0 09:24 ?        00:00:00 asm_smon_+SHENG

[[email protected] ~]$ kill -9 5044

[[email protected] ~]$ ps -ef | grep smon | grep -v grep

[[email protected] ~]$ env | grep ORA

ORACLE_SID=+TEST

ORACLE_BASE=/u01/pp/oracle

ORACLE_HOME=/u01/pp/oracle/product/10.2/db_1

[[email protected] ~]$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on Sat Jan 7 09:51:01 2012

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

Connected to an idle instance.

SQL> startup;

ASM instance started

Total System Global Area   79691776 bytes

Fixed Size                  1217812 bytes

Variable Size              53308140 bytes

ASM Cache                  25165824 bytes

ORA-15110: no diskgroups mounted

----------------------

好以上的測試符合我們的預期,想ASM封裝 的instance 隻能有一個。

如果想見很多個instance, 可以在:“ASM封裝 的instance” 下面建不同的 database intance.

下面還是在原來的 +SHENG 下建不同的isntance 看看:

[[email protected] ~]$ ps -ef | grep smon | grep -v grep

oracle    6161     1  0 09:51 ?        00:00:00 asm_smon_+TEST

[[email protected] ~]$ kill -9 6161

[[email protected] ~]$ export ORACLE_SID=+SHENG

[[email protected] ~]$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on Sat Jan 7 09:55:37 2012

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

Connected to an idle instance.

SQL> startup;

ASM instance started

Total System Global Area   79691776 bytes

Fixed Size                  1217812 bytes

Variable Size              53308140 bytes

ASM Cache                  25165824 bytes

ORA-15110: no diskgroups mounted

-----------------------

看看+SHENG 下面有哪些diskgroup:

SQL> select name,state ,total_mb,usable_file_mb from v$asm_diskgroup;

NAME                           STATE         TOTAL_MB USABLE_FILE_MB

------------------------------ ----------- ---------- --------------

SHENGASM                       DISMOUNTED           0              0

下面再增加兩塊盤,從建立個diskgroup:

下面先測試在原來的disk group 下加disk:

[[email protected] dev]# raw -qa

/dev/raw/raw1:  bound to major 8, minor 49

/dev/raw/raw2:  bound to major 8, minor 65

/dev/raw/raw3:  bound to major 8, minor 81

/dev/raw/raw4:  bound to major 8, minor 97

[[email protected] dev]# pwd

/dev

[[email protected] dev]# cd raw

[[email protected] raw]# ls

raw1  raw2  raw3  raw4

[[email protected] raw]# ls -l

total 0

crw-rw---- 1 oracle oinstall 162, 1 Jan  7 10:45 raw1

crw-rw---- 1 oracle oinstall 162, 2 Jan  7 10:31 raw2

crw------- 1 root   root     162, 3 Jan  7 10:24 raw3

crw------- 1 root   root     162, 4 Jan  7 10:24 raw4

原因找到,是因為owner 是root,下面重新 vi etc/udev/rules.d/60-raw.rules

start-udev

ok,

SQL> alter diskgroup shengasm add disk '/dev/raw/raw3';

Diskgroup altered.

現在可以看到,total_mb 比原來增加了:

SQL> select name,state ,total_mb,usable_file_mb from v$asm_diskgroup;

NAME                           STATE         TOTAL_MB USABLE_FILE_MB

------------------------------ ----------- ---------- --------------

SHENGASM                       MOUNTED          14322          13181

原來是:

SQL> select name,state ,total_mb,usable_file_mb from v$asm_diskgroup;

NAME                           STATE         TOTAL_MB USABLE_FILE_MB

------------------------------ ----------- ---------- --------------

SHENGASM                       MOUNTED          10228           9089

下面提醒一下,和asm 有關的dict:

select * from v$asm_operation;

select * from v$asm_disk;

select * from v$asm_diskgroup;

看一disk:

SQL> select name, path from v$asm_disk;

NAME                           PATH

------------------------------ -------------------------------------------------

                               /dev/raw/raw4

                               /dev/raw/raw5

SHENGASM_0000                  /dev/raw/raw1

SHENGASM_0002                  /dev/raw/raw3

SHENGASM_0001                  /dev/raw/raw2

------------------------------------

說明一下,diskgroup 和instance 沒有啥關系,看一下目錄就知道了:

+SHENGASM/shengasm/online_log/redo1_1.rdo

前面的+SHENGASM 是diskgroup, 後面的shengasm 就是database instance了:

SQL> create diskgroup data external redundancy disk '/dev/raw/raw4';

Diskgroup created.

SQL> alter diskgroup data add disk '/dev/raw/raw5';

Diskgroup altered.

SQL> select name, path from v$asm_disk;

NAME                           PATH

------------------------------ -------------------------------------------------

DATA_0000                      /dev/raw/raw4

DATA_0001                      /dev/raw/raw5

SHENGASM_0000                  /dev/raw/raw1

SHENGASM_0002                  /dev/raw/raw3

SHENGASM_0001                  /dev/raw/raw2

SQL> select name,state from v$asm_diskgroup;

NAME                           STATE

------------------------------ -----------

SHENGASM                       MOUNTED

DATA                           MOUNTED

目标是把 ezhou 的filesystem 移到diskgroup : data 上來,

具體的操作下一個章節研究,敬請期待。