CentOS6.4 安装 Oracle11g 及各种错误详解

 网上的文档形形色色,看的眼花缭乱,

吭哧吭哧 弄了一天装好了 碰到好多问题 这里与大家分享下

如果 linux命令 不熟悉的话这里去看看http://blog.csdn.net/dwj901125/article/details/11526249

1.硬件要求检查:

 

1.1 内存要求:
内存大于1G(使用虚拟机安装时内存要稍微大一些,否则安装检查不通过)

#cat /proc/meminfo //查看内存大小

 

1.2 交换分区要求:
交换分区是内存的1.5倍,可根据实际情况调整

#grep SwapTotal /proc/meminfo //查看交换分区大小

 

1.3 硬盘空间要求
硬盘空间要满足所需软件的大小,要求/tmp 分区不少于 400M ,安装目录应大于4G:

#df –h //查看磁盘空间使用情况

#du –ch //查看目录空间大小

 

2.软件检查:


2.1 检查安装oracle所依赖的组件包是否安装上

#rpm–qa |grep 软件包名称 //检查软件包是否安装上

 

安装软件包:

# yum install

 binutils-2.17.50.0.6

 compat-libstdc++-33-3.2.3

 elfutils-libelf-0.125

 elfutils-libelf-devel-0.125

 elfutils-libelf-devel-static-0.125

 gcc-4.1.2

 gcc-c++-4.1.2

 glibc-2.5-24

 glibc-common-2.5

 glibc-devel-2.5

 glibc-headers-2.5

 kernel-headers-2.6.18

 pdksh-5.2.14

 libaio-0.3.106

 libaio-devel-0.3.106

 libgcc-4.1.2

 libgomp-4.1.2

 libstdc++-4.1.2

 libstdc++-devel-4.1.2

 make-3.81

 numactl-devel-0.9.8.i386

 sysstat-7.0.2

 unixODBC-2.2.11

 unixODBC-devel-2.2.11 

 

2.2 安装缺少的软件包:
# rpm –ivh 软件包名称 //使用本地光盘镜像安装软件包

# yum search 查找适用的软件包

# yum install 软件包名称 //使用yum联网安装

 

3.配置系统环境


3.1修改内核参数(红色字体是参数的注解最好了解一下)
#vi /etc/sysctl.conf

fs.file-max= 6815744  决定了系统中所允许的文件句柄最大数目,文件句柄设置代表linux系统中可以打开的文件的数量。

fs.aio-max-nr=1048576  限制并发未完成的请求,应该设置避免I/O子系统故障

net.ipv4.ip_local_port_range= 9000 65500  应用程序可使用的IPv4端口范围

net.core.rmem_default= 262144  套接字接收缓冲区大小的缺省值

net.core.rmem_max= 4194304  套接字接收缓冲区大小的最大值

net.core.wmem_default= 262144   套接字发送缓冲区大小的缺省值

net.core.wmem_max= 1048576   套接字发送缓冲区大小的最大值

kernel.sem= 250 32000 100 128    250是参数semmsl的值,表示一个信号量集合中能够包含的信号量最大数目。32000是参数semmns的值,表示系统内可允许的信号量最大数目。100是参数semopm的值,表示单个semopm()调用在一个信号量集合上可以执行的操作数量。128是参数semmni的值,表示系统信号量集合总数。

kernel.shmmni=4096   共享内存段的最大数量。shmmni缺省值4096,一般够用了

kernel.shmall= 2097152  控制可以使用的共享内存的总页数。Linux共享内存页大小为4KB,共享内存段的大小都是共享内存页大小的整数倍。一个共享内存段的最大大小是16G,那么需要共享内存页数是16GB/4KB=16777216KB /4KB=4194304(页),也就是64Bit系统下16GB物理内存,设置kernel.shmall = 4194304才符合要求(几乎是原来设置2097152的两倍)。这时可以将shmmax参数调整到16G了,同时可以修改SGA_MAX_SIZE和SGA_TARGET为12G(您想设置的SGA最大大小,当然也可以是2G~14G等,还要协调PGA参数及OS等其他内存使用,不能设置太满,比如16G)    

kernel.shmmax= 536870912    核心参数中最重要的参数之一,用于定义单个共享内存段的最大值。设置应该足够大,能在一个共享内存段下容纳下整个的SGA ,设置的过低可能会导致需要创建多个共享内存段,这样可能导致系统性能的下降。至于导致系统下降的主要原因为在实例启动以及ServerProcess创建的时候,多个小的共享内存段可能会导致当时轻微的系统性能的降低(在启动的时候需要去创建多个虚拟地址段,在进程创建的时候要让进程对多个段进行“识别”,会有一些影响),但是其他时候都不会有影响。

官方建议值:

32位linux系统:可取最大值为4GB(4294967296bytes)-1byte,即4294967295。建议值为多于内存的一半,所以如果是32为系统,一般可取值为4294967295。32位系统对SGA大小有限制,所以SGA肯定可以包含在单个共享内存段中。

64位linux系统:可取的最大值为物理内存值-1byte,建议值为多于物理内存的一半,一般取值大于SGA_MAX_SIZE即可,可以取物理内存-1byte。例如,如果为12GB物理内存,可取12*1024*1024*1024-1=12884901887,SGA肯定会包含在单个共享内存段中 

#sysctl –p //让内核参数生效

 

3.2修改进程数和最大会话数
#vi /etc/security/limits.conf

oracle soft nproc 2047

oracle hard nproc 16384

oracle soft nofile 1024

