Oracle-文件系统迁移到ASM

一) 在linux里增加1个8G的虚盘


 /dev/sdb,8G, 分6个区,每个区1024M,分别对应sdb1,sdb2,sdb3,sdb4(逻辑扩展),sdb5,sdb6,sdb7。




# fdisk -l


Disk /dev/sda: 32.2 GB, 32212254720 bytes
255 heads, 63 sectors/track, 3916 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes


   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          13      104391   83  Linux
/dev/sda2              14         274     2096482+  82  Linux swap / Solaris
/dev/sda3             275        3916    29254365   83  Linux


Disk /dev/sdb: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes


   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         125     1004031   83  Linux
/dev/sdb2             126         250     1004062+  83  Linux
/dev/sdb3             251         375     1004062+  83  Linux
/dev/sdb4             376        1044     5373742+   5  Extended
/dev/sdb5             376         500     1004031   83  Linux
/dev/sdb6             501         625     1004031   83  Linux
/dev/sdb7             626         750     1004031   83  Linux




二)提供ASM磁盘的方法


在Linux上创建ASM磁盘有两种方法:
1)Udev方法:这个方法在Linux5版之后已经稳定了,而且又是其他UNIX上(如AIX)的管理ASM磁盘的方法,所以一统天下的Udev方法应该是今后的方向。
2)ASMlib方法:这个方法仅仅针对Linux。


第一种方法:使用Udev方法提供ASM磁盘:


步骤1,# ls -al /dev/sd*
brw-r----- 1 root disk 8,  0 07-09 10:52 sda
brw-r----- 1 root disk 8,  1 07-09 10:53 sda1
brw-r----- 1 root disk 8,  2 07-09 10:52 sda2
brw-r----- 1 root disk 8,  3 07-09 10:53 sda3
brw-r----- 1 root disk 8, 16 07-09 10:52 sdb
brw-r----- 1 root disk 8, 17 07-09 10:52 sdb1
brw-r----- 1 root disk 8, 18 07-09 10:52 sdb2
brw-r----- 1 root disk 8, 19 07-09 10:52 sdb3
brw-r----- 1 root disk 8, 20 07-09 10:52 sdb4
brw-r----- 1 root disk 8, 21 07-09 10:52 sdb5
brw-r----- 1 root disk 8, 22 07-09 10:52 sdb6
brw-r----- 1 root disk 8, 23 07-09 10:52 sdb7


步骤2,编辑udev配置文件
#vi /etc/udev/rules.d/60-raw.rules  按照example编写如下:




ACTION=="add", ENV{MAJOR}=="8",ENV{MINOR}=="17",RUN+="/bin/raw /dev/raw/raw1 %M %m"
ACTION=="add", ENV{MAJOR}=="8",ENV{MINOR}=="18",RUN+="/bin/raw /dev/raw/raw2 %M %m"
ACTION=="add", ENV{MAJOR}=="8",ENV{MINOR}=="19",RUN+="/bin/raw /dev/raw/raw3 %M %m"
ACTION=="add", ENV{MAJOR}=="8",ENV{MINOR}=="20",RUN+="/bin/raw /dev/raw/raw4 %M %m"
ACTION=="add", ENV{MAJOR}=="8",ENV{MINOR}=="21",RUN+="/bin/raw /dev/raw/raw5 %M %m"
ACTION=="add", ENV{MAJOR}=="8",ENV{MINOR}=="22",RUN+="/bin/raw /dev/raw/raw6 %M %m"
ACTION=="add", ENV{MAJOR}=="8",ENV{MINOR}=="23",RUN+="/bin/raw /dev/raw/raw7 %M %m"
KERNEL=="raw[1-7]", OWNER="oracle", GROUP="oinstall", MODE="640"


步骤3,建立udev
# start_udev


#ll /dev/raw
#reboot
[root@timran dev]# ls -al /dev/raw/*
crw-r----- 1 oracle oinstall 162, 1 07-09 15:34 /dev/raw/raw1
crw-r----- 1 oracle oinstall 162, 2 07-09 15:34 /dev/raw/raw2
crw-r----- 1 oracle oinstall 162, 3 07-09 15:34 /dev/raw/raw3
crw-r----- 1 oracle oinstall 162, 4 07-09 10:53 /dev/raw/raw4
crw-r----- 1 oracle oinstall 162, 5 07-09 15:34 /dev/raw/raw5
crw-r----- 1 oracle oinstall 162, 6 07-09 15:34 /dev/raw/raw6
crw-r----- 1 oracle oinstall 162, 7 07-09 15:34 /dev/raw/raw7


