RHEL6上安装的oracle11g中,手动建库出现的问题

RHEL6上安装的oracle11g中,手动建库出现的问题  

1、简单创建了INIT.ORA后,进入SQLPLUS,第一次进入还是好的,后来在STARTUP NOMOUNT的过程中,出现了ORA-09925,最后原因居然是有个文件权限错误,$oracle_home/bin/oracle文件权限错误,由于加入了selinux安全机制,所以难度增加了,开始的时候,这个文件的权限是6751,需要改成6755,然后就对了。这里要注意学习下,selinux安全机制后,文件权限另外加入了一组,就是第一个数字,分别为--s--s--t,还是421,但是要注意加起来哈。
2、手动建库,主要涉及数据库文件、联机重做日志、控制文件三种文件相关,如果第一次失败,记得查看这三种文件的位置,有没有文件,如果有,就删除,再重新做。
3、启动参数文件中,oracle描述最少需要三个参数,分别是DB_NAME、CONTROL_FILES、MEMORY_TARGET
,如果提供的参数文件很多的可选项目,可以用命令先去掉:cat init.ora |grep -v ^$ |grep -v ^# >initorcl.ora,这个命令可以去掉所有行中带有#和$标记的所有行,比较好用。
4、建库的SQL语句,在联机文档中有,再database administration的administrator's guide中,2 Creating and Configuring an Oracle Database 的Creating a Database with the CREATE DATABASE Statement中,这里面具体讲述了怎么样通过字符模式手动建立数据库的全过程,SQL语句在Step 9: Issue the CREATE DATABASE Statement,这里有模板,可以照搬,基本有效,只要改下文件位置。这个最好是建立SQL执行文件,一个一个的命令输入太麻烦,关键是容易出错,导致前功尽弃。
5、下一步需要做建立数据库后,如果把建立好的数据库注册到监听器中,这一步一直没有成功。
6、试验了一个有趣的命令,就是手动的删除数据库,drop database,我开始还以为不能用,但是sqlplus没有直接提示不能用,而是提示要求再mount模式下,最后试验的结果是,就是可以用这个命令,再sqlplus中,启动数据库到mount的restricted状态,可以这样用:
sql>startup mount restrict
sql>drop database;
完成后,数据库确实被删除了,而且,系统中相关连的物理文件也被删除了。命令本身,相当简单,不过对于生产库来说,风险太大了。
7、这上面,还少说了一个必要的环境参数,因为我一开始就设置再oracle用户的登录脚本中了,所以这里还是要提示下,唯一一个必要的环境参数就是ORACLE_SID,可以再BASH中直接输入export ORACLE_SID=orcl,然后用env |grep ORACLE来检查下。
8、在建立了最简单的INIT.ORA文件后,进入sqlplus之后,第一步是建立server parameter file,复杂了,其实就是SPFILE,^_^。create spfile from pfile,就是命令就可以了,然后再进行下一步。
9、现在应该是建立好了数据库,然后就是建立监听器,监听器参数的位置,应该是在$ORACLE_HOME/network/admin下,建立好参数文件,注意题目要求的监听端口,默认是1521,也可以是其他端口,对于监听器的设置,倒是很容易,只有一个lsnrctl,如果不知道位置,就用which lsnrctl,不过用这个之前,检查oralce用户的PATH环境参数值,这个里面要包含有$ORACLE_HOME/bin才行,如果没有的话,估计找不到。执行oracle$ lsnrctl后,就进入了lsnrctl程序中,很简单了,先用help看下命令,然后照做就行,当然还是要参数设置正确才行。
10、2011-7-17的手动创建比较顺利。对于INIT.ORA,默认的有个INIT.ORA文件,里面参数一般都正确,主要是memory_target这个参数,好像有要求,根据机器硬件要求,现在还不知道具体要求是什么。注意修改具体文件位置,而且要注意给的INIT文件好像是在windows下的格式,里面的不适合linux下的,要改成$ORACLE_BASE,一定要注意文件位置设定的正确性,这次居然把控制文件弄错了,居然生成了control01.ctl>,这样的文件,就是书写没有仔细看的缘故。

11、数据库创建后,记得执行SQL语句创建数据字典和视图,联机文档上具有要求,要求安装3个SQL,$ORACLE_HOME/rdbms/admin/catalog.sql 、 $ORACLE_HOME/rdbms/admin/catproc.sql、 $ORACLE_HOME/sqlplus/admin/pupbld.sql,这个不需要记文件位置,在联机文档上都有。

