oracle 12c rac tablespace 表空间删除办法

本文详细介绍了在Oracle RAC环境中,表空间文件生成路径错误的问题及其解决方案。包括清理错误资源、表空间的离线删除、重新生成及验证过程。

文章来源: 原创adler_cn,大路

场景展示:

通过在某一台node节点上执行shell 脚本,正常会同步到其他node节点上,事实并不是如此,我们发现执行完脚本之后,RAC服务器上生成的tablespace 文件,并不能正确,

错误结果类似:'/u01/app/oracle/product/12.2.0/db_1/dbs/adler.dat'  这样的生成路径,这是不正确的,是单机节点的表现结果,

正常结果应该类似: +DATA/ORCL/99B08294CD7F045EE0511061480A4ADC/DATAFILE/adler.290.1029008888

后果:不能正常生成tablespace ,将会导致数据不能正常同步,问题很严重。

我们该如何解决类似的错误?

以下为解决办法:

1、先清理报错的事项,如账号和角色

drop user alder cascade;
drop role alder_REP_ROLE;
drop role alder_APP_ROLE;

2、查询空间表相关信息
select name from v$datafile;  #查询表空间
select tablespace_name,status from dba_tablespaces; #查询表空间相关信息

3、操作,先offline ,再执行删除操作;步骤:第一步执行  select name from v$datafile;  获取file_name,第二步执行  select tablespace_name,status from dba_tablespaces; 获取tablespace_name;
第一步:alter database datafile '/u01/app/oracle/product/12.2.0/db_1/dbs/adler.dat' offline drop;  
第二步:drop tablespace adler including contents; #删除以上表空间
              drop tablespace adler including contents and datafiles; #删除以上表空间和物理文件,和上面语句有一定差别,不过都可以执行

提示: 按照以上的办法,把其他需要重新生成的表空间和物理文件删除


4、验证结果

select tablespace_name, 
file_id, 
file_name, 
round(bytes / (1024 * 1024), 0) total_space 
from dba_data_files 
order by tablespace_name;  #查询表空间相关信息

select tablespace_name,file_name from dba_temp_files; # 查询临时表空间

 

5、重新执行shell 脚本,重新生成tablespace 表空间


6、表空间操作(补充)
查询:
SELECT tablespace_name, 
file_id, 
file_name, 
round(bytes / (1024 * 1024), 0) total_space 
FROM dba_data_files 
ORDER BY tablespace_name; 

新增操作:
create tablespace SIRM2 
datafile '+DATA/ORCL/99B08294CD7F045EE0539061480A4ADC/DATAFILE/SIRM2.dbf' size 1024M 
autoextend on next 10M maxsize unlimited
EXTENT MANAGEMENT local  autoallocate
segment space management auto;

删除操作:
drop tablespace SIRM2 including contents and datafiles;


7、用户删除操作(补充)

删除用户提示,无法删除在用用户

首先将索要删除的用户锁定(这句必须执行):

     alter user 用户名 account lock;

查看当前用户占用资源:

     select saddr,sid,serial#,paddr,username,status from v$session where username = '用户名';

然后可以看到status  为 INACTIVE 的记录;

 执行以下杀死进程的sql(下面的两个参数是status  为 INACTIVE 时的记录):

  alter system kill session 'sid,serial#';

 执行删除用户操作

  drop user 用户名 cascade;

