centos7创建asm磁盘_ASM环境下防止误将数据文件扩容到本地文件系统的方法

38f340f8ecbee2fd1b4e9d8453c4f66f.png

前言

时常会接到客户或一线工程师反馈oracle数据库报“ora-01110”等错误,本人过往也处理过好几次类似的故障,发现基本上是由于开发人员或初级维护人员在执行数据库表空间扩容时,不小心将本身需要扩容到ASM磁盘组的数据文件扩容到了本地节点上;抑或是开发人员发现执行步骤错误之后直接物理删除错误文件,且未通知数据库维护人员导致。本文通过真实操作案例分享,讲述在ASM环境下如何防止误将数据文件扩容到本地文件系统的方法,希望各位技术人员未来能杜绝此类误操作发生。

在巡检中发现,数据库数据文件扩容到节点2本地目录中,导致只有单个节点能读取到该数据文件,节点一无法锁定数据文件。

256665829bb06b9eea81a646254f0721.png
数据文件

a14ca1f3eb463dc32f449898858b44bc.png
节点一alert_ log文件报错内容

案例处理

对误建立在节点2本地的数据文件迁移至ASM磁盘组,具体解决操作见下方。(注意:操作时需停止数据库所有实例,在变更期间数据库无法对外提供任何服务,需要提前申请停机时间操作。)

实施操作步骤

节点2:

Offline相应表空间:

col CHECKPOINT_CHANGE# for 9999999999999999999

select file#,CHECKPOINT_CHANGE#,status from v$datafile where file# in ('23','25','27');

col CHECKPOINT_CHANGE# for 9999999999999999999

select file#,CHECKPOINT_CHANGE#,status from V$DATAFILE_HEADER datafile_head where file# in ('23','25','27');

CHECKPOINT_CHANGE# 号一致

alter tablespace CSG_MD offline;

alter tablespace TBS_META_NW offline;

alter tablespace TS_KPI offline;

rman 备份数据文件

rman target /

backup datafile 23,25,27;

rman 恢复数据文件

rman target /

run{

set newname for datafile '/dev/shm/data/CMX_DATA1.dbf' to '+ORADATA/sjzy/datafile/CMX_DATA1.dbf';

set newname for datafile '/dev/shm/data/CMX_DATA2.dbf' to '+ORADATA/sjzy/datafile/CMX_DATA2.dbf';

set newname for datafile '/dev/shm/data/CMX_DATA3.dbf' to '+ORADATA/sjzy/datafile/CMX_DATA3.dbf';

restore datafile 23,25,27;

}

修改控制文件指针

alter database rename file '/dev/shm/data/CMX_DATA1.dbf' to '+ORADATA/sjzy/datafile/CMX_DATA1.dbf';

alter database rename file '/dev/shm/data/CMX_DATA2.dbf' to '+ORADATA/sjzy/datafile/CMX_DATA2.dbf';

alter database rename file '/dev/shm/data/CMX_DATA3.dbf' to '+ORADATA/sjzy/datafile/CMX_DATA3.dbf';

检查

select file#,name,status,bytes/1024 from v$datafile where file# in ('23','25','27');

name 结果为:+ORADATA/sjzy/datafile/CMX_DATA1.dbf

online 相应表空间:

alter tablespace CSG_MD online;

alter tablespace TBS_META_NW online;

alter tablespace TS_KPI online;

防止误将数据文件扩容到本地文件系统的方法

在rac asm环境下,创建表空间或给表空间扩容时,容易出现在数据文件中少写+号,或是磁盘组的名称中出现空格等问题,将数据文件写到本地文件系统,导致只有一个节点能读写,而其他节点无法读写存在异常的数据文件。

解决方法:通过在数据库部署db级别的触发器,可以有效防止该问题的发生。创建表空间或扩容时,数据文件名的开头必须包含正确的磁盘组名称:“+磁盘组名”。

脚本示例:

第一步、创建一个type,如果为了使split函数具有通用性,请将其size 设大些。

create or replace type type_split as table of varchar2(4000)

/

第二步、创建function split

create or replace function split

