右下角的change disk discovery path设置ASM自动搜索可用磁盘或者LV的文件目录,等同于spfile+ASM.ora参数文件的ASM_DISKSTRING,该值可以用通配符例如/dev/vg_ora/*;
在此不进行设置,以后可通过修改ASM实例的参数文件或者alter system来设置,直接选择列出的ORCL:DISK01创建磁盘组,完成ASM的实例安装。至此可以在$ORACLE_HOME的dbs目录下查看到ASM实例的密码文件orapw+ASM和参数文件spfile+ASM.ora
连接ASM实例
通过lsnrctl status查看监听器状态,显示ASMblocked: Service \
Instance \Service \
Instance \
处理办法: Lsnrctl stop
在$ORACLE_HOMD/network/admin下编辑listener.ora,在SID_LIST_LISTENER新增ASM内容:
SID_LIST_LISTENER = (SID_LIST = (SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = /oracle/product/10.2.0/db_1) (PROGRAM = extproc) )
(SID_DESC =
(GLOBAL_DBNAME = +ASM)
(ORACLE_HOME = /oracle/product/10.2.0/db_1) (SID_NAME = +ASM) ) )
Lsnrctl start 显示为unknown
在客户端编辑tnsnames.ora新增 asm =
(DESCRIPTION =
(ADDRESS=(PROTOCOL = TCP)(HOST = 192.168.118.3)(PORT = 1521)) (CONNECT_DATA =
16
(SERVER = DEDICATED) (SERVICE_NAME = +ASM) (UR=A) ) )
这样可以在客户端通过PLSQL连接ASM实例。
ASM修改参数和新增磁盘
注意:在启动ASM实例前保证CSS的正常运行;通过crsctl check cssd查看。 [oracle@SMART dbs]$ crsctl check cssd CSS appears healthy
进入ASM实例必须先设置环境变量ORACLE_SID [oracle@SMART dbs]$ export ORACLE_SID=+ASM [oracle@SMART dbs]$ sqlplus / as sysdba SQL> create pfile from spfile; 查看ASM实例的配置
[oracle@SMART dbs]$ cat init+ASM.ora
修改参数asm_diskstring:
SQL> alter system set asm_diskstring='/dev/vg_ora/*'; alter system set asm_diskstring='/dev/vg_ora/*' *
ERROR at line 1:
ORA-02097: parameter cannot be modified because specified value is invalid ORA-15014: location 'ORCL:DISK01' is not in the discovery set
//错误提示由于前面安装过程中采用oracleasm命令创建的DISK01,不在这个设置的搜索路径中,导致不能修改,而前面oracleasm createdisk disk01 /dev/vg_ora/lvasm01采用的就是此路径,有点矛盾
SQL> alter system set asm_diskstring='/dev/mapper/*'; alter system set asm_diskstring='/dev/mapper/*' *
ERROR at line 1:
ORA-02097: parameter cannot be modified because specified value is invalid ORA-15014: location 'ORCL:DISK01' is not in the discovery set
//错误提示由于前面安装过程中采用oracleasm命令创建的DISK01,不在这个设置的搜索路径中,导致不能修改
总结:可能是由于使用oracleasm创建的磁盘使用了ORCL:DISK01的缘故,或者是root使用的oracleasm命令创建是否存在权限问题,就不做深入研究了;当然可以继续使用oracleasm来创建磁盘,oracleasm createdisk disk02
17
/dev/vg_ora/lvasm02然后通过sql命令alter diskgroup asmdg add disk ‘ORCL:DISK02’的方式来新增磁盘。
这里准备采用sql命令的方式来管理ASM磁盘组。
由于目前oracle是采用rawdevice,直接删除原先磁盘组ASMDG,重新建立磁盘组
SQL> drop diskgroup asmdg;
SQL> alter system set asm_diskstring='/dev/vg_ora/*'; System altered.
SQL> create diskgroup asmdg external redundancy disk '/dev/vg_ora/lvasm02' name disk02;
create diskgroup asmdg external redundancy disk '/dev/vg_ora/lvasm02' name disk02 *
ERROR at line 1:
ORA-15018: diskgroup cannot be created
ORA-15031: disk specification '/dev/vg_ora/lvasm02' matches no disks
SQL> alter system set asm_diskstring='/dev/mapper/*'; System altered. SQL> create diskgroup asmdg external redundancy disk '/dev/mapper/vg_ora-lvasm02' name disk02; Diskgroup created.
实践操作结果:
linux下的/dev/vgname目录是存放的链接指向/dev/mapper,链接不能设置为搜索路径,只能采用/dev/mapper为搜索路径,当alter system set asm_diskstring执行后,可以通过v$asm_disk查看这个路径是否有效,是否有磁盘显示。
通过v$asm_disk 和 v$asm_diskgroup查看磁盘情况。
由于设置了asm_diskstring='/dev/mapper/*',,不需要通过命令例如oracleasm createdisk,就可以在v$asm_disk视图中会把所有的磁盘,LV显示出来,是否可以加入到asmdg,主要看header_status状态为CANDIDATE或者PROVISIONED表示该LV可以加入到磁盘组;如果为FORMER表示该磁盘被drop(比如前面drop diskgroup asmdg 使得组内成员member变为former),可以重新加入磁盘组。 例如
SQL> alter diskgroup asmdg add disk '/dev/mapper/vg_ora-lvasm04' name disk04; Done
SQL> alter diskgroup asmdg add disk '/dev/mapper/vg_ora-lvasm01' name disk01; Done
18
RAW迁移到ASM
目的:将raw设备上文件迁移到ASM的磁盘组ASMDG,参数文件,归档位置,闪回区域保留在文件系统。
[oracle@SMART admin]$ export ORACLE_SID=orcl [oracle@SMART admin]$ sqlplus / as sysdba
设置控制文件位置为ASMDG磁盘组,scope=spfile表示参数写入spfile,下次启动数据库生效:
SQL>alter system set control_files='+asmdg','+asmdg', '/oradata/fla/ORCL/control03.ctl' scope=spfile;
SQL> shutdown immediate
[oracle@SMART admin]$ rman target / RMAN> startup nomount
RMAN> restore controlfile from '/oracle/orcl/control01.ctl'; RMAN> alter database mount;
RMAN> backup as copy database format '+ASMDG'; //将数据文件以copy方式到ASMDG磁盘组 RMAN> SWITCH DATABASE TO COPY;
//使得控制文件指向新的数据文件位置
RMAN> RECOVER DATABASE;
RMAN> run {
2> set newname for tempfile 1 to '+ASMDG'; 3> switch tempfile all; 4> }
RMAN> alter database open;
切换联机日志文件为ASMDG:
SQL> alter database add logfile group 3 '+asmdg' size 50m; SQL> alter database add logfile group 4 '+asmdg' size 50m; SQL> alter system switch logfile; SQL> alter system switch logfile;
SQL> alter database drop logfile group 1;
alter database drop logfile group 1
ORA-01624: log 1 needed for crash recovery of instance orcl (thread 1)
ORA-00312: online log 1 thread 1: '/oracle/orcl/redo01.log'
SQL> alter system archive log current; SQL> alter system checkpoint;
19
SQL> alter database drop logfile group 1; SQL> alter database drop logfile group 2; 检查文件位置
select * from v$logfile
select * from dba_temp_files select * from dba_data_files select * from v$controlfile
备注:
当数据库nomount状态下可以使用from来还原,from的来源可以是现有的文件或者备份集,数据库在mount或者open状态下是不能使用from,只能使用to。例如: RMAN> restore controlfile from '+asmdg';
Starting restore at 28-NOV-11 using channel ORA_DISK_1
RMAN-00571:
=========================================================== RMAN-00569: ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571:
=========================================================== RMAN-03002: failure of restore command at 11/28/2011 06:09:07
RMAN-06496: must use the TO clause when the database is mounted or open
RMAN> restore controlfile to '+ASMDG';
Starting restore at 28-NOV-11 using channel ORA_DISK_1
channel ORA_DISK_1: starting datafile backupset restore channel ORA_DISK_1: restoring control file output filename=+ASMDG channel ORA_DISK_1: reading from backup piece /oradata/fla/ORCL/autobackup/2011_11_28/o1_mf_s_768377240_7f75dsn3_.bkp
channel ORA_DISK_1: restored backup piece 1 piece
handle=/oradata/fla/ORCL/autobackup/2011_11_28/o1_mf_s_768377240_7f75dsn3_.bkp tag=TAG20111128T060720
channel ORA_DISK_1: restore complete, elapsed time: 00:00:02 Finished restore at 28-NOV-11
一些误操作的错误解决:
RMAN> alter database open;
20