机器内存:48G
安装过程分为两步,一是修改系统参数,二是软件及数据库安装。
48g内存对应参数
kernel.shmall=12582912
kernel.shmmax=4294967295
kernel.shmmni=4096
参数说明
1、kernel.shmall参数是控制共享内存页数
kernel.shmall的单位是页面数,当前的x86体系上这个单位是4K ,oracle的默认安装参数是kernel.shmall = 2097152 则一共是8G的共享内存总量
总的来说,这个参数和你具体硬件关系不太大,只是大于8G的时候调整到合适你的内存容量大小,小于8G就不用了
对于32位系统,一页=4k,也就是4096字节。RHEL6.2 X64通过查询也是4096
查询操作系统页面大小
$getconf PAGESIZE
4096
kernel.shmall= 内存大小/页面大小
48*1024*1024*1024/4096=12582912(安装机器48G内存)
kernel.shmall=12582912
12582912*4096/1024/1024/1024=48G
2、kernel.shmmax
shmmax 指的是单个共享内存段的最大尺寸, 设置shmmax=1G,sga分配了1.2G,当启动实例的时候就分配2块共享内存给Oracle .如果物理内存是2 G, 假设这台DB Server上还有Apache 在运行,那么shmmax 中设置的内存也会被Apache 来使用,那么分配的2 块共享内存段给Oracle 是否就是2 * 1G , 还是仅仅满足SGA需求的1.2 G就停止分配, 其他的内存的一部分分配给Oracle PGA 和软件Apache 来使用?
一般情况下可以设置最大共享内存为物理内存的一半,如果物理内存是2G,则可以设置最大共享内存为1073741824,如上;如物理内存是1G,则可以设置最大共享内存为512 * 1024 * 1024 = 536870912;以此类推。
在redhat上最大共享内存不建议超过
4*1024*1024*1024-1=4294967295
3、kernel.shmmni参数是控制共享内存段总数
shmmni内核参数是 共享内存段的最大数量(注意这个参数不是 shmmin,是 shmmni, shmmin 表示内存段最小大小 ) 。shmmni 缺省值 4096 ,一般肯定是够用了 。
step1: vi /etc/sysctl.conf, 添加如下参数:
fs.aio-max-nr = 1048576 fs.file-max = 6815744 kernel.shmall=12582912 kernel.shmmax=4294967295 kernel.shmmni=4096 kernel.sem = 250 32000 100 128 net.ipv4.ip_local_port_range = 9000 65500 net.core.rmem_default = 262144 net.core.rmem_max = 4194304 net.core.wmem_default = 262144 net.core.wmem_max = 1048586
保存并使之生效
#/sbin/sysctl -p
如果有如下提示错误,忽略,因为即使未修改参数也提示有这个错误
error: "net.bridge.bridge-nf-call-ip6tables" is an unknown key
error: "net.bridge.bridge-nf-call-iptables" is an unknown key
error: "net.bridge.bridge-nf-call-arptables" is an unknown key
step2: vi /etc/security/limits.conf,添加:
oracle soft nproc 2047 oracle hard nproc 16384 oracle soft nofile 1024 oracle hard nofile 65536
step3: vi /etc/pam.d/login,添加参数:
session required pam_limits.so
step4: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
step5: vi /etc/csh.login:
if( $USER == "oracle" ) then limit maxproc 16384 limit descriptors 65536 umask 022 endif
step6: vi /etc/redhat-release,修改为如下值,成功安装数据库后在修改回来:
Red Hat Enterprise Linux Server release 5.0 (Tikanga)
Step7: 添加相关用户及用户组:
#/usr/sbin/groupadd oinstall #/usr/sbin/groupadd dba #/usr/sbin/useradd -m -G oinstall,dba oracle #passwd oracle (修改oracle用户密码)
Step 8: 创建安装路径及修改权限:
mkdir -p /opt/oracle chown -R oracle:oinstall /opt/oracle chmod -R 775 /opt/oracle mkdir -p /opt/oraInventory chown -R oracle:oinstall /opt/oraInventory chmod -R 775 /opt/oraInventory
Step 9: vi /home/oracle/.bash_profile, 其中ORACLE_SID的值可以自己定,我的设为kfsjora
TMP=/tmp; export TMP TMPDIR=$TMP; export TMPDIR ORACLE_BASE=/opt/oracle; export ORACLE_BASE ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1; export ORACLE_HOME ORACLE_SID=kfsjora; export ORACLE_SID ORACLE_TERM=xterm; export ORACLE_TERM PATH=$ORACLE_HOME/bin:/usr/sbin:$PATH; export PATH LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib; export LD_LIBRARY_PATH CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib; export CLASSPATH if [ $USER = "oracle" ]; then if [ $SHELL = "/bin/ksh" ]; then ulimit -p 16384 ulimit -n 65536 else ulimit -u 16384 -n 65536 fi fi umask 022
使环境变量生效:
source ~/.bash_profile
step 10:切换到oracle解压11G的安装包,这样就不用再修改权限了。
检测数据包的完整性
$cksum linux.x64_11gR2_database_1of2.zip 结果和Oracle官网上的数值对比。
$cksum linux.x64_11gR2_database_2of2.zip
Oracle官网信息
Oracle Database 11g Release 2 (11.2.0.1.0) for Linux x86-64
linux.x64_11gR2_database_1of2.zip (1,239,269,270 bytes) (cksum - 3152418844)
linux.x64_11gR2_database_2of2.zip (1,111,416,131 bytes) (cksum - 3669256139)
解压缩
$unzip linux.x64_11gR2_database_1of2.zip $unzip linux.x64_11gR2_database_2of2.zip
step 11: 重启后以oracle登录安装。
安装
$cd database $ ./runInstaller
出现图形界面后安装即可(默认或定制)。
当检查依赖包是可能会出现如下下提示
要检测软件包是否安装,一般情况是软件包版本比oracle需要的版本高也会出现上述情况
检测软件包是否安装
#rpm –q libaio;
安装软件包
#rpm ivh XXX-XX-xx.rpm
软件包都存在,可以忽略继续安装
创建数据库:
可以在上面解锁一些帐号和修改密码,点击上面的OK后,出现如下:
切换到root,命令完成最后安装。
[oracle@localhost ~]$ su -
Password:
[root@localhost 11g]# sh /opt/11g/oraInventory/orainstRoot.sh
Changing permissions of /opt/11g/oraInventory.
Adding read,write permissions for group.
Removing read,write,execute permissions for world.
Changing groupname of /opt/11g/oraInventory to oinstall.
The execution of the script is complete.
[root@localhost 11g]# sh /opt/11g/oracle/product/11.2.0/dbhome_1/root.sh
Running Oracle 11g root.sh script...
The following environment variables are set as:
ORACLE_OWNER= oracle
ORACLE_HOME= /opt/11g/oracle/product/11.2.0/dbhome_1
Enter the full pathname of the local bin directory: [/usr/local/bin]:
Copying dbhome to /usr/local/bin ...
Copying oraenv to /usr/local/bin ...
Copying coraenv to /usr/local/bin ...
Creating
登陆OEM浏览器查看:
安装完成远程计算机服务访问数据库,是RHEL默认防火墙关闭了Oracle的访问端口,远程无法访问Oracle,远程访问需要设置防火墙
打开防火墙中数据库的端口
#/sbin/iptables -I INPUT -p tcp --dport 1521 -j ACCEPT
保存配置
#service iptables save
或者
#/etc/rc.d/init.d/iptables save
重新启动防火墙
#/etc/init.d/iptables restart
到此可以访问oracle了
1.首先修改/etc/oratab文件
#vi /etc/oratab
找到kfsjora:/opt/oracle/product/11.2.0/dbhome_1:N这一行
改为:
kfsjora:/opt/oracle/product/11.2.0/dbhome_1:Y
也就是将最后的N改为Y,意思是将不允许自动启动改为允许自动启动。
(kfsjora是本文数据库SID)
2.修改ORACLE自带的启动与关闭脚本,分别是dbstart和 dbshut。执行这两个脚本就可以实现ORACLE脚本的启动与关闭。在oracle账户下修改$ORACLE_HOME/bin/dbstart文件
#su -oracle
$cd $ORACLE_HOME/bin
$vi dbstart
找到ORACLE_HOME_LISTNER=$1这一行
改为:ORACLE_HOME_LISTNER=$ORACLE_HOME
之所以做这一步,是因为在这个脚本自动生成的时候,也就是ORACLE被安装进RHEL的时候,这个脚本并不知道你的ORACLE_HOME_LISTNER是什么,现在要将这个参数显示的写明,这样就不会在执行这个脚本的时候报ORACLE_HOME_LISTNER没有被指定的错误了。注意:dbstart和dbshut脚本在10g之后就已经将监听器的启动与关闭合并进数据库实例的启动与关闭脚本里面了。而不再是单独分开的了。同样的方式,我们也要修改dbshut的这个参数。这里就不再详细写出了,他们在同一个目录下。
3.写一个脚本,把它注册为一个系统服务,让它在开机与关机的时候运行。它的作用就是调用并执行dbstart和dbshut。这样不就实现了数据库启动与关闭了吗?!这个脚本被放在/etc/init.d目录中,脚本的名字是oracle11
# vi oracle11
脚本内容如下:
#!/bin/sh #chkconfig: 345 99 10 #description: Oracle 11g AutoRun Services #/etc/init.d/oracle11 # #Run-level Startup script. for the Oracle Instance, Listener, and #Web Interface export ORACLE_BASE=/opt/oracle export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1 export ORACLE_SID=kfsjora export PATH=$PATH:$ORACLE_HOME/bin ORA_OWNR="oracle" # if the executables do not exist -- display error if [ ! -f $ORACLE_HOME/bin/dbstart -o ! -d $ORACLE_HOME ] then echo "Oracle startup: cannot start" exit 1 fi # depending on parameter -- startup, shutdown, restart # of the instance and listener or usage display case "$1" in start) # Oracle listener and instance startup su $ORA_OWNR -lc $ORACLE_HOME/bin/dbstart touch /var/lock/subsys/oracle11 su $ORA_OWNR -lc "$ORACLE_HOME/bin/emctl start dbconsole" echo "Oracle Start Succesful!OK." ;; stop) # Oracle listener and instance shutdown su $ORA_OWNR -lc "$ORACLE_HOME/bin/emctl stop dbconsole" su $ORA_OWNR -lc $ORACLE_HOME/bin/dbshut rm -f /var/lock/subsys/oracle11 echo "Oracle Stop Succesful!OK." ;; reload|restart) $0 stop $0 start ;; *) echo $"Usage: `basename $0` {start|stop|reload|reload}" exit 1 esac exit 0
在编辑完成之后,使用 :x 命令保存此文件。
这段脚本的关键解释:
第一:#chkconfig:345 99 10虽是一行注释,但是确实关键的必不可少的一行,除非你不用chkconfig命令来自动生成符号连接文件,而是完全采用手工创建。否则没有这一行,执行chkconfig系统将会报出oracle11没有chkconfig服务权限的错误。
第二:su oracle -c $ORACLE_HOME/bin/dbstart和touch /var/lock/subsys/oracle11这两行的作用是首先执行dbstart脚本启动oracle,然后在服务活动列表目录中创建一个与oracle11这个服务同名的一个文件,表示这个服务是活动的,也就是被启动的。而su oracle -c $ORACLE_HOME/bin/dbshut和rm -f /var/lock/subsys/oracle11这两行的作用是首先执行dbshut急哦脚本关闭oracle,然后从服务活动列表目录中删除那个与oracle11同名的那个文件,表示这个服务不是活动的,也就是已经被关闭。
那么为什么要做touch /var/lock/subsys/oracle11和rm -f /var/lock/subsys/oracle11这两步呢?原因是跟LINUX系统的机制有关的:LINUX的判别一个服务是否被启动的依据是在/var/lock/subsys/目录下是否与服同名的文件,若有则表示这个服务已经被启动了,在系统关闭的时候,LINUX会把这里面列出的服务全部关闭,并删掉与服务同名的文件。若一个服务被启动了,但却在这个目录里没有那个服务的同名文件,则不会关闭那个服务。网上的文章均将这个地方设置错了,所以会发现,ORACLE可以随系统启动了,但却没有随系统关闭。我也是分析了/etc/rc.d/rc.local后才发现这个原理的。经过试验,果然如此。再分析mysql的启动与关闭脚本也是这样做的,最终恍然大悟,原来如此。这个地方请大家注意了。
4.将这个脚本注册成为一个系统服务
方法有二:
其一:先给脚本分配可以被执行的权限。执行下面命令:
$su-root
#chown oracle /etc/init.d/oracle11
#chmod 775 /etc/init.d/oracle11
链接:
# ln -s /etc/init.d/oracle11 /etc/rc1.d/K10oracle11
# ln -s /etc/init.d/oracle11 /etc/rc3.d/S99oracle11
执行以下命令:
# chkconfig --level 345 oracle11 on (参数--level 为两个"-" ,下同)
# chkconfig --add oracle11 // 添加到服务里
再创建符号链接文件。
chkconfig --add /etc/init.d/oracle11,执行这个命令就需要你在脚本中写上#chkconfig:3459910了。这样当这个命令被执行的时候,回去oracle11文件中寻找这行注释,并解析这行注释,根据解析结果分别在/etc/rc.d/rc3.d;/etc/rc.d/rc4.d;/etc/rc.d/rc5.d中创建符号连接文件S99oracle11文件,这个文件是系统启动时要执行的,其实这个文件是指向/etc/init.d/oracle11的,启动的时候系统向这个文件发送一个start参数,也就执行了oracle11文件中的start分支了。还会在/etc/rc.d/rc0.d;/etc/rc.d /rc1.d;/etc/rc.d/rc6.d中创建K10oracle11文件,这个文件时系统关闭时要执行的,其实这个文件也是指向/etc/init.d/oracle11的,关闭的时候系统向这个文件发送一个stop参数,也就执行了oracle11文件中的stop分支了。
我想你应该明白#chkconfig:3459910中这些数字的含义了吧:指出3,4,5级别启动这个服务,99是在相应的/etc /rc.d/rcN.d(N为前面指定的级别,这里是345)目录下生成的链接文件的序号(启动优先级别)S99oracle11,10为在除前面指出的级别对应的/etc/rc.d/rcN.d(N为除345之外的级别)目录生成的链接文件的序号(服务停止的优先级别)K10oracle11。至于为什么在这些目录中创建文件和文件的命名规则,这就要您对LINUX的系统启动流程有一个熟悉的了解了,在这就不详谈了。
其二:若您想尝试一下手动创建符号连接文件的乐趣,请执行如下命令:
#su -root
ln -s /etc/init.d/oracle11 /etc/rc.d/rc3.d/S99oracle11
ln -s /etc/init.d/oracle11 /etc/rc.d/rc4.d/S99oracle11
ln -s /etc/init.d/oracle11 /etc/rc.d/rc5.d/S99oracle11
作用效果和执行chkconfig --add oracle11是一样的。
重启之后看看/var/lock/subsys/目录下的oracle11log文件,里面是不是有脚本的启动分支输出信息呢?
5、数据库操作
以sys登录
创建表空间
SQL>create tablespace kfsj datafile '/opt/oracle/oradata/kfsjora/kfsj01.dbf' size 100m autoextend on next 100m maxsize 8g, '/opt/oracle/oradata/kfsjora/kfsj02.dbf' size 100m autoextend on next 100m maxsize 8g;
创建用户
SQL>create user kfsj identified by kfsj
default tablespace kfsj
temporary tablespace temp
授权
SQL>grant connect,resource to kfsj;
////////////////////////////////
为用户解锁
SQL>alter user scott account unlock;
为用户设置口令字:
SQL>grant connect to scott identified by tiger;