无法登录oracle数据库--由于资源不足引起

摘要:
通过sqlplus使用sysdba登录数据库时,出现资源不足的错误。查看oracle用户打开的文件数:[oracle@viti1~]$lsof|greporacle|wc-l4850观察文件的数量是否超过了联机文件的数量。如果是,也应该进行处理。否则,继续查看整个系统磁盘的使用情况:[oracle@viti1~]$df lh文件系统可用容量已使用%%mount point/dev/mapper/vg_ viti1-lv_ root443G47G374G12%/tmpfs16G3.3G13G21%/dev/shm/dev/sda1485M68M392M15%/boot/dev/mapper-vg_ viti_lv_ Home445G80G344G19%/home观察磁盘是否已满。如果磁盘已满或接近满,则应进行处理。重新分区硬盘,并在家中设置/dev/mapper/vg_viti1-lv_400G。这是给/dev/mapper/vg_viti-1lv_的。由于root导致磁盘利用率达到100%,我们需要解决这个问题。

  通过sqlplus以sysdba登录数据库时,出现了资源不足的错误(具体错误代码已经记不住了)。

  首先应该观察一下系统中资源的一些限制参数。

[oracle@viti1 ~]$ cat /etc/security/limits.conf 
# /etc/security/limits.conf
#
#Each line describes a limit for a user in the form:
#
#<domain>        <type>  <item>  <value>
#
#Where:
#<domain> can be:
#        - an user name
#        - a group name, with @group syntax
#        - the wildcard *, for default entry
#        - the wildcard %, can be also used with %group syntax,
#                 for maxlogin limit
#
#<type> can have the two values:
#        - "soft" for enforcing the soft limits
#        - "hard" for enforcing hard limits
#
#<item> can be one of the following:
#        - core - limits the core file size (KB)
#        - data - max data size (KB)
#        - fsize - maximum filesize (KB)
#        - memlock - max locked-in-memory address space (KB)
#        - nofile - max number of open files
#        - rss - max resident set size (KB)
#        - stack - max stack size (KB)
#        - cpu - max CPU time (MIN)
#        - nproc - max number of processes
#        - as - address space limit (KB)
#        - maxlogins - max number of logins for this user
#        - maxsyslogins - max number of logins on the system
#        - priority - the priority to run user process with
#        - locks - max number of file locks the user can hold
#        - sigpending - max number of pending signals
#        - msgqueue - max memory used by POSIX message queues (bytes)
#        - nice - max nice priority allowed to raise to values: [-20, 19]
#        - rtprio - max realtime priority
#
#<domain>      <type>  <item>         <value>
#

#*               soft    core            0
#*               hard    rss             10000
#@student        hard    nproc           20
#@faculty        soft    nproc           20
#@faculty        hard    nproc           50
#ftp             hard    nproc           0
#@student        -       maxlogins       4

# End of file
oracle    soft    nproc   2047
oracle    hard    nproc   16384
oracle    soft    nofile  1024
oracle    hard    nofile  65536

  通过上面都输出可以知道,oracle用户的最大进程数为16384,能够打开的最大文件数为65536

  通过一下命令查看oracle用户下一个运行了多少进程:

[oracle@viti1 ~]$ ps -U oracle | wc -l
45

  如果oracle的进程数超过了限制,则需要对进行进行处理。否则继续。

  查看oracle用户下打开的文件的个数:

[oracle@viti1 ~]$ lsof | grep oracle | wc -l
4850

  观察是否超过了文件个数的上线,如果超过,则同样应该进行处理。否则继续

  查看整个系统磁盘的使用情况:

[oracle@viti1 ~]$ df -lh
文件系统          容量  已用  可用 已用%% 挂载点
/dev/mapper/vg_viti1-lv_root
                      443G   47G  374G  12% /