oracle hard nofile 65536

 

3.3关联设置
#vi /etc/pam.d/login

session required pam_limits.so

 

3.4修改/etc/profile
#vi /etc/profile

if [ $USER = "oracle" ]; then

if [ $SHELL = "/bin/ksh" ]; then

ulimit -p 16384

ulimit -n 65536

else

ulimit -u 16384 -n 65536

fi

fi

 

4.创建安装用户、组和目录


4.1创建安装用户和组
#groupadd oinstall //创建oinstall组

#groupadd dba //创建dba组

#useradd -g oinstall -G dba oracle //新建用户oracle,设定其主组为oinstall,副组为dba

#id oracle //检查结果

#passwd oracle //设置oracle用户密码

 

4.2创建软件安装目录
#mkdir -p /home/oracle11g/app/        //创建安装根目录

#chown -R oracle:oinstall /home/oracle11g/      //安装根目录所属用户和组为oracle用户和oinstall组

#chmod -R 755 /home/oracle11g/         //修改目录的访问权限为所属用户完全控制,所属组和其他用户可读和执行

 

4.3设置用户环境变量
#vi /home/oracle/.bash_profile

export ORACLE_BASE=/home/oracle11g/app          //软件安装基目录

export ORACLE_SID=orcl                 //实例名

export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1       //软件安装产品目录

export ORA_CRS_HOME=$ORACLE_BASE/crs
export ORACLE_PATH=$ORACLE_BASE/common/oracle/sql:.:$ORACLE_HOME/rdbms/admin
export PATH=$ORACLE_HOME/bin:$ORA_CRS_HOME/bin:${PATH}:$HOME/bin
export PATH=${PATH}:/usr/bin:/bin:/usr/bin/X11:/usr/local/bin
export PATH=${PATH}:$ORACLE_BASE/common/oracle/bin
export ORACLE_TERM=xterm
export TNS_ADMIN=$ORACLE_HOME/network/admin
export ORA_NLS10=$ORACLE_HOME/nls/data
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/lib:/usr/lib:/usr/lib:/usr/local/lib:$ORACLE_HOME/oracm/lib:$ORACLE_HOME/lib
export LIBPATH=$LIBPATH:$ORA_CRS_HOME/lib:$ORACLE_HOME/lib
export CLASSPATH=${CLASSPATH}:$ORACLE_HOME/rdbms/jlib:$ORACLE_HOME/jlib:$ORACLE_HOME/network/jlib:$ORACLE_HOME/JRE
export HTREADS_FLAG=native
export TEMP=/tmp
export TMPDIR=/tmp
export NLS_LANG=american_america.WE8ISO8859P1
alias sysdba="sqlplus'/as sysdba'"
export EDITOR=vi

 

#source /home/oracle/.bash_profile        //加载文件使配置生效

#env|more //查看配置的环境变量是否正确

 

5.安装Oracle
安装过程和在windows上安装一个样子

将文件拷贝到Linux系统下

(安装VMwareTools就可以自由的拷贝文件)

具体的安装方法http://blog.csdn.net/dwj901125/article/details/11200401

移动文件:

# mv /home/* /usr/         移动home下所有文件到/usr下
# cp  -rf  /home* /usr/     拷贝home文件夹到/usr下

# cp  -rf  /home/* /usr/    拷贝home下所有文件到/usr下

定位到指定文件夹:

# cd /home/oracle11g

 

解压文件:

# unzip linux.x64_11gR2database_1of2.zip

# unzip linux.x64_11gR2_database_2of2.zip

#xhost +      //如果没有执行,将无法启动图形安装界面

#su – oracle  //切换到oracle用户

$ cd /home/oracle11g/database/

启动安装:

$ ./runInstaller

安装过程中容易出现乱码

解决办法如下

1.下载zysong.ttf

