当前位置: 首页 > news >正文

Oracle控制文件损坏恢复方案

一 说明

1.1 迁移说明

把表空间TS_HX_SB_IDX、IDX_SSD_HX中的全部索引迁移至表空间TS_SSD_IDX。

1.2 迁移流程

整体迁移流程:(因为索引量很大,需要分批进行迁移)

步骤流程计划时间估算
1迁移用户HX_YH、HX_RD、HX_JC、HX_PZ、HX_DJ、HX_ZM、HX_RD索引(无分区)一个晚上
2迁移用户HX_ZS索引(有分区)一个晚上
3迁移用户HX_SB索引(首先迁移分区索引(小索引)一节点上跑,非分区索引(小索引)二节点上跑)一个晚上
4迁移用户HX_SB剩下的索引一个晚上

总结时间:4个晚上
总计花费业务停机时间:0

二 索引迁移详细操作流程

2.1 前期准备

统计各个用户在此两表空间的索引量大小,以便计划迁移。

SQL> select segment_type,sum(bytes)/1024/1024 m from dba_segments where owner='HX_SB' and tablespace_name in('TS_HX_SB_IDX','IDX_SSD_HX') group by segment_type;SEGMENT_TYPE                M
------------------ ----------
INDEX               494088.25
INDEX PARTITION    236043.688SQL> select segment_type,sum(bytes)/1024/1024 m from dba_segments where owner='HX_ZS' and tablespace_name in('TS_HX_SB_IDX','IDX_SSD_HX') group by segment_type;SEGMENT_TYPE                M
------------------ ----------
INDEX                45650.75
INDEX PARTITION    99813.3125SQL> select segment_type,sum(bytes)/1024/1024 m from dba_segments where owner='HX_RD' and tablespace_name in('TS_HX_SB_IDX','IDX_SSD_HX') group by segment_type;SEGMENT_TYPE                M
------------------ ----------
INDEX               8373.6875

。。。。。。。。

这些都没有分区:
单位(M)
HX_YH 50
HX_RD 8373.6875
HX_JC 4.0625
HX_PZ 640.4375
HX_DJ 3732
HX_ZM 39

综上:计划先迁移HX_RD、 HX_YH、HX_RD、HX_JC、HX_PZ、HX_DJ、HX_ZM这些用户的索引,再迁移HX_ZS,最后分批迁移HX_SB索引。

2.2 撰写迁移脚本(无分区)

重建普通索引脚本:

su – oracle
sqlplus / as sysdba
set lin 400
set pagesize 0
spool /home/oracle/idx/hx_rd.sql
select 'alter index '||a.owner||'.'||a.index_name||' rebuild tablespace TS_SSD_IDX online parallel 4;' from dba_indexes a where a.owner='HX_RD' and not exists(select * from dba_part_indexes b where a.owner=b.owner and a.index_name=b.index_name) and tablespace_name in('TS_HX_SB_IDX','IDX_SSD_HX');
spool off;

修改parallel脚本:

su – oracle
sqlplus / as sysdba
set lin 400
set pagesize 0 
spool /home/oracle/idx/hx_rd_parallel.sql
select 'alter index '||a.owner||'.'||a.index_name||' noparallel;' from dba_indexes a where a.owner='HX_RD' and not exists(select * from dba_part_indexes b where a.owner=b.owner and a.index_name=b.index_name) and tablespace_name in('TS_HX_SB_IDX','IDX_SSD_HX');
spool off;

注意事项:
把hx_dr.sql和hx_rd_parallel.sql中无关信息删除。(比如select ‘alter’…… 最后的33 rows selected),hx_rd.sql文件中只保留alter index hx_rd.index_name rebuild TS_SSD_IDX online parallel 4; hx_rd_parallel.sql文件中只保留 alter index hx_rd.index_name noparallel;即可。

最后撰写hx_rd.sh脚本。

vi hx_rd.sh
[oracle@ljw sql]$ cat 2.sh
#!/bin/sh
sqlplus "/ as sysdba" <<EOF
host echo "*******************begin rebuild*****************",`date`
@idx/hx_rd.sql;
host echo "*******************end rebuild*******************",`date`
host echo "*******************begin noparalel***************",`date`
@hx_rd_parallel.sql;
host echo "*******************end noparalel*****************",`date`
EOF

2.3 撰写迁移脚本(有分区)
重建普通索引脚本:

su – oracle
sqlplus / as sysdba
set lin 400
set pagesize 0
spool /home/oracle/idx/hx_zs.sql
select 'alter index '||a.owner||'.'||a.index_name||' rebuild tablespace TS_SSD_IDX online parallel 4;' from dba_indexes a where a.owner='HX_ZS' and not exists(select * from dba_part_indexes b where a.owner=b.owner and a.index_name=b.index_name) and tablespace_name in('TS_HX_SB_IDX','IDX_SSD_HX');
spool off;

重建分区索引脚本:

