故障发生了!

今天DBA小倩接到一个客户紧急任务,客户说自己的业务数据库突然不好使了,连接也出现了问题,开发人员连库就报这个错

小倩要来了系统的登录用户名密码,登录到了数据库服务器一看

好家伙!根目录满了。

仔细检查发现,之前软件实施的人员把数据库直接装到了根目录下,最后导致根目录空间耗尽,数据库无法写入审计文件,无法登录了。

1
2
3
4
5
6
7
8
9
10
11
12
[root@dbserver /]# df -Th
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs tmpfs 1.9G 12M 1.9G 1% /run
tmpfs tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/mapper/centos-root xfs 50G 50G 33M 100% /
/dev/mapper/centos-home xfs 445G 33M 445G 1% /home
/dev/sda1 xfs 1014M 151M 864M 15% /boot
tmpfs tmpfs 378M 0 378M 0% /run/user/0
[root@dbserver /]# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp u01 usr var

根分区是没地方了,可是/home分区却几乎没用。

这就是之前的集成实施人员和软件实施人员没有对接好,两个人都是二把刀,导致这么个结果。

此时如何快速恢复业务呢?

经过检查/home分区下只有用户的默认文件夹,并无其它生产数据,与客户沟通后,小倩建议把/home分区删除,扩容到根分区里,快速恢复业务。

说干就干,首先,先去$ORACLE_BASE目录下释放一点文件,比如下面这些,都可以删除

1
2
/u01/app/oracle/diag/rdbms/orcl/orcl/alert   目录下的log_*.xml文件
/u01/app/oracle/diag/rdbms/orcl/orcl/trace 目录下的日志文件,alert_orcl.log如果不是很大,不建议删除。

备份一下home下的文件,检查了只有oracle目录。

1
2
3
4
5
[root@dbserver home]# ls -al
total 0
drwxr-xr-x. 3 root root 20 Sep 7 21:59 .
dr-xr-xr-x. 18 root root 255 Sep 7 22:00 ..
drwx------ 2 oracle dba 62 Sep 7 21:59 oracle

这里我们用cp 直接复制/home目录下的文件到/root目录下。r表示目录下所有子目录也复制,p表进带权限复制。

1
2
3
cd /home/
cp * -rp /root/
cd ~

下一步,我们要卸载/home分区,把/home分区对应的lv删除。

1
2
3
4
[root@dbserver ~]# umount  /home/
[root@dbserver ~]# lvremove /dev/centos/home
Do you really want to remove active logical volume centos/home? [y/n]: y
Logical volume "home" successfully removed

查看VG有空闲空间,这里我们再把剩余的空间扩容到根分区所属于的名为root的lv里。扩容lv后,在线直接扩容设备/dev/mapper/centos-root对应的根文件系统。扩容成功后根分区空间立即够用了,业务立马恢复。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
[root@dbserver ~]# vgs
VG #PV #LV #SN Attr VSize VFree
centos 1 2 0 wz--n- <499.00g 445.12g
[root@dbserver ~]# lvresize -l +100%FREE /dev/centos/root
Size of logical volume centos/root changed from 50.00 GiB (12800 extents) to 495.12 GiB (126751 extents).
Logical volume centos/root successfully resized.
[root@dbserver ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root centos -wi-ao---- 495.12g
swap centos -wi-ao---- <3.88g
[root@dbserver]# xfs_growfs /dev/mapper/centos-root
meta-data=/dev/mapper/centos-root isize=512 agcount=4, agsize=3276800 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=13107200, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=6400, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 13107200 to 129793024
[root@dbserver]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 12M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/mapper/centos-root 496G 50G 446G 11% /
/dev/sda1 1014M 151M 864M 15% /boot
tmpfs 378M 0 378M 0% /run/user/0

最后别忘记了把备份走文件恢复到/home目录下

1
[root@dbserver ~]# cp -rp oracle/ /home/

完美收工了?

你以为这样就完了么?

没过1天,领导又找到了小倩,说数据库在本地磁盘空间太小了,性能也不能,我们又搞了个磁盘阵列,想把数据库整体迁移到存储上。

下一期我们一起来看看小倩同学怎么操作。

欢迎联系我一起讨论。我的微信号:Eric_xu_2023

也欢迎关注我的公众号:

1.png