csdn免积分下载地址(http://download.csdn.net/detail/u010011052/6242313

2.进入刚解压的Oracle安装路径:

database/stage/Components/oracle.jdk/1.5.0.17.0/1/DataFiles/all.jar.

将DataFiles目录及all.jar文件修改成可写的(命令:chmod -R 777 * )

 

3.将all.jar拷贝到主机桌面解压,

解压后是一个名为jdk的文件夹,打开文件夹路径 jdk / jre / lib / fonts ,

新建一个  fallback 文件夹,将刚才下载的zysong.ttf放到这个文件夹中(如图:)

完成后将文件夹 jdk 打包为 all.jar ,

并替换掉database/stage/Components/oracle.jdk/1.5.0.17.0/1/DataFiles下的 all.jar

OK,中文乱码的问题解决了。

设置为英文:export  LANG=en_us

设置为中文:export  LANG=ZH_CN

 

这里还有可能出现一个错误:

[INS-06101]无法确定本地主机的IP地址

这时打开终端:

hostname     //查看你的主机名

cat /etc/sysconfig/network   

more /etc/hosts    //查看你现有的配置

原来问题是现有的配置没有与当前ip相对应的关系(如下图)

 

解决方法:打开终端(记得用root用户修改:su - root   别忘了空格)

vi /etc/hosts

打开以后输入你的   ip + 你的机器名 别忘了中间有空格 你的IP最好设置为固定的

按下ESC

输入(  :wq )保存

再次运行安装文件,发现那个错误没有了,我和我的小伙伴们惊呆了。

 

 

 

 

这里的“先决条件检查要注意下”

如果出现如下 参数 或安装包 检查未通过。要进行一系列操作。

操作系统内核参数:ip_local_port_range 失败    羞涩的说,这里是我修改错了内核。打开看下就知道

终端运行:# vi /etc/sysctl.conf     我们来下里边的参数

前边已经有写过 net.ipv4.ip_local_port_range=9000 65500  (俩数中间的空格别忘了)

但是我这里却是 net.ipv_local_port_range=9000 65500  (所以大家修改的时候千万要细心 别写错了)

提示会让你执行一个.sh文件:# bash /tem/CVU_11.2.0.1.0_oracle/runfixup.sh

此时在打开sysctl.conf看发现下边多了一行

(或者你直接在上边 用vi命令修改下端口范围就可以了)

 

第二个错误:缺少的程序包

首先检查一下你的系统是否已经安装了更新的包

例如:

# yum search libaio

运行安装检查到的适用包

# yum install XXXX

如果已安装的是更高版本的包 那么就可以跳过了

如果没有的话就要去往下下载相应的软件包自行安装,然后重新运行安装

csdn免积分下载地址:http://download.csdn.net/detail/u010011052/6260539

 

 

 

 

 

 

 

 

 切记要运行这里的两个文件

运行完成退出终端

然后点确定继续

 

 

六、启动Oracle

oracle默认是不自启动的,一旦重启,oracle就需要手动启动:

su - oracle

启动数据库 ,密码就是安装时你填的密码
sqlpuls /nolog

sql> conn sys/密码 as sysdba

sql> startup
sql> exit

sqlpuls具体路径为$ORACLE_HOME/bin/sqlplus
启动监听
lsnrctl start

 

oracle自己也有启动脚本dbstart和关闭脚本dbshut
先修改vi /etc/oratab
将最后一行N变成Y
然后修该$ORACLE_HOME/bin/dbstart内容

将ORACLE_HOME_LISTNER=$1 修改为:

ORACLE_HOME_LISTNER=$ORACLE_HOME

 

su - oracle

# dbstart    启动oracle了

这个也只是启动oracle数据库和监听基本服务

不带3个网页的服务,相当于上面的sqlplus 和 lsnrctl start两个操作

# dbshut    停止oracle了

要注意的是startup.log和shutdown.log最好确认一下他们的所有者是不是oracle
最好可以运行一下

#  chown oracle.oinstall startup.log
#  chown oracle.oinstall shutdown.log

 

 

配置步骤:
1、修改dbstart和dbshut脚本
$ vi $ORACLE_HOME/bin/dbstart
找到
ORACLE_HOME_LISTNER=$1
改为
ORACLE_HOME_LISTNER=$ORACLE_HOME
 
$ vi $ORACLE_HOME/bin/dbshut
找到
ORACLE_HOME_LISTNER=$1
改为
ORACLE_HOME_LISTNER=$ORACLE_HOME
 
2、修改/etc/oratab
$ su - root
# vi /etc/oratab
找到
# $ORACLE_HOME替换为$ORACLE_HOME变量的值,$SID替换为$SID变量的值
$SID:$ORACLE_HOME:N 
改为
$SID:$ORACLE_HOME:Y
 
3、编辑启动关闭脚本
# vi /etc/rc.d/init.d/oracle
 
#! /bin/bash
# chkconfig: 234 61 61
# description: Oracle 11g AutoRun Service
# /etc/rc.d/init.d/oracle
 
case "$1" in
    start)
        # starts oracle listener and instance
        echo "Starting Oracle Database:"
        su - oracle -lc "lsnrctl start"
        su - oracle -lc dbstart
        ;;
    stop)
        # shutdown oracle listner and instance
        echo "Shuting down Oracle Database:"
        su - oracle -lc "lsnrctl stop"
        su - oracle -lc dbshut
        ;;
    reload|restart)
        $0 stop
        $0 start
        ;;
    *)
     echo "Usage: {start|stop|reload|restart}"
     exit 1
esac
exit 0
 
4、检查脚本能否正确执行
# cd /etc/rc.d/init.d
# ./oracle start
# ./oracle stop
 
5、执行如下命令:
# chmod 750 /etc/rc.d/init.d/oracle
# ln -s /etc/rc.d/init.d/oracle /etc/rc2.d/S61oracle
# ln -s /etc/rc.d/init.d/oracle /etc/rc3.d/S61oracle
# ln -s /etc/rc.d/init.d/oracle /etc/rc4.d/S61oracle
# ln -s /etc/rc.d/init.d/oracle /etc/rc0.d/K61oracle
# ln -s /etc/rc.d/init.d/oracle /etc/rc6.d/K61oracle
# chkconfig --level 234 oracle on
# chkconfig --add oracle
 
注意:执行chkconfig时,需要在脚本中添加至少两行注释行(第3步中),第一行告诉chkconfig该服务的运行级别;第二行添加关于服务的简要说明。
 
5、最后重启动一下linux操作 系统,检查oracle是否自动启动成功
 
重新启动后,oracle启动成功,可以在系统启动界面看到相关信息

 

 

 

 七.CentOS下卸载Oracle

 1. oracle 用户登录
如果要再次安装,最好先做一些备份工作。
包括用户的登录脚本,数据库自动启动关闭的脚本,和Listener自动启动的脚本。
要是有可能连创建数据库的脚本也保存下来
2.
使用SQL*PLUS停止数据库
[oracle@ehaohai oracle]$ sqlplus /nolog
SQL> connect / as sysdba
SQL> shutdown [immediate]
SQL> exit

3.
停止 Listener
[oracle@ehaohai oracle]$ lsnrctl stop

4.
停止 HTTP 服务