(

p_list varchar2,

p_sep varchar2 := ','

) return type_split pipelined

is

l_idx pls_integer;

v_list varchar2(4000) := p_list;

begin

loop

l_idx := instr(v_list,p_sep);

if l_idx > 0 then

pipe row(substr(v_list,1,l_idx-1));

v_list := substr(v_list,l_idx+length(p_sep));

else

pipe row(v_list);

exit;

end if;

end loop;

return;

end split;

/

第三步、创建触发器:

CREATE OR REPLACE TRIGGER cs_pnp_trigger

BEFORE ALTER OR CREATE ON DATABASE

DECLARE

v_oper varchar2(32); --operation type

v_obj_name varchar2(32); --object name

v_obj_type varchar2(32); --object type

v_sql_txt ora_name_list_t;

v_n BINARY_INTEGER;

v_stmt varchar2(4000); --sql statement

v_n2 number := 0;

v_dg_count number := 1;

v_in_dg number := 1;

v_tmp_dgname varchar2(100) := '';

BEGIN

--dbms_output.put_line(v_stmt);

select ora_sysevent, ora_dict_obj_name(), ora_dict_obj_type()

into v_oper, v_obj_name, v_obj_type

from dual;

--dbms_output.put_line(ora_sysevent||':'||v_obj_type||':'||v_obj_name);

IF (v_oper = 'CREATE' OR v_oper = 'ALTER') AND v_obj_type = 'TABLESPACE' THEN

v_stmt := '';

v_n := nvl(ora_sql_txt(v_sql_txt), 0);

FOR i IN 1 .. v_n LOOP

v_stmt := v_stmt || v_sql_txt(i);

END LOOP;

for j in (select * from table(split(v_stmt, chr(39)))) loop

v_n2 := v_n2 + 1;

if v_n2 mod 2 = 0 then

select COLUMN_VALUE

into v_tmp_dgname

from table(split(j.COLUMN_VALUE, '/'))

where rownum < 2;

select count(*)

into v_dg_count

from v$asm_diskgroup

where '+' || name = upper(v_tmp_dgname);

dbms_output.PUT_LINE(j.COLUMN_VALUE || v_dg_count);

if v_dg_count = 0 then

v_in_dg := 0;

exit;

end if;

end if;

end loop;

END IF;

IF v_in_dg = 0 THEN

RAISE_APPLICATION_ERROR(-20998,

'cs_pnp_trigger:

Attempt To CREATE or ALTER TABLESPACE in CLUSTER

and the diskgroup name "' || v_tmp_dgname ||

'" is INCORRECT!');

END IF;

END cs_pnp_trigger;

/

第四步、验证脚本:

以错误方式创建表空间:

SQL> create tablespace test1 datafile 'data' size 10m autoextend off;

create tablespace test1 datafile 'data' size 10m autoextend off

*

ERROR at line 1:

ORA-00604: error occurred at recursive SQL level 1

ORA-20998: cs_pnp_trigger:

Attempt To CREATE or ALTER TABLESPACE in CLUSTER

and the diskgroup name "data" is INCORRECT!

ORA-06512: at line 45

以错误方式扩容表空间:

SQL> alter tablespace users add datafile 'data_vg' size 10m autoextend off;

alter tablespace users add datafile 'data_vg' size 10m autoextend off

*

ERROR at line 1:

ORA-00604: error occurred at recursive SQL level 1

ORA-20998: cs_pnp_trigger:

Attempt To CREATE or ALTER TABLESPACE in CLUSTER

and the diskgroup name "data_vg" is INCORRECT!

ORA-06512: at line 45

部署触发器后,在创建表空间或给表空间扩容时,误操作将无法执行成功,误操作的数据文件不会生成,后台日志也不会报相关的操作提示。

第五步、如果不需要该触发器,可以采用如下步骤删除

drop TRIGGER cs_pnp_trigger;

drop function split;

drop type type_split ;

End

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/359063.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

单片机备用电池供电电路_第五节(重排) 电子入门 复位电路

