Oracle数据库部分迁至闪存存储的实现方法

环境:oracle 11.2.0.4 rac(2 nodes)

说明:假设新增闪存挂载点是/flash(使用了第三方的集群文件系统),如果是使用oracle的asm,则本文提及的所有/flash目录都可以认定是新的闪存磁盘组是+flash。

1 实施需求

为提高数据库io性能,采购了全闪存阵列存储,但由于前期预算有限,只能将部分数据迁移到闪存存储上(当然,如果条件允许,还是强烈建议将数据库整体全部迁移到闪存)。经评估,最终确认将业务高峰时刻,io压力最大的表空间整体迁移到闪存存储上,此外,将数据库的redo和undo迁移到闪存存储上。

注:本文方案实际是我对某生产环境的真实需求而编写,由于该场景具有普适性,故脱敏后发表。

2 确认迁移表空间信息

主要根据业务高峰(以历史dbtime为主要参考指标),从对应awr报告中的tablespace io stats部分筛选出io压力最大的表空间。比如我这里确定数据库需要迁移到闪存的表空间是tbs_d_jingyu。

具体依据:

a.抽查平日数据库的awr报告,根据tablespace io stats部分,top1就是tbs_d_jingyu,而且比其他表空间高一个数量级。

b.抽查业务高峰时段数据库的awr报告,根据tablespace io stats部分,top1多数情况也是tbs_d_jingyu,但由于业务高峰期很多表空间都比较忙,不如平日明显,但综合考虑,还是选择tbs_d_jingyu表空间。

tbs_d_jingyu表空间大小:当前大小是2160g,预估数据量按30%的增长率,至少需要空间为2810g。

3 确认redo信息

将所有redo日志文件迁移到闪存。

很多年前,在oracle界就一直流传一个说法:不建议将redo放在ssd上,就连oracle官方文档都有对应的说法。所以直到现在还有很多人不敢将redo放在ssd上。而实际上,这个观点早已经过时,目前的企业级闪存卡经实际测试,是完全可以用来存放redo的。

确认redo信息,我这里是2节点rac,redo相关信息是:一共有两个线程,每个线程有7组日志,每个日志大小为2g。总大小28g。group组号是31-37,41-47。

4 确认undo信息

确认undo信息:

tablespace_name        free_space used_space tablespace_size used_percent
------------------------------ ---------- ---------- --------------- ------------
undotbs1            176.668823 4.33117676       181  2.39291534
undotbs2            47.9354248 .064575195       48  .134531657

可以看到,undotbs1大小181g,undotbs2大小48g。总大小229g。

5 表空间迁移到闪存

5.1 确认闪存空间符合最小需求

假设闪存挂载目录是/flash;按表空间30% 预留增长空间计算,对应闪存挂载目录空间最小值:

数据库迁移至闪存的空间最小需求:top tablespace + redo + undo =2810g + 28g + 229g=3067g

注:如果数据表空间和对应索引表空间是分开规划的,那么强烈建议将这个io最高的数据表空间对应的索引表空间也一起迁移,这样总空间需求量就还要加上对应索引表空间的需求。

5.2 表空间迁移到闪存

使用backup as copy tablesapce来实现表空间tbs_d_jingyu的迁移工作:

rman> backup as copy tablespace tbs_d_jingyu format '/flash/oradata/jydb5/';
sql> alter tablespace tbs_d_jingyu offline;
rman> switch tablespace tbs_d_jingyu to copy;
rman> recover tablespace tbs_d_jingyu;
sql> alter tablespace tbs_d_jingyu online;

6 redo迁移到闪存

新增redo logfile,删除历史redo。

redo迁移到闪存的操作命令:

--新增redo logfile
alter database add logfile thread 1 group 11 '/flash/oradata/jydb5/redo11.log' size 2147483648;
alter database add logfile thread 1 group 12 '/flash/oradata/jydb5/redo12.log' size 2147483648;
alter database add logfile thread 1 group 13 '/flash/oradata/jydb5/redo13.log' size 2147483648;
alter database add logfile thread 1 group 14 '/flash/oradata/jydb5/redo14.log' size 2147483648;
alter database add logfile thread 1 group 15 '/flash/oradata/jydb5/redo15.log' size 2147483648;
alter database add logfile thread 1 group 16 '/flash/oradata/jydb5/redo16.log' size 2147483648;
alter database add logfile thread 1 group 17 '/flash/oradata/jydb5/redo17.log' size 2147483648;
alter database add logfile thread 2 group 21 '/flash/oradata/jydb5/redo21.log' size 2147483648;
alter database add logfile thread 2 group 22 '/flash/oradata/jydb5/redo22.log' size 2147483648;
alter database add logfile thread 2 group 23 '/flash/oradata/jydb5/redo23.log' size 2147483648;
alter database add logfile thread 2 group 24 '/flash/oradata/jydb5/redo24.log' size 2147483648;
alter database add logfile thread 2 group 25 '/flash/oradata/jydb5/redo25.log' size 2147483648;
alter database add logfile thread 2 group 26 '/flash/oradata/jydb5/redo26.log' size 2147483648;
alter database add logfile thread 2 group 27 '/flash/oradata/jydb5/redo27.log' size 2147483648;
--删除历史redo
alter database drop logfile group 31;
alter database drop logfile group 32;
alter database drop logfile group 33;
alter database drop logfile group 34;
alter database drop logfile group 35;
alter database drop logfile group 36;
alter database drop logfile group 37;
alter database drop logfile group 41;
alter database drop logfile group 42;
alter database drop logfile group 43;
alter database drop logfile group 44;
alter database drop logfile group 45;
alter database drop logfile group 46;
alter database drop logfile group 47;

7 undo迁移到闪存

undo迁移实质就是通过创建新的undo表空间,然后修改默认undo表空间的设置,最终删除历史undo表空间。

undo表空间迁移到闪存:

create undo tablespace undotbs11 datafile '/flash/oradata/jydb5/undotbs101.dbf' size 30g;
create undo tablespace undotbs21 datafile '/flash/oradata/jydb5/undotbs201.dbf' size 24g;
alter tablespace undotbs11 add datafile '/flash/oradata/jydb5/undotbs102.dbf' size 30g;
alter tablespace undotbs11 add datafile '/flash/oradata/jydb5/undotbs103.dbf' size 30g;
alter tablespace undotbs11 add datafile '/flash/oradata/jydb5/undotbs104.dbf' size 30g;
alter tablespace undotbs11 add datafile '/flash/oradata/jydb5/undotbs105.dbf' size 30g;
alter tablespace undotbs11 add datafile '/flash/oradata/jydb5/undotbs106.dbf' size 31g;
alter tablespace undotbs21 add datafile '/flash/oradata/jydb5/undotbs202.dbf' size 24g;
--show parameter undo
alter system set undo_tablespace=undotbs11 sid = 'jydb51';
alter system set undo_tablespace=undotbs21 sid = 'jydb52';
--select segment_name ,status ,tablespace_name from dba_rollback_segs;(确认offline)
drop tablespace undotbs1 including contents and datafiles;
drop tablespace undotbs2 including contents and datafiles;

8 备库修改参数

数据库环境中还有一个adg备库。

针对备库,主要需要修改db_file_name_convert和log_file_name_convert参数值,增加对新目录的映射关系。

以上这篇oracle数据库部分迁至闪存存储的实现方法就是www.887551.com分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持www.887551.com。

(0)
上一篇 2022年3月22日
下一篇 2022年3月22日

相关推荐