完美为Linux增加硬盘并且给Oracle扩展表空间

事情是这样起因的

不久之前(到底多久之前我也不记得了),我向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必须是比你的当前分区小

上面这些语句,先留着,接着看把.

黑线表情
image-1856

字符界面无法登录怎么办[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

然后可以这样进行操作[操作前记得先备份一下数据]:

  1. 先分配一个硬盘[区别于现有硬盘,大小自定]
  2. 关机,然后重启至命令行界面[假设你的是虚拟机里面的Linux,因为你可能要查询],进入命令行:1,在终端执行:
    1
    2
    3
    4
    5
    6
    7
    8
    reboot init 3
    //或者执行
    reboot
     //在启动完成之后(也就是看到登录界面的时候,同时按
    alt+ctrl+shirt+F3
    //,切换回图形化界面:
    alt+F7
    [不过貌似不需要这样操作])
  3. 进入命令行界面之后,输入命令[先挂载刚才添加的硬盘]:
    1
    mkdir /mnt/sdb

    接着查看哪个硬盘还没有被挂载:

    1
    fdisk -l

    [一般显示在最下面的那个,注意看这样一行字:

    1
    (Disk /dev/sdb: 64.4 GB, 64424509440 bytes),记住/dev/sdb]

    ,执行挂载:

    1
    mount /dev/sdb /mnt/sdb

    ,执行格式化硬盘:

    1
    mkfs -t ext4 /dev/sdb

    接下来就可以开始复制数据了.

  4. 我的数据文件比较大,复制花了大概10多分钟,比较慢,请耐心等待.使用命令即可复制:
    1
    cp -aP /home/ /mnt/sdb

    然后就慢慢等把.

  5. 复制完成之后,进去看一下:
    1
    2
    3
     cd /mnt/sdb
    //然后执行
    ls

    命令.大致不缺文件[!!!此时暂时不要进行删除任何数据的操作,建议在当前硬盘使用到15天之后再删除原数据,以防不测]

  6. 执行:
    1
    2
    3
    4
    umount -l /home
    //卸载现有分区(!!!假如一开始就在图形化界面操作,会报错!!)
     umount -l /mnt/sdb
    //卸载已经有数据的分区
  7. 接着执行:
    1
    2
    3
    4
    mount /dev/sdb /home
    cd /home
    ls
    //(然后: 看一下是不是加载上了)
  8. 还有一个重要的步骤,接着往下看!!!

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数据文件大小

接着,开启服务,打开数据库,其余的…
不好意思,开头都已经写了.