tmpfs                  16G  3.3G   13G  21% /dev/shm
/dev/sda1             485M   68M  392M  15% /boot
/dev/mapper/vg_viti1-lv_home
                      445G   80G  344G  19% /home

  观察是否有磁盘以满的情况,如果满了,或是快满则应该进行处理。

  对于我遇到都问题,就是由于dev/mapper/vg_viti1-lv_root分区的使用率为100%造成的。上面的输出是在我重新分区后的结构,最初dev/mapper/vg_viti1-lv_root的可用空间为50G,/dev/mapper/vg_viti1-lv_home为845G。对硬盘重新进行分区,将/dev/mapper/vg_viti1-lv_home中的400G给了/dev/mapper/vg_viti1-lv_root

  既然已经造成磁盘的使用率为100%,我们就需要去解决。首先,我希望找到,是什么数据导致了如此庞大的数据。通过du命令可以进行查看:

[root@viti1 ~]# du -sm /*
8    /bin
58    /boot
1    /cgroup
3316    /dev
26    /etc
80845    /home
239    /lib
29    /lib64
1    /lost+found
1    /media
0    /misc
1    /mnt
0    /net
2    /opt
du: cannot access `/proc/46443/task/46443/fd/4': No such file or directory
du: cannot access `/proc/46443/task/46443/fdinfo/4': No such file or directory
du: cannot access `/proc/46443/fd/4': No such file or directory
du: cannot access `/proc/46443/fdinfo/4': No such file or directory
0    /proc
1196    /root
15    /sbin
0    /selinux
1    /srv
0    /sys
1    /tmp
44971    /usr
150    /var

  如上所示,/usr目录中的文件占据了很大的空间。经过一步又一步的查看,最后锁定了一下文件:

[root@viti1 ~]# du -sm /usr/local/oracle/data/orcl11g/*
10    /usr/local/oracle/data/orcl11g/control01.ctl
51    /usr/local/oracle/data/orcl11g/redo01.log
51    /usr/local/oracle/data/orcl11g/redo02.log
51    /usr/local/oracle/data/orcl11g/redo03.log
641    /usr/local/oracle/data/orcl11g/sysaux01.dbf
851    /usr/local/oracle/data/orcl11g/system01.dbf
7    /usr/local/oracle/data/orcl11g/temp01.dbf
15676    /usr/local/oracle/data/orcl11g/undotbs01.dbf
6    /usr/local/oracle/data/orcl11g/users01.dbf

  通过上面的输出可知,是undotbs01.dbf逐渐庞大导致的,上网查看得知undotbs01.dbf是数据回滚的日志文件。既然找到了罪魁祸首那么就看看应该如何解决掉这个家伙。在google中输入undotbs01.dbf,竟然都是undotbs01.dbf过大的问题,网上的答案都是新建一个回滚日志的表空间,然后设置新的回滚日志表空间,删除旧的回滚日志表空间。但是,这一系列的操作都需要登录到oracle数据库才能够执行啊。无奈之下放弃这样方法。

  接下来的方法就应该是从新给磁盘分区,在网上查了一下重新分区的方法,不懂~(主要是对linux的文件系统理解的还不够)。首先,就是对磁盘的分区不够理解。通过dfisk命令,查看磁盘分区如下:

[root@viti1 ~]# fdisk -l

Disk /dev/sda: 1000.1 GB, 1000148590592 bytes
255 heads, 63 sectors/track, 121594 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0005b4a9

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          64      512000   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2              64      121595   976194560   8e  Linux LVM

Disk /dev/mapper/vg_viti1-lv_root: 483.2 GB, 483183820800 bytes
255 heads, 63 sectors/track, 58743 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xa5285a9d

                       Device Boot      Start         End      Blocks   Id  System

Disk /dev/mapper/vg_viti1-lv_swap: 16.9 GB, 16894656512 bytes
255 heads, 63 sectors/track, 2053 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000


Disk /dev/mapper/vg_viti1-lv_home: 499.5 GB, 499541606400 bytes
255 heads, 63 sectors/track, 60732 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

  对于上面的磁盘信息,产生了一连串的疑问:

  1. 为什么/dev/sda1与/dev/sda2相加已经是1T了(服务器的总容量就是1T),后面还有/dev/mapper/vg_viti1-lv_root等的三个分区呢?
  2. 对于/dev/sda1文件系统,通过命名方式可以知道是一个磁盘,但是/dev/mapper/vg_viti1-lv_root又是什么东西?

  由于上面的疑问说明我存在知识的盲点,在查询磁盘重新分区的过程中我遇到了lvm,这个词没见过,抱着试试看的态度,翻阅了一下鸟哥(当初也是跳着看的,一些不感兴趣的章节没有看)。看了之后真是或然开朗,lvm是一个虚拟分区的机制。目的是为了对分区进行扩容或是缩小。

  这不正式我的需求吗!

  快速在网上查阅如果对lvm的分区进行缩小和扩充(网上关于lvm解释的还是非常详细的)

  调整分区后重新测试!

  数据库成功登录:

[oracle@viti1 ~]$ sqlplus /nolog

SQL*Plus: Release 11.2.0.1.0 Production on Fri Nov 8 19:49:27 2013

Copyright (c) 1982, 2009, Oracle.  All rights reserved.

SQL> conn /as sysdba
Connected.
SQL> 

  大功告成!

  下面整理一下此次解决问题的思路:

  1. 遇到问题时,首先就是应该将问题的错误信息(或是错误代码)放到google中进行搜索;搜索后寻求多个结果,看哪个是可以执行的。
  2. 在解决问题中定会遇到不懂的地方(如:命令不理解,代码不理解),我觉得最好不要直接用自己不理解的东西进行测试,因为如果你不理解命令或是代码的真正用以,是无法知道解决问题的真正思路,进而就无法思考如何解决问题了。
  3. 在查看资料中,每个可能解决问题的点都要予以关注,就像这次,看到了lvm,了解一下,就解决了问题。
  4. 在解决问题中,应该有着积极/自信的态度。
  5. 一定要有个宏观的思路去思考问题,不能只关注到问题的一个点。

  

免责声明:文章转载自《无法登录oracle数据库--由于资源不足引起》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇5.多项式回归与模型泛化MSChart使用做折线图饼图下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

webpack的使用方法

我常用的webpack版本是3.8.1版本 https://www.cnblogs.com/QxQstar/p/5961387.html    这个是他的网址 那么我们说一下webpack,他是一个前端资源加载或打包的工具,他可以打包:img,css,js,json等 第一步:下载   npm  install  -g  webpack@3.8.1    ...

Oracle 11g 执行计划管理概述

以下内容来源于:http://www.51cto.com/art/200806/76223.htm 35.2  执行计划管理 35.2.1  概述 同一SQL语句的执行计划可能因为优化器的版本、优化统计、优化参数、系统设置的不同而不同。而SQL语句的执行计划自动改变,通常情况下会带来性能提升,但是在某些情况下可能导致系统性能的下降。在11g之前,DBA...

halcon案例学习之cbm_label_simple

*cbm_label_simple 程序说明:*这个示例程序展示了如何使用基于组件的匹配来定位复合对象。在这种情况下,应该在图像中找到一个标签,用户既不知道其中的组件,也不知道它们之间的关系。因此,创建组件模型需要三个操作符:* 1) gen_initial_components* 2) train_model_components* 3) create_...

【转】Android各大发布市场

前言  如果只有一个或者少许的两三个Android市场,本文也没用存在的必要性,本文谨献给同在Android奋战的同仁。 声明 欢迎转载,但请保留文章原始出处:) 博客园:http://www.cnblogs.com农民伯伯: http://over140.cnblogs.com  正文  一、应用市场  1、Google Play https://pl...

Oracle基础 存储过程和事务

一、事务和存储过程   在存储过程中如何使用事务。当需要在存储过程中同时执行多条添加、修改、删除SQL语句时,为了保证数据完整性,我们需要使用事务。使用方式和在PL-SQL中非常相似,但也有一些区别。   --带事务的存储过程 CREATE OR REPLACE PROCEDURE Account_zhuanzhang(fromuser NUMBER,to...

Oracle向MySQL迁移的注意点整理

1. 表结构 * 数据库设计工具: 连接Oracle拉取表字段信息, 调整数据库类型后, CM创建MySQL版本的创建表语句 * https://github.com/hepengju/ExcelVBAUtils 2. 表数据 * 数据迁移工具: 配置好数据库的来源和目标, 配置好需要同步的表, 直接JDBC查出来set进入, 1...