[oracle@
ehaohai oracle]$ $ORACLE_HOME/Apache/Apache/bin/apachectl stop

5.
su 或者重新登录到 root( 如想重新安装可以保留 oracle 用户,省得输入环境变量了
)

6.
将安装目录删除

[root@
ehaohai /root]# rm -rf /opt/oracle/

7.
/usr/bin 下的文件删除

[root@
ehaohai /root]# rm /usr/bin/dbhome
[root@
ehaohai
/root]# rm /usr/bin/oraenv
[root@
ehaohai
/root]# rm /usr/bin/coraenv

8.
/etc/oratab 删除

[root@
ehaohai /root]# rm /etc/oratab

9.
/etc/oraInst.loc 删除

[root@
ehaohai /root]# rm /etc/oraInst.loc

10.
oracle 用户删除 ( 若要重新安装 , 可以不删除
)
[root@
ehaohai
/root]# userdel –r oracle

11.
将用户组删除(若要重新安装,可以不删除
)
[root@
ehaohai
/root]# groupdel oinstall
[root@
ehaohai
/root]# groupdel dba

12.
将启动服务删除

[root@
ehaohai /root]# chkconfig --del dbora

 

 

 

Oracle用户、权限、角色管理

 

Oracle 权限设置
一、权限分类:
系统权限:系统规定用户使用数据库的权限。(系统权限是对用户而言)。
实体权限:某种权限用户对其它用户的表或视图的存取权限。(是针对表或视图而言的)。
 
二、系统权限管理:
1、系统权限分类:
DBA: 拥有全部特权,是系统最高权限,只有DBA才可以创建数据库结构。
RESOURCE:拥有Resource权限的用户只可以创建实体,不可以创建数据库结构。
CONNECT:拥有Connect权限的用户只可以登录Oracle,不可以创建实体,不可以创建数据库结构。
对于普通用户:授予connect, resource权限。
对于DBA管理用户:授予connect,resource, dba权限。
 
2、系统权限授权命令:
[系统权限只能由DBA用户授出:sys, system(最开始只能是这两个用户)]
授权命令:SQL> grant connect, resource, dba to 用户名1 [,用户名2]...;
[普通用户通过授权可以具有与system相同的用户权限,但永远不能达到与sys用户相同的权限,system用户的权限也可以被回收。]
例:
SQL> connect system/manager
SQL> Create user user50 identified by user50;
SQL> grant connect, resource to user50;
查询用户拥有哪里权限:
SQL> select * from dba_role_privs;
SQL> select * from dba_sys_privs;
SQL> select * from role_sys_privs;
删除用户:SQL> drop user 用户名 cascade;  //加上cascade则将用户连同其创建的东西全部删除
 
3、系统权限传递:
增加WITH ADMIN OPTION选项,则得到的权限可以传递。
SQL> grant connect, resorce to user50 with admin option;  //可以传递所获权限。
 
4、系统权限回收:系统权限只能由DBA用户回收
命令:SQL> Revoke connect, resource from user50;
 
说明:
1)如果使用WITH ADMIN OPTION为某个用户授予系统权限,那么对于被这个用户授予相同权限的所有用户来说,取消该用户的系统权限并不会级联取消这些用户的相同权限。
2)系统权限无级联,即A授予B权限,B授予C权限,如果A收回B的权限,C的权限不受影响;系统权限可以跨用户回收,即A可以直接收回C用户的权限。
 
三、实体权限管理
1、实体权限分类:select, update, insert, alter, index, delete, all  //all包括所有权限
execute  //执行存储过程权限
user01:
SQL> grant select, update, insert on product to user02;
SQL> grant all on product to user02;
user02:
SQL> select * from user01.product;
// 此时user02查user_tables,不包括user01.product这个表,但如果查all_tables则可以查到,因为他可以访问。

2. 将表的操作权限授予全体用户:
SQL> grant all on product to public;  // public表示是所有的用户,这里的all权限不包括drop。
[实体权限数据字典]:
SQL> select owner, table_name from all_tables; // 用户可以查询的表
SQL> select table_name from user_tables;  // 用户创建的表
SQL> select grantor, table_schema, table_name, privilege from all_tab_privs; // 获权可以存取的表(被授权的)
SQL> select grantee, owner, table_name, privilege from user_tab_privs;   // 授出权限的表(授出的权限)
 
3. DBA用户可以操作全体用户的任意基表(无需授权,包括删除):
DBA用户:
SQL> Create table stud02.product(
 id number(10),
 name varchar2(20));
SQL> drop table stud02.emp;
SQL> create table stud02.employee
 as
 select * from scott.emp;
 
4. 实体权限传递(with grant option):
user01:
SQL> grant select, update on product to user02 with grant option; // user02得到权限,并可以传递。
 
5. 实体权限回收:
user01:
SQL>Revoke select, update on product from user02;  //传递的权限将全部丢失。
 
说明
1)如果取消某个用户的对象权限,那么对于这个用户使用WITH GRANT OPTION授予权限的用户来说,同样还会取消这些用户的相同权限,也就是说取消授权时级联的。
 
 
Oracle 用户管理
一、创建用户的Profile文件
SQL> create profile student limit  // student为资源文件名
 FAILED_LOGIN_ATTEMPTS  3  //指定锁定用户的登录失败次数
 PASSWORD_LOCK_TIME 5  //指定用户被锁定天数
 PASSWORD_LIFE_TIME 30  //指定口令可用天数
 