su – oracle
sqlplus / as sysdba
set lin 400
set pagesize 0
spool /home/oracle/idx/hx_zs_part.sql
select 'alter index '||a.owner||'.'||a.index_name||' rebuild partition '||b.partition_name||' tablespace TS_SSD_IDX online parallel 4;' from dba_part_indexes a,dba_ind_partitions b where a.owner=b.index_owner and a.index_name=b.index_name and a.owner='HX_ZS' and tablespace_name in('TS_HX_SB_IDX','IDX_SSD_HX');
spool off;

修改普通索引parallel脚本:

su – oracle
sqlplus / as sysdba
set lin 400
set pagesize 0 
spool /home/oracle/idx/hx_zs_parallel.sql
select 'alter index '||a.owner||'.'||a.index_name||' noparallel;' from dba_indexes a where a.owner='HX_RD' and not exists(select * from dba_part_indexes b where a.owner=b.owner and a.index_name=b.index_name) and tablespace_name in('TS_HX_SB_IDX','IDX_SSD_HX');
spool off;

修改分区索引parallel脚本:

su – oracle
sqlplus / as sysdba
set lin 400
set pagesize 0 
spool /home/oracle/idx/hx_zs_part_parallel.sql
select 'alter index '||a.owner||'.'||a.index_name||' noparallel;' from dba_part_indexes a,dba_ind_partitions b where a.owner=b.index_owner and a.index_name=b.index_name and a.owner='HX_ZS' and tablespace_name in('TS_HX_SB_IDX','IDX_SSD_HX') group by a.owner,a.index_name;
spool off;

注意事项和前面一样,删除。sql中无关信息。

最后撰写hx_rd.sh脚本。

vi hx_rd.sh#!/bin/sh
sqlplus "/ as sysdba" <<EOF
host echo "*******************begin rebuild*****************",`date`
@idx/hx_zs.sql;
@hx_zs_part.sql;
host echo "*******************end rebuild*******************",`date`
host echo "*******************begin noparalel***************",`date`
@hx_zs_parallel.sql;
@hx_zs_part_parallel.sql;
host echo "*******************end noparalel*****************",`date`
EOF

2.4 执行脚本
cd 到相应目录下
nohup ./hx_rd.sh & 即可

2.5 检查索引迁移成功与否
检查源表空间中是否还存在索引:

select index_name,degree,tablespace_name from dba_indexes where owner='HX_RD' and tablespace_name in('TS_HX_SB_IDX','IDX_SSD_HX');

检查迁移到的表空间中是否有索引:

select index_name,degree,tablespace_name from dba_indexes where owner='HX_RD' and tablespace_name in ('TS_SSD_IDX');

常用语句:

如:
查询HX_SB用户下普通索引的大小:

select segment_name,segment_type,bytes/1024/1024 m from dba_segments where owner='HX_SB' and tablespace_name in('TS_HX_SB_IDX','IDX_SSD_HX') and segment_type='INDEX' order by bytes;

查询HX_SB用户下分区索引的大小:

select segment_name,segment_type,partition_name,bytes/1024/1024 m from dba_segments where owner='HX_SB' and tablespace_name in('TS_HX_SB_IDX','IDX_SSD_HX') and segment_type='INDEX PARTITION' order by bytes;

hhh6.jpg

http://www.xdnf.cn/news/640639.html

相关文章:

  • dify_plugin数据库中的表总结
  • threejs几何体BufferGeometry顶点
  • 【报错】Error attempting to get column ‘created_time‘ from result set.解决方法
  • 手撕string类
  • 汉诺塔超级计算机堆栈区与数据区的协同
  • Docker(零):本文为 “Docker系列” 有关博文的简介和目录
  • Docker核心笔记
  • JavaWeb:SpringBoot配置优先级详解
  • 互联网大厂Java求职面试:AI应用集成中的RAG系统优化与向量数据库性能调优实战
  • 英语科研词汇的困境与汉语的崛起之光
  • 漫谈英伟达GPU架构进化史:从Celsius到Blackwell
  • vue3中使用watch
  • 什么是智能体agent?
  • Anaconda 常用命令汇总
  • Mongo DB | 多种修改数据库名称的方式
  • 明阳智慧能源社招校招入职测评 |iLogic言语逻辑数字、Talent5大五职业性格测评、TAS倍智人才测评考什么
  • 资源-又在网上淘到金了-三维模型下载
  • CodeTop之LRU缓存
  • SQL JOIN
  • 4款顶级磁力下载工具,速度提升器,可以变下变播
  • 【RocketMQ 生产者和消费者】- 生产者发送故障延时策略
  • MATLAB在逐渐被Python淘汰吗
  • 【Java高阶面经:缓存篇】35、 Redis单线程 vs Memcached多线程:高性能内存数据库设计解析
  • ComfyUI进行海报创作
  • 【Linux 学习计划】-- 冯诺依曼体系 | 操作系统的概念与定位,以及其如何管理软件
  • Reactor模式详解:高并发场景下的事件驱动架构
  • ROI智能计算精灵
  • Google 推出 Flow —— AI 电影制作新平台
  • 浏览器游戏的次世代革命:WebAssembly 3.0 实战指南
  • 微雪2.7英寸墨水屏 API函数 解释