0
点赞
收藏
分享

微信扫一扫

Oracle 数据库裸设备扩容处理

前段时间,我管理的一台Oracle数据库表空间容量不足了,由于本人以前没有接触过Oracle的使用所以,就自己查资料来研究如何扩容,网上的文档多数都是在物理机上扩容,而偏偏我的数据文件是存储在裸设备上的,裸设备和磁盘文件稍有不同,再加上Oracle默认是以表空间为归类的,操作上与MySQL有些不一样。

先是查询了前人留下的扩容文档,但多数写的草率根本无从下手,气得我直接当场气死,后来经过各种查资料各种尝试,最终还是扩容完成了,这里做个总结,免得以后再碰到类似的问题,防止二次当场气死。

首先确定数据库的基本信息,先查询数据库名称,表空间位置等。

SQL> select name from v$database; 查当前数据库名

SQL> select * from v$datafile; 查表空间文件位置

查询当前裸设备容量情况,如下命令

SQL> select name,total_mb,free_mb,(free_mb/total_mb)*100 as usage from v$asm_diskgroup;

Oracle 数据库裸设备扩容处理_运维故障处理

查询所有的表空间。

SQL> select tablespace_name from dba_tablespaces;

Oracle 数据库裸设备扩容处理_sql_02

查询表空间与用户对应关系。

SQL> select default_tablespace as "默认表空间", temporary_tablespace as "临时表空间", d.username as "用户" from dba_users d;

Oracle 数据库裸设备扩容处理_裸设备_03

以TBS_CSP_PUB_DAT为例,查询该表空间中有哪些表。

SQL> select TABLE_NAME,TABLESPACE_NAME from dba_tables where TABLESPACE_NAME='TBS_CSP_PUB_DAT';

Oracle 数据库裸设备扩容处理_裸设备_04

接着查询一下裸设备的使用情况。

SQL> set line 200

SQL> col path for a40

首先查询组ID与裸设备名称对应关系。

SQL> select group_number,name,state,total_mb,free_mb from v$asm_diskgroup;

Oracle 数据库裸设备扩容处理_表空间_05

接着查询其挂载位置。

SQL> select group_number,mount_status,header_status,path,total_mb,free_mb from v$asm_disk;

Oracle 数据库裸设备扩容处理_运维故障处理_06

如上可知道裸设备所对应的位置为/dev/目录下,我们可以Linux切换过去看看,裸设备无法直接在linux上操作,Linux只保留一个类似于符号链接的东西。

Oracle 数据库裸设备扩容处理_表空间_07

查询TBS_CSP_PUB_DAT所对应到裸设备中的位置。

SQL> select file_name from dba_data_files where tablespace_name='TBS_CSP_PUB_DAT' order by file_id;

Oracle 数据库裸设备扩容处理_运维故障处理_08

查询表空间利用率使用情况。

set pagesize 9999

set pagesize 9999

set linesize 132

select

a.tablespace_name,

a.Total_mb,

f.Free_mb,

round(a.total_MB-f.free_mb,2) Used_mb,

round((f.free_MB/a.total_MB)100) "%_Free"
from
(select tablespace_name, sum(bytes/(1024
1024)) total_MB from dba_data_files group by tablespace_name) a,

(select tablespace_name, round(sum(bytes/(1024*1024))) free_MB from dba_free_space group by tablespace_name) f

WHERE a.tablespace_name = f.tablespace_name(+)

order by "%_Free"

/

Oracle 数据库裸设备扩容处理_运维故障处理_09

其他有用的参数查询

Oracle 数据库裸设备扩容处理_裸设备_10

确定好参数以后,只需要保证裸设备中容量足够,即可执行一条命令完成扩容任务,以扩容 TBS_CSP_PUB_DAT 为例

先来看一下扩容前的数据

SQL> select tablespace_name,file_name,autoextensible from dba_data_files where autoextensible='YES';

Oracle 数据库裸设备扩容处理_表空间_11

首先开启表空间自动扩展。

SQL> ALTER DATABASE DATAFILE '+DG_DATA1/rlv_pub_dat001' AUTOEXTEND ON;

扩大容量可以这么写,注意pub_dat0xx不能冲突,如下增加1个GB

SQL> alter tablespace 需要扩容的空间 add datafile '+DG_DATA1/rlv_pub_dat017' SIZE 1g;

Oracle 数据库裸设备扩容处理_sql_12

最后查询一下,已经添加上了。

SQL> select file_name from dba_data_files where tablespace_name='TBS_CSP_PUB_DAT' order by file_id;

Oracle 数据库裸设备扩容处理_表空间_13

需要注意的是,如果裸设备中的容量严重不足,那么就无法直接扩容,正确的做法是去机房,给裸设备增加一块新磁盘,然后规划好容量,之后在使用上面的方法对Oracle数据库扩容。

版权声明:本博客文章与代码均为学习时整理的笔记,文章 [均为原创] 作品,转载请 [添加出处] ,您添加出处是我创作的动力!





举报

相关推荐

0 条评论