时间有限&#xff0c;无法一一修改底部目录&#xff0c;请以此目录为准&#xff1a;向导&#xff1a;总目录&#xff1a;最好的电子、计算机从入门到工程师教程​zhuanlan.zhihu.com很多看完第三节 电子入门后&#xff0c;感觉难度陡然升高&#xff0c;适应不了&#xff0c;有情…

jQuery插件开发全解析

http://www.iteye.com/topic/545971 jQuery插件的开发包括两种&#xff1a;一种是类级别的插件开发&#xff0c;即给jQuery添加新的全局函数&#xff0c;相当于给jQuery类本身添加方法。jQuery的全局函数就是属于jQuery命名空间的函数&#xff0c;另一种是对象级别的插件开发&a…

jsf 传参数_在JSF 2中对定制验证器进行参数化

jsf 传参数在JSF 2中编写自定义验证器并不是一项复杂的任务。 您实现Validator接口&#xff0c;添加FacesValidator批注&#xff0c;并在faces-config.xml中插入validator声明&#xff0c; 仅此而已 。 一块蛋糕。 但是&#xff0c;让我们考虑以下情形&#xff1a; 您需要自定义…

java应该怎么学习?

很多人刚接触java,比较迷茫,下面我简单梳理一下后端的框架,希望你们能对java有个清晰的认识。 java是一种纯面向对象的编程语言,也是三大编程语言之一。java是由sun公司于1995年开发,它被称为“一次编译,处处可用”。 Struts在项目中的作用 Struts 在项目主要起控制作用…

docker安装clickhouse_clickhouse ----入门

clickhouse作为现在流行的数据分析数据库&#xff0c;非常热门。我也眼馋了好久&#xff0c;想先本地单机安装下&#xff0c;网上搜索了好多。也遇到了好多问题。我这边讲述下自己安装的过程。我这边的电脑是mac.第一步是安装docker.执行命令 brew cask install docker。等dock…

怎么修改_论文查重之后怎么修改?

使用知网论文查重以后&#xff0c;发现论文重复率很高&#xff0c;该怎么办&#xff1f;论文查重后怎么改&#xff1f;今天paperfree小编给大家介绍一下。方法一&#xff1a;重写如果论文存在很高的重复率&#xff0c;都是抄袭别人的论文&#xff0c;我们就可以考虑重写。在重写…

基于谷歌模型gemini-pro 的开发的QT 对话项目

支持的功能&#xff0c;新建对话框&#xff0c;目前发现相关梯子不支持访问谷歌的api 的可能代理设置的不对&#xff0c; QNetworkAccessManager manager;// Set up your requestQNetworkRequest request;request.setUrl(QUrl("https://generativelanguage.googleapis.com…

Lucene.net站内搜索—5、搜索引擎第一版实现

目录 Lucene.net站内搜索—1、SEO优化 Lucene.net站内搜索—2、Lucene.Net简介和分词 Lucene.net站内搜索—3、最简单搜索引擎代码Lucene.net站内搜索—4、搜索引擎第一版技术储备&#xff08;简单介绍Log4Net、生产者消费者模式&#xff09;Lucene.net站内搜索—5、搜索引擎第…

All your files have been encrypted

小弟的姑姑家的老板收银的电脑被黑客黑了,我来解决一下,小孩玩游戏玩电脑中的病毒, 方法很多种,仅供参考。 问题邮件截图: 参考方式: 方法一:给对方钱,一般比较贵,还不如重装系统。哈哈。 方法二:下载解密工具,尝试解密恢复数据, Ransomware File Decrypto Too…

8s yaml 配置生成_接口测试框架实战(六) | 配置的数据驱动

《Python 测试开发实战进阶》课程&#xff0c;4 个月挑战 BAT 大厂年薪 50W Offer&#xff0c;文末加群&#xff01;在实际工作中&#xff0c;为了便于维护&#xff0c;对于环境的切换和配置&#xff0c;通常不会使用硬编码的形式完成。在之前文章《多环境下的接口测试》中&…

使用JAXB和Jackson从XSD生成JSON模式

