EN 联系我们加入我们
典型案例
您现在的位置:首页 > 典型案例
【案例分享】数据库存储迁移方案


安图特驻场运维团队收到服务申请,在尽量短的时间内完成停机迁移,将数据库数据迁移至新存储,调优性能以满足业务需求。工程师进行了详细分析,实施了如下迁移方案:


一、准备工作


1、涉及主机

a.收集信息

     数据库版本  :Oracle 11.2.0.1.0

     环境        :RAC双节点

     操作系统版本:Linuxversion2.6.18-128.7AXS3

b.主机wwn

数据库服务器1: **.**.**.**

view@tvcdb1[tvcdbs1]/home/view$ cat  /proc/scsi/qla2xxx/* | grep adapter-port

scsi-qla0-adapter-port=*************;

scsi-qla1-adapter-port=****************;


数据库服务器2: **.**.**.**

view@tvcdb2[tvcdbs2]/home/view$  cat  /proc/scsi/qla2xxx/* | grep adapter-port

scsi-qla0-adapter-port=*************;

scsi-qla1-adapter-port=*************;

scsi-qla2-adapter-port=************;

工程师根据主机wwn划zone。


、磁盘规划


1、原有存储阵列磁盘使用情况

主机名

IP

vgname

pvname

单盘大小

tvcdbs1

**.**.**.**

vg00

vg01

/dev/cciss/c0d0p2

/dev/sdiski

136.50G

60.00G

tvcdbs2

**.**.**.**

vg00

/dev/cciss/c0d0p2

136.50G


主机

功能

设备

大小

 

 

 

数据库服务器1

DGDATA

/dev/sdiskg(DGDATA_0000)

70G

/dev/sdiskh(DGDATA_0001)

70G

 

 

 

OCR_VOTE

/dev/sdiska(OCR_VOTE_0000)

1G

/dev/sdiskb(OCR_VOTE_0001)

1G

/dev/sdiskc(OCR_VOTE_0002)

1G

/dev/sdiskd(OCR_VOTE_0003)

1G

/dev/sdiske(OCR_VOTE_0004)

1G

/dev/sdiskf(OCR_VOTE_0005)

1G


2、新存储阵列磁盘规划表

主机

功能

设备

大小

数据库服务器1

DGDATA

/dev/sdiskp(DGDATA_0000)

70G

/dev/sdiskq(DGDATA_0001)

70G

 

 

OCR_VOTE

/dev/sdiskj(OCR_VOTE_0000)

1G

/dev/sdiskk(OCR_VOTE_0001)

1G

/dev/sdiskl(OCR_VOTE_0002)

1G

/dev/sdiskm(OCR_VOTE_0003)

1G

/dev/sdiskn(OCR_VOTE_0004)

1G

/dev/sdisko(OCR_VOTE_0005)

1G


文件系统

主机名

IP

标签

大小

VG

备注

tvcdbs1

**.**.**.**

/dev/mapper/vg01-lv_dbbak

50G

vg_dbbak-lv_dbbak
  总大小50G

单节点



三、Map磁盘


存储工程师划盘,并记录新划Lun盘的wwid。

需求: 共享:70G*2块   1G*6块 

           非共享: 60G*1块(节点1)


四、备份系统信息


1、基本信息

#view用户执行:

mkdir -p /home/view/20200725

/sbin/netstat -rn       > /home/view/20200725/route.20200725

/sbin/ifconfig            > /home/view/20200725/if.20200725

df -h                          > /home/view/20200725/df.20200725

cp /etc/udev/rules.d/20-names.rules  /etc/udev/rules.d/20-names.rules.20200725


2、系统原有盘的wwid

sfdisk -s|grep -v dm-|awk -F ':' '{print $1}'|awk -F '/dev/' '{print$2}'>/home/view/20200725/sfdisk_before.txt

 

while read wwid; do scsi_id -g -u -s /block/$wwid >>/home/view/20200725/wwid_before.txt; done</home/view/20200725/sfdisk_before.txt

 

cat wwid_before.txt

sort -u wwid_before.txt >wwid_before.txt.bak

cat wwid_before.txt.bak


五、连接新存储


1、停库(Oracle用户两节点)

sqlplus / as sysdba

SQL> shutdown immediate;

2、停集群并disable crs(Root用户两节点)

. ~grid/.bash_profile

crsctl disable crs

crsctl stop crs

3、重启服务器,找出新认到的盘wwid

sfdisk -s|grep -v dm-|awk -F ':' '{print $1}'|awk -F '/dev/' '{print$2}'>/home/view/20200725/sfdisk_after.txt

 

while read wwid; do scsi_id -g -u -s /block/$wwid >>/home/view/20200725/wwid_after.txt; done</home/view/20200725/sfdisk_after.txt

 

cat wwid_after.txt

sort -u wwid_before.txt >wwid_after.txt.bak

cat wwid_after.txt.bak

 

根据wwid号区分出新认到的9块盘。

4、绑盘

修改 /etc/udev/rules.d/20-names.rules 配置文件,新增如下内容:

KERNEL=="sd*", BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -u -s %p", RESULT=="*", NAME="sda%n", SYMLINK="sdiskaj%n"

KERNEL=="sd*", BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -u -s %p", RESULT=="*", NAME="sdb%n", SYMLINK="sdiskk%n"

KERNEL=="sd*", BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -u -s %p", RESULT=="*", NAME="sdc%n", SYMLINK="sdiskl%n"

KERNEL=="sd*", BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -u -s %p", RESULT=="*", NAME="sdd%n", SYMLINK="sdiskm%n"

KERNEL=="sd*", BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -u -s %p", RESULT=="*", NAME="sde%n", SYMLINK="sdiskn%n"

KERNEL=="sd*", BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -u -s %p", RESULT=="*", NAME="sdf%n", SYMLINK="sdisko%n"

KERNEL=="sd*", BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -u -s %p", RESULT=="*", NAME="sdg%n", SYMLINK="sdiskp%n"

KERNEL=="sd*", BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -u -s %p", RESULT=="*", NAME="sdh%n", SYMLINK="sdiskq%n"

KERNEL=="sd*", BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -u -s %p", RESULT=="*", NAME="sdi%n", SYMLINK="sdiskr%n"


5、重新扫描Lun盘

start_udev

确认新绑盘生效。

6、确认新盘权限

ll /dev/sdisk*

确认属主、属组为grid:asmadmin, 权限为660;


chown grid:asmadmin /dev/sdiskj

chown grid:asmadmin /dev/sdiskk

chown grid:asmadmin /dev/sdiskl

chown grid:asmadmin /dev/sdiskm

chown grid:asmadmin /dev/sdiskn

chown grid:asmadmin /dev/sdisko

chown grid:asmadmin /dev/sdiskp

chown grid:asmadmin /dev/sdiskq

 

chmod 660 /dev/sdiskj

chmod 660 /dev/sdiskk

chmod 660 /dev/sdiskl

chmod 660 /dev/sdiskm

chmod 660 /dev/sdiskn

chmod 660 /dev/sdisko

chmod 660 /dev/sdiskp

chmod 660 /dev/sdiskq


六、ASM磁盘组迁移


1、启动数据库

a.拉起集群(Root用户两个节点)

. ~grid/.bash_profile

crsctl start crs

crsctl enable crs

 

b.拉起实例(Oracle用户两个节点)

sqlplus / as sysdba

SQL>select instance_name,status,startup_time from gv$instance;

SQL>select name,open_mode from gv$database;


2、登录

su - grid

sqlplus / as sysasm


3、查询磁盘R

SQL> select group_number, name, state, type, total_mb/1024 total_gb, free_mb/1024 free_gb   from v$asm_diskgroup;

GROUP_NUMBER NAME    STATE        TYPE      TOTAL_GB      FREE_GB

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

           1 OCR_VOTE   MOUNTED      NORMAL       6 5.08984375

           2 DGDATA     MOUNTED    EXTERN       140 57.0966797


4、查询磁盘组中的磁盘

 set linesize 200

 col path format a20

 col name format a20

 col HEADER_STATUS format a15

 

 select disk_number, path, name, header_status,total_mb/1024, free_mb/1024

 from v$asm_disk  where group_number = 1;

DISK_NUMBER PATH         NAME          HEADER_STA TOTAL_MB/1024   FREE_MB/1024

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

          5 /dev/sdiskf  OCR_VOTE_0005 MEMBER                 1   .864257813

          2 /dev/sdiskc  OCR_VOTE_0002 MEMBER                 1   .831054688

          1 /dev/sdiskb  OCR_VOTE_0001 MEMBER                 1    .83203125

          0 /dev/sdiska  OCR_VOTE_0000 MEMBER                 1   .833984375

          4 /dev/sdiske  OCR_VOTE_0004 MEMBER                 1   .864257813

          3 /dev/sdiskd  OCR_VOTE_0003 MEMBER                 1   .864257813


select disk_number, path, name, header_status,total_mb/1024, free_mb/1024

from v$asm_disk   where group_number = 2;

DISK_NUMBER PATH           NAME         HEADER_STA   TOTAL_MB/1024 FREE_MB/1024

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

          0 /dev/sdiskg  DGDATA_0000    MEMBER                70   28.5478516

          1 /dev/sdiskh  DGDATA_0001    MEMBER                70   28.5488281

 


5、替换DGDATA磁盘组(Oracle用户一节点)

a.#DGDATA旧磁盘的状态

 set linesize 200 pages 1000;

 col name format a16;

col path format a30;

 col HEADER_STATUS format a16;

 

select name,path,HEADER_STATUS,TOTAL_MB/1024  from v$asm_disk   where path in ('/dev/sdiskg','/dev/sdiskh');

NAME         PATH            HEADER_STATUS    TOTAL_MB/1024

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

DGDATA_0000  /dev/sdiskg     MEMBER                      70

DGDATA_0001  /dev/sdiskh     MEMBER                      70

 

#核对盘的HEADER_STATUS是"MEMBER"

#核对盘的大小:70G

 

b.#DGDATA新磁盘的状态

SQL> set linesize 200 pages 1000;

SQL> col name format a16;

SQL> col path format a30;

SQL> col HEADER_STATUS format a16;

select name,path,HEADER_STATUS,TOTAL_MB

from v$asm_disk

where path in ('/dev/sdiskp','/dev/sdiskq');

 

#核对盘的HEADER_STATUS是"FORMER"或"CANDIDATE"

# 核对有2块盘:/dev/sdiskp和/dev/sdiskq

# 核对2块盘的大小: 70G

 

c.添加并删除DGDATA磁盘组:

alter diskgroup DGDATA  add disk '/dev/sdiskp','/dev/sdiskq' drop disk DGDATA_0000,DGDATA_0001 rebalance power 10;

 

d.监控Rebalance状态:

select * from v$asm_operation;

 

e.#DGDATA新磁盘的状态

set linesize 200 pages 1000;

col name format a16;

col path format a30;

col HEADER_STATUS format a16;

select name,path,HEADER_STATUS,TOTAL_MB

from v$asm_disk

where path in ('/dev/sdiskp','/dev/sdiskq');

#核对盘的HEADER_STATUS是"MEMBER"

#核对盘的大小:70G

 

f.#DGDATA旧磁盘的状态

set linesize 200 pages 1000;

col name format a16;

col path format a30;

col HEADER_STATUS format a16;

select name,path,HEADER_STATUS,TOTAL_MB

from v$asm_disk

where path in ('/dev/sdiskg','/dev/sdiskh');

 

#核对盘的HEADER_STATUS是"FORMER"

#核对盘的大小:70G


6、替换OCR_VOTE磁盘组(oracle用户一节点)

a.#OCR_VOTE旧磁盘的状态

 set linesize 200 pages 1000;

 col name format a16;

 col path format a30;

 col HEADER_STATUS format a16;

 select name,path,HEADER_STATUS,TOTAL_MB/1024  from v$asm_disk   where path in ('/dev/sdiska','/dev/sdiskb','/dev/sdiskc','/dev/sdiskd','/dev/sdiske','/dev/sdiskf');

 

NAME           PATH            HEADER_STATUS    TOTAL_MB/1024

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

OCR_VOTE_0005  /dev/sdiskf     MEMBER                       1

OCR_VOTE_0002  /dev/sdiskc     MEMBER                       1

OCR_VOTE_0001  /dev/sdiskb     MEMBER                         1

OCR_VOTE_0000  /dev/sdiska     MEMBER                       1

OCR_VOTE_0004  /dev/sdiske     MEMBER                       1

OCR_VOTE_0003  /dev/sdiskd     MEMBER                       1

 

#核对盘的HEADER_STATUS是"MEMBER"

#核对盘的大小:1G


b.#OCR_VOTE新磁盘的状态

set   linesize 200 pages 1000;

 col name format a15;

 col path format a15;

 col HEADER_STATUS format a16;

select   name,path,HEADER_STATUS,TOTAL_MB

from   v$asm_disk where path in ('/dev/sdiskj','/dev/sdiskk','/dev/sdiskl','/dev/sdiskm','/dev/sdiskn','/dev/sdisko');

#核对盘的HEADER_STATUS是"FORMER"或"CANDIDATE"

# 核对有6块盘:/dev/sdiskj到/dev/sdisko

# 核对6块盘的大小: 1G


c.添加并删除OCR_VOTE磁盘组:

alter diskgroup OCR_VOTE  add disk '/dev/sdiskj','/dev/sdiskk','/dev/sdiskl','/dev/sdiskm','/dev/sdiskn','/dev/sdisko'   drop disk OCR_VOTE_0000,OCR_VOTE_0001,OCR_VOTE_0002,OCR_VOTE_0003,OCR_VOTE_0004,OCR_VOTE_0005   rebalance power 10;


d.监控Rebalance状态:

select   * from v$asm_operation;


e.#OCR_VOTE新磁盘的状态

set   linesize 200 pages 1000;

col   name format a15;

col   path format a15;

col   HEADER_STATUS format a16;

select   name,path,HEADER_STATUS,TOTAL_MB

from   v$asm_disk

where path in ('/dev/sdiskj','/dev/sdiskk','/dev/sdiskl','/dev/sdiskm','/dev/sdiskn','/dev/sdisko'   );

#核对盘的HEADER_STATUS是"MEMBER"

#核对盘的大小: 1G


f.#OCR_VOTE旧磁盘的状态

set   linesize 200 pages 1000;

col   name format a16;

col   path format a15;

col   HEADER_STATUS format a16;

select   name,path,HEADER_STATUS,TOTAL_MB

from   v$asm_disk

where   path in ('/dev/sdiska','/dev/sdiskb','/dev/sdiskc','/dev/sdiskd','/dev/sdiske','/dev/sdiskf');

#核对盘的HEADER_STATUS是"FORMER"

#核对盘的大小:1G


七、文件系统迁移


需要迁移的信息

a.文件系统:

/dev/mapper/vg01-lv_dbbak     50G  377M   47G   1% /dbbak

b.组成文件系统的PV信息:

[root@tvcdb1 by-id]# pvs

PV      VG   Fmt  Attr PSize   PFree

/dev/cciss/c0d0p2 VG00 lvm2 a-   136.50G 13.50G

/dev/sdiski       vg01 lvm2 a-    60.00G 10.00G

c.添加新存储的PV到vg_appdata中:

pvcreate  /devsdiskr

vgextend vg01  /devsdiskr


d.将数据从旧PV移动到新PV,两个PV依次操作:

Pvmove   /dev/sdiski   /dev/sdiskr  

e.上述操作后旧pv中无数据,pv会从lv中剔除,将旧pv从vg中手工删除:

vgreduce  vg01    /dev/sdiski

f.主机层面删除旧pv信息:

pvremove  /dev/sdiski


八、修改配置文件


/etc/rc.local(重启自动更改磁盘权限,确保数据库正常运行。)

/etc/udev/rules.d/20-names.rules       
重新start_udev


九、迁移完成


验证数据库、集群状态正常,系统时间、路由、网络、文件系统挂载情况正常。

存储迁移完成,通知应用拉起服务,进行验证,应用确认正常后,本次迁移成功。


十、注意事项


1、应急方案:如磁盘组迁移失败,需将原磁盘组重新加回,同时删除新盘;

2、开始操作前进行完整的数据库全备及归档备份;

3、修改udev配置文件时注意字符的变动,防止磁盘无法识别;

4、注意数据库磁盘权限的修改及确认;

5、对比两节点,保证两边认到的磁盘一致;

6、应用业务停止后,方能进行停机操作。业务操作时推荐在ASM平衡中选择级别10,以保证耗时少,快速恢复业务运转。


如欲了解更多,请登录安图特官方网站:www.antute.com.cn

版权所有 安图特(北京)科技有限公司 备案号:京ICP备17074963号-1
技术支持:创世网络