二、创建用户
SQL> Create User username
 Identified by password
 Default Tablespace tablespace
 Temporary Tablespace tablespace
 Profile profile
 Quota integer/unlimited on tablespace;
例:
SQL> Create user acc01
 identified by acc01   // 如果密码是数字,请用双引号括起来
 default tablespace account
 temporary tablespace temp
 profile default
 quota 50m on account;
SQL> grant connect, resource to acc01;
[*] 查询用户缺省表空间、临时表空间
SQL> select username, default_tablespace, temporary_tablespace from dba_users;
[*] 查询系统资源文件名:
SQL> select * from dba_profiles;
资源文件类似表,一旦创建就会保存在数据库中。
SQL> select username, profile, default_tablespace, temporary_tablespace from dba_users;
SQL> create profile common limit
 failed_login_attempts 5
 idle_time 5;
 
SQL> Alter user acc01 profile common;
 
三、修改用户:
SQL> Alter User 用户名
 Identified 口令
 Default Tablespace tablespace
 Temporary Tablespace tablespace
 Profile profile
 Quota integer/unlimited on tablespace;
 
1、修改口令字:
SQL>Alter user acc01 identified by "12345";
2、修改用户缺省表空间:
SQL> Alter user acc01 default tablespace users;
3、修改用户临时表空间
SQL> Alter user acc01 temporary tablespace temp_data;
4、强制用户修改口令字:
SQL> Alter user acc01 password expire;
5、将用户加锁
SQL> Alter user acc01 account lock;  // 加锁
SQL> Alter user acc01 account unlock;  // 解锁
 
四、删除用户
SQL>drop user 用户名;  //用户没有建任何实体
SQL> drop user 用户名 CASCADE;  // 将用户及其所建实体全部删除
*1. 当前正连接的用户不得删除。

五、监视用户:
1、查询用户会话信息:
SQL> select username, sid, serial#, machine from v$session;
2、删除用户会话信息:
SQL> Alter system kill session 'sid, serial#';
3、查询用户SQL语句:
SQL> select user_name, sql_text from v$open_cursor;
 
 
Oracle 角色管理
一、何为角色
  角色。角色是一组权限的集合,将角色赋给一个用户,这个用户就拥有了这个角色中的所有权限。

二、系统预定义角色
  预定义角色是在数据库安装后,系统自动创建的一些常用的角色。下介简单的介绍一下这些预定角色。角色所包含的权限可以用以下语句查询:
sql>select * from role_sys_privs where role='角色名';

1.CONNECT, RESOURCE, DBA
这些预定义角色主要是为了向后兼容。其主要是用于数据库管理。oracle建议用户自己设计数据库管理和安全的权限规划,而不要简单的使用这些预定角色。将来的版本中这些角色可能不会作为预定义角色。
 
2.DELETE_CATALOG_ROLE, EXECUTE_CATALOG_ROLE, SELECT_CATALOG_ROLE
这些角色主要用于访问数据字典视图和包。
 
3.EXP_FULL_DATABASE, IMP_FULL_DATABASE
这两个角色用于数据导入导出工具的使用。
 
4.AQ_USER_ROLE, AQ_ADMINISTRATOR_ROLE
AQ:Advanced Query。这两个角色用于oracle高级查询功能。
 
5. SNMPAGENT
用于oracle enterprise manager和Intelligent Agent
 
6.RECOVERY_CATALOG_OWNER
用于创建拥有恢复库的用户。关于恢复库的信息,参考oracle文档《Oracle9i User-Managed Backup and Recovery Guide》
 
7.HS_ADMIN_ROLE
A DBA using Oracle's heterogeneous services feature needs this role to access appropriate tables in the data dictionary.
 
三、管理角色
1.建一个角色
sql>create role role1;

2.授权给角色
sql>grant create any table,create procedure to role1;

3.授予角色给用户
sql>grant role1 to user1;

4.查看角色所包含的权限
sql>select * from role_sys_privs;

5.创建带有口令以角色(在生效带有口令的角色时必须提供口令)
sql>create role role1 identified by password1;

6.修改角色:是否需要口令
sql>alter role role1 not identified;
sql>alter role role1 identified by password1;

7.设置当前用户要生效的角色
(注:角色的生效是一个什么概念呢?假设用户a有b1,b2,b3三个角色,那么如果b1未生效,则b1所包含的权限对于a来讲是不拥有的,只有角色生效了,角色内的权限才作用于用户,最大可生效角色数由参数MAX_ENABLED_ROLES设定;在用户登录后,oracle将所有直接赋给用户的权限和用户默认角色中的权限赋给用户。)
sql>set role role1;//使role1生效
sql>set role role,role2;//使role1,role2生效
sql>set role role1 identified by password1;//使用带有口令的role1生效
sql>set role all;//使用该用户的所有角色生效
sql>set role none;//设置所有角色失效
sql>set role all except role1;//除role1外的该用户的所有其它角色生效。
sql>select * from SESSION_ROLES;//查看当前用户的生效的角色。

8.修改指定用户,设置其默认角色
sql>alter user user1 default role role1;
sql>alter user user1 default role all except role1;
详见oracle参考文档

9.删除角色
sql>drop role role1;
角色删除后,原来拥用该角色的用户就不再拥有该角色了,相应的权限也就没有了。
 
说明:
1)无法使用WITH GRANT OPTION为角色授予对象权限
2)可以使用WITH ADMIN OPTION 为角色授予系统权限,取消时不是级联
 
 
 
 

Linux下怎样查看机器配置,及cpu/内存/硬盘使用率