12、对于监听器,默认的监听参数文件在$ORACLE_HOME/network/admin/samples下面,只用cat输出到上一层目录,主要里面只需要用listener的参数设定就行,里面要注意就是HOST的参数,要和主机名一致,其他的不要动。然后再LSNRCTL下,用START启动监听,启动后,再数据库SQLPLUS中用动态注册,就是:alter system register。然后再lsnrctl中用status查看状态。一般情况下,已经注册了。

13、RHEL6的防火墙要注意,再点了disable firewall这个后,一定要再点下apply,这个是确定的意思,要不然没用,防火墙还没被关闭。当然也可以只开放1521端口,如果监听器再其他端口的话,注意端口号。

14、下次试验不同端口的监听器设置。

15、在安装数据库完成并重启机器后,使用sqlplus的时候,可能出错,这个原因是你的用户环境参数不正确。虽然在你的登录脚本中设置了export环境参数,但是好像有时候,不管用,有可能提示net service name 错误,只要重新设置下ORACLE_BASE、ORACLE_HOME、ORACLE_SID就可以了。为了尽量避免出现错误,最好是手动设定环境参数,需要设定的参数一般有4个,分别是ORACLE_BASE、ORACLE_HOME、ORACLE_SID、PATH。

16、在刚开始手动建库的时候,进去sqlplus后,startup nomount的时候,有可能出现ora-00845错误:memory_target  not supported in this system。就是系统不支持这个参数的数值。这个与系统tmpfs文件有关,一般是tmpfs文件系统太小导致的,用df命令查看tmpfs大小。从现在情况看来,新的服务器即使带有16G内存,也有可能因为tmpfs的大小,导致这个错误,也就是说memory_target参数和kernel.shmmax及tmpfs大小都有关,kernel.shmmax设置是要避免将oracle进程切成多个片段,而tmpfs将直接导致是否支持目前memory_target参数大小。tmpfs的大小,最大是物理内存和SWAP空间之和,所以只要比设定的memory_target大,而比物理内存和SWAP空间之和小就可以了。要修改tmpfs大小,修改/etc/fstab中设置,对tmpfs改成这样:tmpfs /dev/shm tmpfs defaults,size=1G 0 0,保存,然后 # mount -o remount /dev/shm就可以了。

 17、修改了tmpfs大小后,关闭数据库重启机器,然后进入sqlplus中启动数据库,还是提示ora-00845错误。这个是因为的fstab中没有设置对,如果只是临时的使用,可以这样设置tmpfs /dev/shm tmpfs defaults,size=1G 0 0,这由于有defaults这个,所以重启之后还是使用了defaults,如果要永久改变的话,这样设置tmpfs /dev/shm tmpfs size=1G 0 0。

18、要注意环境参数不仅仅是对sqlplus,对其他程序也是非常有用。比如lsnrctl程序,在设置了PATH参数但是没有设置ORACLE_HOME等参数的BASH中,进入lsnrctl程序之后,执行status的时候提示错误:message 1053 not found;no message file for,就是找不到参数文件,因为没有ORACLE_HOME参数的缘故。

19、对于非默认端口的监听,还在继续实验中,太难了。
20、非默认端口的监听设置,终于做完了。这个设置,从listener.ora开始:

LISTENER2 =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS_LIST =
        (ADDRESS = (PROTOCOL = TCP)(HOST = localhost.localdomain)(PORT = 1522))
      )
    )
  )
要注意到,这个设置和listener文件模板是不一样的,多了两行,就是多出来的两行的,才能让lsnrctl认到这个LISTENER2。参数文件设置好了之后,执行lsnrctl start listener2,可以看到顺利启动的提示,并且注意启动监听的端口号。由于PMON进程,默认是在1521端口上进行注册的,所以这时候数据库动态注册是失败的,也就是没有注册。进入sqlplus,启动数据库后,修改local_listener参数:alter system set local_listener="(ADDRESS = (PROTOCOL = TCP)(HOST = localhost.localdomain)(PORT = 1522))",“”里面的字符串可以直接从监听参数文件中复制,执行成功后,可以不管他了。在bash中,输入 lsnrctl status listener2,来查询注册情况,一般情况下是注册成功了的。
21、虽然在/etc/fstab 中,设置了tmpfs /dev/shm tmpfs size=1G 0 0,但还是没有成功了,这次只是不需要在修改/etc/fstab了,直接用 mount -o remount /dev/shm就可以了。在每次启动机器后,每次都要输入环境参数,确实太麻烦了,所以还是在/etc/profile脚本中,直接输入了:
ORACLE_BASE=/u01/app/oracle
ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1
ORACLE_SID=orcl
PATH=/u01/app/oracle/product/11.2.0/dbhome_1/bin:$PATH
export ORACLE_BASE ORACLE_HOME ORACLE_SID PATH
请使用浏览器的分享功能分享到微信等