步骤4:创建ASM实例
单实例的ASM也要用到RAC套件中的一些驱动,它们负责多实例间的通信。




#/u01/oracle/bin/localconfig add


# ps -ef |grep css




创建ASM参数文件
$vi $ORACLE_HOME/dbs/init+ASM.ora 
#*.asm_diskgroups='DG1'
*
*.asm_diskstring='/dev/raw/*'


*.diagnostic_dest='/u01'
*.instance_type='ASM' 
*.instance_name='+ASM'
*.asm_power_limit=1


步骤5,创建ASM的口令文件




$orapwd file=$ORACLE_HOME/dbs/orapw+ASM password=oracle entries=5




启动ASM实例


$export ORACLE_SID=+ASM
$sqlplus / as sysdba
SQL> startup……ORA-15110: 
no diskgroups mounted
这是因为ASM磁盘组还没有建立# 
ps -ef |grep +ASM


步骤6,创建ASM磁盘组。
创建磁盘组要在ASM实例下去做,不可以在RDBMS实例下完成






SQL>create diskgroup DG1 normal redundancy
failgroup con1 disk '/dev/raw/raw1','/dev/raw/raw2','/dev/raw/raw3'
failgroup con2 disk '/dev/raw/raw5','/dev/raw/raw6','/dev/raw/raw7';


三)检查和测试ASM是否可以工作。


1)检查ASM磁盘组及磁盘的相关信息,
col name for a15;
col failgroup for a20;


SQL> select NAME,STATE,FREE_MB,REQUIRED_MIRROR_FREE_MB,USABLE_FILE_MB from v$asm_diskgroup;


NAME       STATE          FREE_MB REQUIRED_MIRROR_FREE_MB USABLE_FILE_MB
---------------------------------------------------------------------------------------------------------------
DG1        MOUNTED           3750                     964            1393




SQL> select GROUP_NUMBER,DISK_NUMBER,NAME,FAILGROUP,STATE,TOTAL_MB from v$asm_disk;




SQL> select GROUP_NUMBER,DISK_NUMBER,NAME,FAILGROUP,STATE,TOTAL_MB from v$asm_disk;


GROUP_NUMBER DISK_NUMBER NAME            FAILGROUP            STATE      TOTAL_MB
------------ ----------- --------------- -------------------- -------- ----------
           1           0 DG1_0000        CON1                 NORMAL          980
           1           4 DG1_0004        CON2                 NORMAL          980
           2           0 DG1_0002        CON1                 NORMAL          980
           1           1 DG1_0001        CON1                 NORMAL          980
           1           3 DG1_0003        CON2                 NORMAL          980
           2           1 DG1_0005        CON2                 NORMAL          980


看一下ASM磁盘的情况:


SQL> col path for a40; 
SQL> select path, name, os_mb from v$asm_disk order by path;


PATH                                     NAME                 OS_MB
---------------------------------------- --------------- ----------
/dev/raw/raw1                            DG1_0000               980
/dev/raw/raw2                            DG1_0001               980
/dev/raw/raw3                            DG1_0002               980
/dev/raw/raw5                            DG1_0003               980
/dev/raw/raw6                            DG1_0004               980
/dev/raw/raw7                            DG1_0005               980


2)重新启动前将参数文件的第一行#去掉


[root@timran11g dbs]#vi /u01/oracle/dbs/init+ASM.ora 
*.asm_diskgroups='DG1'


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


四) 数据库迁移-从文件系统到ASM
了解原系统信息
SQL> archive log list;
SQL> show parameter spfile;
SQL> show parameter control_files;
 
生成pfile                                                          
SQL> create pfile='/tmp/pfile1' from spfile;


备控制文件,注意SQLPLUS手工备份的控制文件在RMAN下也可以用
SQL> alter database backup controlfile to '/tmp/controfile1';
 
--查看当前数据文件位置
SQL> select name from v$datafile
 
--查看OMF相关参数
SQL> show parameter db_create_file_dest;


SQL> show parameter db_recovery_file_dest_size;


SQL> show parameter db_recovery_file_dest;
 
SQL> show parameter log_archive_dest_1;
 
--修改控制文件位置到ASM
SQL> alter system set control_files='+dg1' scope=spfile;
 
SQL> alter system set db_create_file_dest='+dg1' ;(指定这个参数后,就不需要在创建表空间时指定具体的datafile的文件路径和名称了。)
 


--切换到RMAN操作
[oracle@timran11g ~]$ rman target /


RMAN> shutdown immediate;
 
--启动到nomount状态
RMAN> startup nomount;
 
--还原备份的控制文件
 
RMAN> restore controlfile from '/tmp/controfile1';
RMAN> alter database mount;