dmesg
显示开机信息。kernel会将开机信息存储在ring buffer中。您若是开机时来不及查看信息,可利用dmesg来查看。开机信息亦保存在/var/log目录中,名称为dmesg的文件里

dmesg|grep hd
硬盘
dmesg|grep cpu
cpu
dmesg|grep proc
内存
dmesg|grep redhat
操作系统
dmesg|more
更多信息
uname -a
操作系统版本


查看linux cpu和内存利用率

在 系统维护的过程中,随时可能有需要查看 CPU 使用率,并根据相应信息分析系统状况的需要。在 CentOS 中,可以通过 top 命令来查看 CPU 使用状况。运行 top 命令后,CPU 使用状态会以全屏的方式显示,并且会处在对话的模式 -- 用基于 top 的命令,可以控制显示方式等等。退出 top 的命令为 q (在 top 运行中敲 q 键一次)。

  操作实例:

  在命令行中输入 “top”

  即可启动 top

  top 的全屏对话模式可分为3部分:系统信息栏、命令输入栏、进程列表栏。

  第一部分 -- 最上部的 系统信息栏 :

  第一行(top):

    “00:11:04”为系统当前时刻;

    “3:35”为系统启动后到现在的运作时间;

    “2 users”为当前登录到系统的用户,更确切的说是登录到用户的终端数 -- 同一个用户同一时间对系统多个终端的连接将被视为多个用户连接到系统,这里的用户数也将表现为终端的数目;

    “load average”为当前系统负载的平均值,后面的三个值分别为1分钟前、5分钟前、15分钟前进程的平均数,一般的可以认为这个数值超过 CPU 数目时,CPU 将比较吃力的负载当前系统所包含的进程;

  第二行(Tasks):

    “59 total”为当前系统进程总数;

    “1 running”为当前运行中的进程数;

    “58 sleeping”为当前处于等待状态中的进程数;

    “0 stoped”为被停止的系统进程数;

    “0 zombie”为被复原的进程数;

  第三行(Cpus):

    分别表示了 CPU 当前的使用率;

  第四行(Mem):

    分别表示了内存总量、当前使用量、空闲内存量、以及缓冲使用中的内存量;

  第五行(Swap):

    表示类别同第四行(Mem),但此处反映着交换分区(Swap)的使用情况。通常,交换分区(Swap)被频繁使用的情况,将被视作物理内存不足而造成的。

  第二部分 -- 中间部分的内部命令提示栏:

  top 运行中可以通过 top 的内部命令对进程的显示方式进行控制。内部命令如下表:

  s

  - 改变画面更新频率

  l - 关闭或开启第一部分第一行 top 信息的表示

  t - 关闭或开启第一部分第二行 Tasks 和第三行 Cpus 信息的表示

  m - 关闭或开启第一部分第四行 Mem 和 第五行 Swap 信息的表示

  N - 以 PID 的大小的顺序排列表示进程列表(第三部分后述)

  P - 以 CPU 占用率大小的顺序排列进程列表 (第三部分后述)

  M - 以内存占用率大小的顺序排列进程列表 (第三部分后述)

  h - 显示帮助

  n - 设置在进程列表所显示进程的数量

  q - 退出 top

  s -

  改变画面更新周期

  第三部分 -- 最下部分的进程列表栏:

  以 PID 区分的进程列表将根据所设定的画面更新时间定期的更新。通过 top 内部命令可以控制此处的显示方式

在Linux下查看内存我们一般用free命令:
[root@scs-2 tmp]# free
             total       used       free     shared    buffers     cached
Mem:       3266180    3250004      16176          0     110652    2668236
-/+ buffers/cache:     471116    2795064
Swap:      2048276      80160    1968116

下面是对这些数值的解释:
total:总计物理内存的大小。
used:已使用多大。
free:可用有多少。
Shared:多个进程共享的内存总额。
Buffers/cached:磁盘缓存的大小。
第三行(-/+ buffers/cached):
used:已使用多大。
free:可用有多少。
第四行就不多解释了。
区 别:第二行(mem)的used/free与第三行(-/+ buffers/cache) used/free的区别。这两个的区别在于使用的角度来看,第一行是从OS的角度来看,因为对于OS,buffers/cached 都是属于被使用,所以他的可用内存是16176KB,已用内存是3250004KB,其中包括,内核(OS)使用+Application(X, oracle,etc)使用的+buffers+cached.
第三行所指的是从应用程序角度来看,对于应用程序来说,buffers/cached 是等于可用的,因为buffer/cached是为了提高文件读取的性能,当应用程序需在用到内存的时候,buffer/cached会很快地被回收。
所以从应用程序的角度来说,可用内存=系统free memory+buffers+cached。
如上例:
2795064=16176+110652+2668236

接下来解释什么时候内存会被交换,以及按什么方交换。 当可用内存少于额定值的时候,就会开会进行交换。
如何看额定值:
cat /proc/meminfo

[root@scs-2 tmp]# cat /proc/meminfo
MemTotal:      3266180 kB
MemFree:         17456 kB
Buffers:        111328 kB
Cached:        2664024 kB
SwapCached:          0 kB
Active:         467236 kB
Inactive:      2644928 kB
HighTotal:           0 kB
HighFree:            0 kB
LowTotal:      3266180 kB
LowFree:         17456 kB
SwapTotal:     2048276 kB
SwapFree:      1968116 kB
Dirty:               8 kB
Writeback:           0 kB
Mapped:         345360 kB
Slab:           112344 kB
Committed_AS:   535292 kB
PageTables:       2340 kB
VmallocTotal: 536870911 kB
VmallocUsed:    272696 kB
VmallocChunk: 536598175 kB
HugePages_Total:     0
HugePages_Free:      0
Hugepagesize:     2048 kB