在本文中&#xff0c;我演示了一种从XML Schema &#xff08;XSD&#xff09;生成JSON Schema的 方法 。 在概述从XML Schema创建JSON Schema的方法的同时&#xff0c;本文还演示了JAXB实现的用法&#xff08;与JDK 9捆绑在一起的xjc版本2.2.12-b150331.1824 [build 1.9.0-ea-b…

Spring Integration完整示例

本文是我们名为“ Spring Integration for EAI ”的学院课程的一部分。 在本课程中&#xff0c;向您介绍了企业应用程序集成模式以及Spring Integration如何解决它们。 接下来&#xff0c;您将深入研究Spring Integration的基础知识&#xff0c;例如通道&#xff0c;转换器和适…

配置环境_JavaJDK环境变量配置

1.Java环境搭建1.1 JDK与JREJDK(Java Development Kit Java开发工具包)JDK是提供给Java开发人员使用的&#xff0c;其中包含了java的开发工具&#xff0c;也包括了JRE。所以安装了JDK&#xff0c;就不用在单独安装JRE了。其中开发工具&#xff1a;编译工具(javac.exe)打包工具(…

僵固式思维 OR 成长式思维

有意无意中&#xff0c;看到这样的一篇文章&#xff0c;觉得非常富有正能量&#xff0c;而且也比较有同感。而且&#xff0c;不仅仅对于职场暂时失落或者失意的人有帮助&#xff0c;就是对学生&#xff0c;也一样的。故特分享&#xff0c;以共勉之。 我想每个新人进入职场之后都…

Asp.net MVC 的一些总结(二)——图片显示

这里实现的是&#xff0c;如下图片所示的效果&#xff1a; 当然&#xff0c;当你看的下图的时候&#xff0c;请不要自己想当然的认为是简单的html布局&#xff01;&#xff01;&#xff01; &#xff08;1&#xff09;业务说明&#xff1a;图片地址是数据库里存的&#xff0c;图…

Spring整合基础

本文是我们名为“ Spring Integration for EAI ”的学院课程的一部分。 在本课程中&#xff0c;向您介绍了企业应用程序集成模式以及Spring Integration如何解决它们。 接下来&#xff0c;您将深入研究Spring Integration的基础知识&#xff0c;例如通道&#xff0c;转换器和适…

java 布局管理器_有时在Java中,一个布局管理器是不够的

java 布局管理器在开发Java Swing应用程序时&#xff0c;最经常的是&#xff0c;我们需要在多个嵌套面板中使用多个布局管理器。 这通常不是问题&#xff0c;被认为是几乎所有人类已知语言的所有UI开发的常规做法。 但是&#xff0c;大多数情况下&#xff0c;对于UI中的每个面板…

支付宝支付、微信支付(最详细教程)

对接支付宝支付接口&#xff0c;官方文档已经写的很清楚了&#xff0c;但是也有很多像我一样的小白&#xff0c;第一次对接支付宝支付接口&#xff0c;会有些迷茫&#xff0c;所以我在此写下这篇文章&#xff0c;给我和我一样的同学&#xff0c;一点思路吧。 第一步&#xff1…

降雨插值_ArcGIS计算土壤侵蚀模数(二)降雨侵蚀力因子R计算

本次采用中国土壤流失方程CSLE计算土壤侵蚀模数&#xff0c;计算公式为&#xff1a;ARKLSBET式中&#xff0c;式中&#xff1a;A—土壤侵蚀模数。thm-2a-1&#xff1b;R—降雨侵蚀力因子&#xff0c;MJmmhm-2h-1a-1&#xff1b;K—土壤可蚀性因子&#xff0c;thm2hhm-2MJmm-1&a…

购买阿里云ECS服务器忘记终端管理密码或者没有设置

自己开发一个APP,想把源码放到服务器上跑一跑,发现使用Xshell远程连接不上去,我记得买服务器的时候没有设置。 一般有两种方法: 1.买服务器的时候,阿里会给你发一份邮件,邮件里面有,这个是官方的说法,我是公司CTO,账号是老板开的,根本不可能看到邮件,所以对我来说不…