事情是这样起因的
不久之前(到底多久之前我也不记得了),我向Oracle数据库中插入数据的时候,提示表空间已经满了.果断进行了很多命令(此处不记得了.主要用了很多命令和乱七八糟的参数.),但是你依然可以在你的Linux上运行:
1 | df -l //查看硬盘分配情况,以及使用情况 |
刚才试验了一下,下面的命令是可以查询Oracle表空间使用情况的:
1 2 3 4 5 6 7 8 9 | select a.file_id "FileNo",a.tablespace_name "Tablespace_name", a.bytes "Bytes",a.bytes-sum(nvl(b.bytes,0)) "Used", sum(nvl(b.bytes,0)) "Free", sum(nvl(b.bytes,0))/a.bytes*100 "%free" from dba_data_files a, dba_free_space b where a.file_id=b.file_id(+) group by a.tablespace_name , a.file_id,a.bytes order by a.tablespace_name; |
然后,然后呢,下面这条SQL,可以修改表空间的大小:
1 | ALTER DATABASE DATAFILE '/ora11gr2/oradata/ORA/ORA/users01.dbf' RESIZE 30G; //这个30G必须是比你的当前分区小 |
上面这些语句,先留着,接着看把.
字符界面无法登录怎么办[64位系统专属]
我前不久遇到这个问题,觉得甚是郁闷,后来在网上看到了解决方案:
最好是在图形化界面下面登录系统,然后用root执行:
1 2 3 4 | vi /etc/pam.d/login // 在lib后面加上64 session required /lib/security/pam_limits.so session required /lib64/security/pam_limits.so session required pam_limits.so |
保存退出,重启.
各种修改文件
在得知Oracle表空间不够之后,我对rhel系统的硬盘进行了各种操作,但都无际于事,包括对硬盘直接进行添加(VM虚拟机里面的rhel)!
最后我的做法是[此处假设你的Linux是经过良好分区的]:
1 2 3 4 5 | //类似下面这个样子: Filesystem 1K-blocks Used Available Use% Mounted on /dev/sda2 20642428 4950920 14642932 26% / /dev/sda1 198337 32770 155327 18% /boot /dev/sdb 61927420 30151108 28630584 52% /home |
然后可以这样进行操作[操作前记得先备份一下数据]:
- 先分配一个硬盘[区别于现有硬盘,大小自定]
- 关机,然后重启至命令行界面[假设你的是虚拟机里面的Linux,因为你可能要查询],进入命令行:1,在终端执行:1
2
3
4
5
6
7
8reboot init 3
//或者执行
reboot
//在启动完成之后(也就是看到登录界面的时候,同时按
alt+ctrl+shirt+F3
//,切换回图形化界面:
alt+F7
[不过貌似不需要这样操作]) - 进入命令行界面之后,输入命令[先挂载刚才添加的硬盘]:1mkdir /mnt/sdb
接着查看哪个硬盘还没有被挂载:
1fdisk -l[一般显示在最下面的那个,注意看这样一行字:
1(Disk /dev/sdb: 64.4 GB, 64424509440 bytes),记住/dev/sdb],执行挂载:
1mount /dev/sdb /mnt/sdb,执行格式化硬盘:
1mkfs -t ext4 /dev/sdb接下来就可以开始复制数据了.
- 我的数据文件比较大,复制花了大概10多分钟,比较慢,请耐心等待.使用命令即可复制:1cp -aP /home/ /mnt/sdb
然后就慢慢等把.
- 复制完成之后,进去看一下:1
2
3cd /mnt/sdb
//然后执行
ls命令.大致不缺文件[!!!此时暂时不要进行删除任何数据的操作,建议在当前硬盘使用到15天之后再删除原数据,以防不测]
- 执行:1
2
3
4umount -l /home
//卸载现有分区(!!!假如一开始就在图形化界面操作,会报错!!)
umount -l /mnt/sdb
//卸载已经有数据的分区 - 接着执行:1
2
3
4mount /dev/sdb /home
cd /home
ls
//(然后: 看一下是不是加载上了) - 还有一个重要的步骤,接着往下看!!!
fstab出错了怎么处理??
接上面,/etc/fstab是一个在启动系统的时候,自动加载相应分区的配置文件非常重要!!
我们目前是把分区挂载到系统了,想要自动加载,请往下看:
1 2 3 4 5 | mv fstab fstab.bak //备份数据 vi fstab //然后在最后一行添加如下数据,注意空格 /dev/sdb /home ext4 defaults 0 0 //然后:ESC -> :wq! 回车退出 |
接着执行: reboot 重启进入图形化界面.
假如fstab文件丢了,进不了系统怎么办
首先进入字符界面,执行: df -l 命令,输出如下:
1 2 3 4 | Filesystem 1K-blocks Used Available Use% Mounted on /dev/sda2 20642428 4950936 14642916 26% / /dev/sda1 198337 32770 155327 18% /boot /dev/sdb 61927420 45433432 13348260 78% /home |
然后手动自己写fstab文件:
1 | vi /etc/fstab |
里面添加如下内容{参照你自己的系统配置}:
1 2 3 4 | /dev/sda1 /boot ext4 defaults 0 0 /dev/sda2 / ext4 defaults 1 1 /dev/sdb /home ext4 defaults 0 0 /dev/sda5 swap swap defaults 0 0 |
然后保存退出.
最基本的,然后执行 reboot 就可以了.[光盘修复是行不通的,我搞了一晚上!!结果……………都不行,于是我苦逼的手写了fstab文件]….
修改Oracle数据文件大小
接着,开启服务,打开数据库,其余的…
不好意思,开头都已经写了.