-- 备份数据文件副本到ASM磁盘组DG1
RMAN> backup as copy database format '+dg1';
RMAN-06497: WARNING: control file is not current,control file autobackup skipped


--切换数据文件到ASM
RMAN> switch database to copy;
 
--恢复数据库
RMAN> recover database;
 
--打开数据库
RMAN> alter database open resetlogs;
 
--切换SQL*PLUS操作
[oracle@timran11g ~]$ sqlplus "/as sysdba"
 
--迁移REDO到ASM
SQL> alter database add logfile group 4 '+dg1' size 50m;
SQL> alter database add logfile group 5 '+dg1' size 50m;
SQL> alter database add logfile group 6 '+dg1' size 50m;


--删除旧REDO


SQL> alter database drop logfile group 1;
alter database drop logfile group 1
SQL> alter database drop logfile group 2;
SQL> alter database drop logfile group 3;
SQL> alter system switch logfile;
SQL> alter database drop logfile group 1;


--因为TEMP不在控制文件中记录,要单独迁移TEMP到ASM,


删除旧TEMP文件
SQL> alter tablespace temp add tempfile '+DG1' size 100m;


SQL> alter tablespace temp drop tempfile '/u01/oradata/temp01.dbf';


--迁移spfile到ASM
SQL> show parameter spfile;
 
NAME                                 TYPE        VALUE
------------------------------------ -----------------------------------------
spfile                               string      /u01/oracle/timran11g/dbs/spfiletimran11g.ora


SQL> create pfile='/tmp/pfile2' from spfile;


SQL> create spfile='+dg1' from pfile='/tmp/pfile2';
 
SQL> exit
列出spfile在ASM下的别名
$export ORACLE_SID=+ASM
$asmcmd
asmcmd>ls  
 
+DG1/TIMRAN11G/PARAMETERFILE/spfile.266.884607021


[oracle@timran11g ~]$ vi $ORACLE_HOME/dbs/inittimran11g.ora   
                                                                                               
spfile='+DG1/TIMRAN11G/PARAMETERFILE/spfile.266.884607021'
备份老spfile


考虑归档日志要不要迁移到ASM


1) NFS(RAC)
2) ASM
2.1 建立磁盘组 FRA 包括两个ASM磁盘


前面讲ASM磁盘已经全部加入到DG组,现在删除两个ASM磁盘,为建立FRA组使用,


alter diskgroup DG1 drop disk DG1_0002;
alter diskgroup DG1 drop disk DG1_0005;


观察:在删除的过程中有ASM磁盘处于droping状态,说明此时正在动态平衡中。


create diskgroup FRA normal redundancy
failgroup f1 disk '/dev/raw/raw3'
failgroup f2 disk '/dev/raw/raw7';


2.2 改ASM参数文件关于磁盘组描述
[oracle@timran dbs]$ more init+ASM.ora 
*.asm_diskgroups='DG1','FRA'
*.asm_diskstring='/dev/raw/*'
*.diagnostic_dest='/u01'
*.instance_type='ASM' 
*.instance_name='+ASM'


SQL> select NAME,STATE,FREE_MB,REQUIRED_MIRROR_FREE_MB,USABLE_FILE_MB from v$asm_diskgroup;


NAME            STATE          FREE_MB REQUIRED_MIRROR_FREE_MB USABLE_FILE_MB
--------------- ----------- ---------- ----------------------- --------------
DG1             MOUNTED            8                     980            -486
FRA             MOUNTED            732                       0            366




GROUP_NUMBER DISK_NUMBER NAME            FAILGROUP            STATE      TOTAL_MB
------------ ----------- --------------- -------------------- -------- ----------
           1           0 DG1_0000        CON1                 NORMAL          980
           1           4 DG1_0004        CON2                 NORMAL          980
           2           0 FRA_0000        F1                   NORMAL          980
           1           1 DG1_0001        CON1                 NORMAL          980
           1           3 DG1_0003        CON2                 NORMAL          980
           2           1 FRA_0001        F2                   NORMAL          980


2.3 改路径参数
SQL> alter system set db_recovery_file_dest='+fra';
SQL> alter system set log_archive_dest_1='location=+fra';


--检查迁移结果 
SQL> startup force;


SQL> show parameter spfile;
 
NAME                                 TYPE        VALUE
------------------------------------ -----------------------------------------
spfile                               string      +DG1/timran11g/parameterfile/sp
                                                file.257.808328691


SQL> show parameter control_files;
 
SQL> archive log list;


SQL> Select Name From V$datafile;


删除旧的数据库文件

猜你喜欢

转载自blog.csdn.net/qq_34556414/article/details/80225664