用free -m查看的结果:
[root@scs-2 tmp]# free -m
             total       used       free     shared    buffers     cached
Mem:          3189       3173         16          0        107       2605
-/+ buffers/cache:        460       2729
Swap:         2000         78       1921


查看/proc/kcore文件的大小(内存镜像):
[root@scs-2 tmp]# ll -h /proc/kcore
-r-------- 1 root root 4.1G Jun 12 12:04 /proc/kcore

备注:

占用内存的测量

测量一个进程占用了多少内存,linux为我们提供了一个很方便的方法,/proc目录为我们提供了所有的信息,实际上top等工具也通过这里来获取相应的信息。

/proc/meminfo 机器的内存使用信息

/proc/pid/maps pid为进程号,显示当前进程所占用的虚拟地址。

/proc/pid/statm 进程所占用的内存

[root@localhost ~]# cat /proc/self/statm

654 57 44 0 0 334 0

输出解释

CPU 以及CPU0。。。的每行的每个参数意思(以第一行为例)为:

参数 解释 /proc//status

Size (pages) 任务虚拟地址空间的大小 VmSize/4

Resident(pages) 应用程序正在使用的物理内存的大小 VmRSS/4

Shared(pages) 共享页数 0

Trs(pages) 程序所拥有的可执行虚拟内存的大小 VmExe/4

Lrs(pages) 被映像到任务的虚拟内存空间的库的大小 VmLib/4

Drs(pages) 程序数据段和用户态的栈的大小 (VmData+ VmStk )4

dt(pages) 04

查看机器可用内存

/proc/28248/>free

total used free shared buffers cached

Mem: 1023788 926400 97388 0 134668 503688

-/+ buffers/cache: 288044 735744

Swap: 1959920 89608 1870312

我们通过free命令查看机器空闲内存时,会发现free的值很小。这主要是因为,在linux中有这么一种思想,内存不用白不用,因此它尽可能的cache和buffer一些数据,以方便下次使用。但实际上这些内存也是可以立刻拿来使用的。

所以 空闲内存=free+buffers+cached=total-used



linux下如何获取cpu的利用率
"proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为访问系统内核数据的操作提供接口。用户和应用程序可以通过proc得到系统的信息,并可以改变内核的某些参数。"

    这里将介绍如何从/proc文件系统中获取与防火墙相关的一些性能参数,以及如何通过/proc文件系统修改内核的相关配置。

    1、从/proc文件系统获取相关的性能参数
    cpu使用率:    /proc/stat
    内存使用情况:      /proc/meminfo
    网络负载信息:    /proc/net/dev

相应的计算方法:(摘自:什么是proc文件系统,见参考资料)
    (1)   处理器使用率   
    (2)   内存使用率   
    (3)   流入流出数据包   
    (4)   整体网络负载   
     这些数据分别要从/proc/stat、/proc/net/dev、/proc/meminfo三个文件中提取。如里有问题或对要提取的数据不太清楚,可以使用man   proc来查看proc文件系统的联机手册。   
    (1)   处理器使用率   
    这里要从/proc/stat中提取四个数据:用户模式(user)、低优先级的用户模式(nice)、内核模式(system)以及空闲的处理器时间(idle)。它们均位于/proc/stat文件的第一行。CPU的利用率使用如下公式来计算。   
    CPU利用率   =   100   *(user   +   nice   +   system)/(user   +   nice   +   system   +   idle)   
   (2)   内存使用率   
    这里需要从/proc/meminfo文件中提取两个数据,当前内存的使用量(cmem)以及内存总量(amem)。   
    内存使用百分比   =   100   *   (cmem   /   umem)   
    (3)网络利用率   
    为了得到网络利用率的相关数据,需要从/proc/net/dev文件中获得两个数据:从本机输出的数据包数,流入本机的数据包数。它们都位于这个文件的第四行。   
    性能收集程序开始记录下这两个数据的初始值,以后每次获得这个值后均减去这个初始值即为从集群启动开始从本节点通过的数据包。   
    利用上述数据计算出网络的平均负载,方法如下:   
    平均网络负载   =   (输出的数据包+流入的数据包)   /   2
   
    2. 通过/proc文件系统调整相关的内核配置
    允许ip转发   /proc/sys/net/ipv4/ip_forward
    禁止ping    /proc/sys/net/ipv4/icmp_echo_ignore_all
   
    可以在命令行下直接往上述两个“文件”里头写入"1"来实现相关配置,如果写入"0"将取消相关配置。不过在系统重启以后,这些配置将恢复默认设置,所 以,如果想让这些修改生效,可以把下面的配置直接写入/etc/profile文件,或者其他随系统启动而执行的程序文件中。

echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

    如果需要获取其他的性能参数,或者需要对内核进行更多的配置,可以参考下面链接中的proc文件系统介绍,也可以直接通过man proc查看相关的信息。

参考资料和相关链接

[1] 什么是proc文件系统
http://blog.chinaunix.net/u1/37836/showart_304248.html
[2] Linux下如何获取cpu的使用率
http://topic.csdn.net/t/20060701/23/4855045.html
[3] Exploring the /proc/net/ Directory
http://www.linuxdevcenter.com/pub/a/linux/2000/11/16/LinuxAdmin.html?page=1
[4] /proc/net introduction
http://www.redhat.com/docs/manuals/enterprise/RHEL-4-Manual/en-US/Reference_Guide/s2-proc-dir-net.html
[5] 使用ulimit和proc去调整系统参数
http://www.linuxfly.org/post/73.htm