要使用 Zabbix 5.0 监控 Oracle 12c RAC 集群,需要通过多种方式获取集群状态、数据库性能指标以及节点健康状况。以下是配置的关键步骤和技术细节: ### 3.1 准备工作 确保以下组件已经安装并配置: - **Zabbix Server**:运行在 Linux 或其他支持的平台上。 - **Oracle Instant Client**:用于连接 Oracle 数据库。 - **Python 环境**:推荐使用 Python 3.x。 - **cx_Oracle 库**:用于 Python 连接 Oracle。 ### 3.2 安装 Oracle Instant Client 从 Oracle 官网下载 Basic 和 SDK 包(如 `instantclient-basic-linux.x64-*.zip`),解压后设置环境变量: ```bash export ORACLE_HOME=/opt/oracle/instantclient_21_10 export LD_LIBRARY_PATH=$ORACLE_HOME:$LD_LIBRARY_PATH export PATH=$ORACLE_HOME:$PATH ``` ### 3.3 安装 cx_Oracle 使用 pip 安装 cx_Oracle 模块: ```bash pip install cx_Oracle --upgrade ``` ### 3.4 编写监控脚本 创建一个 Python 脚本以连接 Oracle 并查询关键指标。例如: ```python import cx_Oracle import json def get_oracle_rac_metrics(): dsn = cx_Oracle.makedsn('rac-scan', '1521', service_name='orcl') conn = cx_Oracle.connect(user='zabbix', password='zabbix', dsn=dsn) cursor = conn.cursor() metrics = {} # 查询实例状态 cursor.execute("SELECT instance_name, status FROM gv$instance") instances = {row[0]: row[1] for row in cursor.fetchall()} metrics['instances'] = instances # 查询缓存命中率 cursor.execute("SELECT (1 - (SUM(decode(name, 'physical reads', value, 0)) / (SUM(decode(name, 'db block gets', value, 0)) + SUM(decode(name, 'consistent gets', value, 0))))) * 100 AS hit_ratio FROM v$sysstat") metrics['cache_hit_ratio'] = cursor.fetchone()[0] # 查询表空间使用情况 cursor.execute(""" SELECT tablespace_name, ROUND((1 - (SUM(free_space) / SUM(total_space))) * 100, 2) AS usage_percent FROM ( SELECT a.tablespace_name, SUM(a.total_space) AS total_space, SUM(a.free_space) AS free_space FROM dba_tablespaces t, (SELECT tablespace_name, SUM(bytes) AS total_space, SUM(free_space) AS free_space FROM (SELECT tablespace_name, SUM(bytes) AS bytes, SUM(CASE WHEN maxbytes = 0 THEN bytes ELSE maxbytes END) AS maxbytes, SUM(free_space) AS free_space FROM dba_data_files GROUP BY tablespace_name) GROUP BY tablespace_name) a WHERE t.tablespace_name = a.tablespace_name(+) GROUP BY a.tablespace_name ) GROUP BY tablespace_name """) tablespace_usage = {row[0]: row[1] for row in cursor.fetchall()} metrics['tablespace_usage'] = tablespace_usage cursor.close() conn.close() return json.dumps(metrics) if __name__ == "__main__": print(get_oracle_rac_metrics()) ``` ### 3.5 在 Zabbix Agent 上部署脚本 将上述脚本保存为 `/etc/zabbix/scripts/oracle_rac_monitor.py`,并赋予执行权限: ```bash chmod +x /etc/zabbix/scripts/oracle_rac_monitor.py ``` 编辑 Zabbix Agent 的配置文件: ```ini UserParameter=oracle.rac.metrics,/etc/zabbix/scripts/oracle_rac_monitor.py ``` 重启 Zabbix Agent: ```bash systemctl restart zabbix-agent ``` ### 3.6 在 Zabbix Web 界面中配置监控项 1. 创建主机 `Oracle RAC Cluster`,关联到运行脚本的 Agent。 2. 添加自定义监控项: - 名称:`Oracle RAC Metrics` - 键值:`oracle.rac.metrics` - 类型:`Zabbix agent` - 其他保持默认。 3. 使用 JSON 解析器提取子项,例如: - 实例状态:`$.instances.<instance_name>` - 缓存命中率:`$.cache_hit_ratio` - 表空间使用率:`$.tablespace_usage.<tablespace_name>` ### 3.7 设置触发器与报警 根据实际需求设置触发器,例如: - 如果某个实例状态不是 `OPEN`,则触发告警。 - 如果缓存命中率低于 90%,则触发警告。 - 如果表空间使用率超过 90%,则通知 DBA。 通过以上步骤,可以实现对 Oracle 12c RAC 集群的全面监控,并及时发现潜在问题[^2]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值