注:文件里面是一个增量,每过一个时间间隔对应的项使用了CPU都会有增加,要算百分比,得用上上一次的状态值.

这里计算cpu使用率是有问题的,需要使用上一状态的值来计算。
返回

正确的计算方法是,等上一个时间:

1、记录某个时刻cpu的使用情况
2、等上一个时间段
3、再记录此刻的cpu使用情况
4、计算总的时间片
把第一次的所有cpu使用情况求和,得到j1
把第二次的所有cpu使用情况求和,得到j2
j2-j1得到这个时间段的所有时间片
即total=j2-j1=第二次的所有列的和-第一次的所有列的和
5、计算idle时间
idle对应第五列的数据,用第二次的减去第一次的即可
idle=第二次的第五列-第一次的第五列
6、计算cpu使用率
rate=(total-idle)/total

我们在搞性能测试的时候,对后台服务器的CPU利用率监控是一个常用的手段。服务器的CPU利用率高,则表明服务器很繁忙。如果前台响应时间越来越大,而后台CPU利用率始终上不去,说明在某个地方有瓶颈了,系统需要调优。这个是即使不懂技术的人都容易理解的事情。

上 面理解对吗?我个人觉得不十分准确。这个要看后台你测试的进程是什么类型的。如果是计算密集型的进程,当前端压力越来越大的时候,很容易把CPU利用率打 上去。但是如果是I/O网络密集型的进程,即使客户端的请求越来越多,但是服务器CPU不一定能上去,这个是你要测试的进程的自然属性决定的。

什 么是CPU利用率呢?在Linux/Unix下,CPU利用率分为用户态,系统态和空闲态,分别表示CPU处于用户态执行的时间,系统内核执行的时间,和 空闲系统进程执行的时间。从计算机加电开始,CPU就一直忙个不停,所以CPU的利用率始终是100%。当没有用户进程需要执行的时候,CPU就执行系统 缺省的空闲进程。我们所指的CPU利用率是指CPU执行非系统空闲进程的时间 / CPU总的执行时间。

在Linux的内核中,有一个全 局变量:Jiffies。 Jiffies代表时间。它的单位随硬件平台的不同而不同。系统里定义了一个常数HZ,代表每秒种最小时间间隔的数目。这样jiffies的单位就是 1/HZ。Intel平台jiffies的单位是1/100秒,这就是系统所能分辨的最小时间间隔了。每个CPU时间片,Jiffies都要加1。 CPU的利用率就是用执行用户态+系统态的Jiffies除以总的Jifffies来表示。

在Linux系统中,CPU利用率的计算来源在/proc/stat文件,这个文件的头几行记录了每个CPU的用户态,系统态,空闲态等状态下的不同的Jiffies,常用的监控软件就是利用/proc/stat里面的这些数据来计算CPU的利用率的。
包含了所有CPU活动的信息,该文件中的所有值都是从系统启动开始累计到当前时刻。
/proc/stat/
[work@builder ~]$ cat /proc/stat
cpu 432661 13295 86656 422145968 171474 233 5346
cpu0 123075 2462 23494 105543694 16586 0 4615
cpu1 111917 4124 23858 105503820 69697 123 371
cpu2 103164 3554 21530 105521167 64032 106 334
cpu3 94504 3153 17772 105577285 21158 4 24
intr 1065711094 1057275779 92 0 6 6 0 4 0 3527 0 0 0 70 0 20 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 7376958 0 0 0 0 0 0 0 1054602 0 0 0 0 0 0 0 30 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ctxt 19067887
btime 1139187531
processes 270014
procs_running 1
procs_blocked 0


输出解释
CPU 以及CPU0、CPU1、CPU2、CPU3每行的每个参数意思(以第一行为例)为:
参数 解释
user (432661) 从系统启动开始累计到当前时刻,用户态的CPU时间(单位:jiffies) ,不包含 nice值为负进程。1jiffies=0.01秒
nice (13295) 从系统启动开始累计到当前时刻,nice值为负的进程所占用的CPU时间(单位:jiffies)
system (86656) 从系统启动开始累计到当前时刻,核心时间(单位:jiffies)
idle (422145968) 从系统启动开始累计到当前时刻,除硬盘IO等待时间以外其它等待时间(单位:jiffies)
iowait (171474) 从系统启动开始累计到当前时刻,硬盘IO等待时间(单位:jiffies) ,
irq (233) 从系统启动开始累计到当前时刻,硬中断时间(单位:jiffies)
softirq (5346) 从系统启动开始累计到当前时刻,软中断时间(单位:jiffies)

CPU时间=user+system+nice+idle+iowait+irq+softirq

“intr”这行给出中断的信息,第一个为自系统启动以来,发生的所有的中断的次数;然后每个数对应一个特定的中断自系统启动以来所发生的次数。
“ctxt”给出了自系统启动以来CPU发生的上下文交换的次数。
“btime”给出了从系统启动到现在为止的时间,单位为秒。
“processes (total_forks) 自系统启动以来所创建的任务的个数目。
“procs_running”:当前运行队列的任务的数目。
“procs_blocked”:当前被阻塞的任务的数目。
那么CPU利用率的计算方法:可以使用取两个采样点,计算其差值的办法。
(idle2-idle1)/cpu2-cpu1

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值