©
本文档使用php.cn手册发布
在RedHat 6.0上安装Oracle 8i(全攻略)
|
来源:LinuxByte
|
晏子 编译 -------------------------------------------------------------------------------- 目前,网上已有不少较少Oracle 8i在Linux(RedHat 6.0)上的安装指南,但在实际运用中还是会遇到各种各样的问题,这其中的是,一则指南本身不完全,还有就是Oracle本身也有一定的问题。本文是我找到的最完整的一个安装指南,其他的FAQ很具实用价值,故将此文整理出来供大家参考。 本文只介绍Oracle 8i企业版(815ship.tgz)。 如果你还有问题,请到Oracle 技术网络和deja.com提问或查找答案。 -------------------------------------------------------------------------------- 1. 准备安装 1.1 获得Java运行时刻环境(JRE) 1.2 重新配置并编译你的内核 1.3 建立Linux用户组和帐号 1.4 设置环境变量 2. 安装 2.1 运行Oracle通用安装程序 2.2 安装所有Oracle选件 2.3 不要用数据库助手创造数据库 2.4 使用Oracle 8i补丁 3. 创建一个数据库 3.1 运行数据库助手 3.2 使用定制/专用服务器模式 3.3 保存到脚本 3.4 运行脚本 3.5 扩大你的重做日志文件 3.6 修改你的init.ora文件 3.7 不使用数据库助手创造一个数据库 4. 数据库创建的后期过程 4.1 自动启动和关闭数据库 4.2 安装SQL*Plus联机帮助 5. 配置Net8 5.1 Net8助手的限制 5.2 建立一个监听器 5.3 为本地命名方法配置Net8 5.4 配置SQLNET.ORA 5.5 使用本地命名方法测试Net8连接 5.6 为主机命名方法配置Net8 5.7 使用主机命名方法测试Net8连接 5.8 建立Oracle命名服务器 5.9 使用Oracle命名方法测试Net8连接 5.10 为IIOP连接配置监听器 5.11 自动启动和关闭监听器 5.12 自动启动和关闭Oracle命名服务器 6. 常见问题 Oracle 通用安装程序 我不能运行Oracle通用安装程序。我怎么办? Oracle 通用安装程序提示我为OSDBA和OSOPER指定Linux用户组。你也被这样提出过吗? 数据库助手 有这么办法不使用数据库助手就能创造一个数据库吗? 我得到“can"t find class java/lang/Thread”的一个错误消息 我得到一条警告消息"JNLS Exception:oracle.ntp.jnls.JNLSException Unable to find any National Character Sets. Please check your Oracle installation."。 当保存到脚本时,我得到错误消息"Unable to create database. DBCA-00047: Unable to create destination directories."。 我应该选择“典型”还是“定制”安装? 我在创建数据库时得到一条“ ORA-01012 :Not logged in”。 尽管我使用了专用服务器过程,仍然得到“ ORA-01012 :Not logged in”。 我得到一条“ORA-01034 :ORACLE not available”。 创造一个数据库花了很长的时间。 使用补丁 在使用8.1.5.0.1补丁以后,svrmgrl和sqlplus仍然报告8.1.5.0.0。 在使用8.1.5.0.2补丁以后,当运行svrmgrl时,我得到一条“ORA-12545 Connect failed because target host or object does not exist”。 其他 在我的pmon跟踪文件中有一条:“OER 536879337 in Load Indicator : Error Code = 570716328 !” 在我的警告记录文件和pmon踪迹文件中,我得到很多“Load Indicator not Supported by OS!”。 我得到“ORA-00601 cleanup lock conflict”并且Oracle因中度负载的EJB顾客而死掉。 有人在一个2.3版内核上使用Oracle8i吗? 7. 资源链接 补丁和支持文档的重要链接 1. 准备安装 1.1 获得Java运行时刻环境(JRE) 本文中所指的Java运行时刻环境意味着JRE 1.1.6v5,而不是JDK。从Blackdown下载,要得到glibc版本而不是libc版本。在你喜欢的任何目录下安装它,但是确保建立一个名为/usr/local/jre的符号连接到你安装了JRE的目录,并且其安装目录可被以后创建的Linux帐号oracle读取和执行。 如果你使用JDK而不是JRE,通用安装程序将在以后抱怨Oracle不能找到Java类java.lang.Thread。其原因是: JRE使用rt.jar作为包含Java库的文件,而JDK使用classes.zip。 Oracle通用安装程序是一个Java应用程序,它被编码成使用rt.jar而不是classes.zip作为它的java 的CLASSPATH部分。 因此,你仍然可以通过创建一个名为rt.jar的符号连接连接到classes.zip而继续使用JDK。 如果你有兴趣使用IBM的JDK 1.1.8,要注意IBM的实现仅仅支持原生线程,并且不支持-green标志。Oracle 8i安装脚本使用原生和green线程。 注意:你不需要设定CLASSPATH环境变量。如果你已经安装其他版本的java,在你运行安装程序时,删除CLASSPATH的设置(unset),而在你使用安装程序时,再把它设置回来。这点在使用netasst和dbassist时也是一样。 1.2 重新配置并编译你的内核 很多用户已经报告不为Oracle8i重新配置内核而成功。当心!下列文字摘自Oracle8i Linux文档(原文): Oracle8i Administrator"s Reference Release 8.1.5 for Intel Linux (A74957-01) Chapter 1 - Administering Oracle8i Controlling the System Global Area Size Limits of the SGA The maximum size of a single shared memory region is specified by the Linux parameter SHMMAX. For example, if SHMMAX is 512 KB and the SGA is 2048 KB, the SGA requires four segments. If the size of the SGA exceeds the maximum size of a shared memory segment (SHMMAX), Oracle8i attempts to attach more contiguous segments to fulfill the requested SGA size. SHMSEG is the maximum number of segments that can be attached by a process. To attach the segments at contiguous addresses, SHMMAX must be set to its maximum value on systems where its size is limited. Note: Intimate Shared Memory (ISM) may cause problems when SHMMAX is smaller than the database SGA size. 1.3 设置Linux用户组和帐号 你需要创建Linux用户组dba和oinstall。 创建Linux帐号oracle有一个问题。Oracle8i Linux文档在oracle账号应该属于哪个Linux用户组上自相矛盾。看一看下面摘自Oracle8i Linux安装指南的文字,它说Linux oracle帐号应该属于oinstall组: Oracle8i Installation Guide Release 8.1.5 for Intel Linux (A74958-0) Chaper 2 - Setting the Environment Setup Task to Perform as the root User Create a Linux Account to Own Oracle Software The oracle account is the Linux account that owns the Oracle8i software after installation. You must run the OUI from this account. On Intel-Linux, use the operating system administration utility useradd to create an oracle account with the following properties: Login Name Any name, but this document refers to it as the oracle account. Default GID Corresponding to the oinstall group. 而另一方面,Oracle8i Linux管理指南说Linux oracle帐号应该属于dba组: Oracle8i Administrator"s Reference Release 8.1.5 for Intel Linux (A74957-01) Chapter 1 - Administering Oracle8i Managing Special Accounts and Groups (Table 1-8) The oracle software owner is the only required member of the dba group. You can add the root user, or any other Linux user, to the dba group. Members of this group have access to SQL*Plus specially privileged functions. If your account is not a member of the dba group, you must enter a password in order to connect as INTERNAL or gain access to the other administrative functions of SQL*Plus. The default group ID is dba. 那么Linux oracle到底应该属于哪个Linux用户组?我的建议是dba。甚至对Oracle 8.0.5,oracle帐号已经是dba组的一个成员了。 你将oracle分配到dba还是oinstall组,在安装过程上有差别: 如果oracle是dba的一个成员,通用安装程序将提示你运行脚本 Oracle/tmp/OraInstall/oraInstroot.sh。这个脚本将改变$ORACLE_BASE/oraInventory的组属主为oinstall。 而如果oracle是oinstall的一个成员,通用安装程序将“抱怨”或提示你Oracle帐号OSDBA和OSOPER的Linux组,但是不提醒你要运行上述的脚本。 1.4 设置环境变量 设置所有所需的环境变量,例如在安装指南中指明的ORACLE_BASE、ORACLE_HOME、ORACLE_SID和LD_LIBRARY_PATH。我也将$ORACLE_HOME/bin加到PATH中。 注意:你不需要设定CLASSPATH环境变量。如果你已经安装其他版本的java,在你运行安装程序时,删除CLASSPATH的设置(unset),而在你使用安装程序时,再把它设置回来。这点在使用netasst和dbassist时也是一样。 如果你仅有128MB的物理内存,并且你在网络上有另外一台Linux机器,你可能想要运行Oracle通用安装程序但在另外一台Linux机器上显示,以便你不需要在你安装Oracle8i的机器上运行X。通过设置DISPLAY环境变量到正在运行X的主机名或IP地址(另一台Linux机器)做到,还有X使用的屏幕号。 例如,如果我正在安装Oracle8i的IP地址是 192.168.0.1,并且运行X的另一台Linux机器是192.168.0.2, 从主机192.168.0.1设置DISPLAY环境变量,如下: export DISPLAY=192.168.0.2:0.0 在192.168.0.1上运行的任何X应用程序将其输出送到192.168.0.2。然而,X服务器必须允许除自己以外的主机的显示请求。在192.168.0.2主机上,做: xhost +192.168.0.1 如果你设置了NLS_LANG环境变量,保证它被设置为一个合适/正确的值。见尽管我使用了专用服务器过程,仍然得到“ ORA-01012 :Not logged in”。 2. 安装 2.1 运用 Oracle 通用安装程序 如果你只有一台至少196MB的Linux机器,那么你可以安全地在同一台机器上运行X并安装Oracle 8i。如果你仅有128MB,安装可能很慢。 如果你有2台Linux机器,一个为Oracle8i,另一个运行X,从运行X的主机telnet到安装Oracle 8i的主机,并以oracle登录。通过进入CDROM(或下载版本的解压目录)并运行脚本./runInstaller运行Oracle通用安装程序。当应用程序远程运行时,显示应该出现在X上。如果不是,见前一章。 RedHat 6.1的用户有运行安装程序本身的问题,例如: Error in CreateOUIProcess(): -1 : Bad Address 对此,这里是其他一些人的一些建议: 如果你使用GNOME,获得enlightenment-0.15.5-37.i386.rpm或更高。 使用KDE。 进入install/linux目录,并运行runInst.sh。 在你看到第一个对话后继续下一个对话,你将被提醒运行脚本/tmp/OraInstall/oraInstroot.sh。这个脚本将改变$ORACLE_BASE/oraInventory的组属主为oinstall。如果从来没有这样提醒你,要么是你以前已经安装了Oracle8i(只装附加部件)或oracle帐号不是dba的一个成员,改变oracle的用户组为dba。 如果Oracle通用安装程序突然死了,问题可能是内存太小。尝试做下列操作: 增大你的交换区 当使用install/linux/runInst.sh时,增加由Java使用的堆大小,通过将传递给jre的参数从-mx64mb改为-mx100mb。 2.2 安装所有Oracle选件 你可以选择安装或不安装的Oracle选件是Time Series Option、Visual Retrieval Information Option、Spatial Option、和interMedia Option。其他Oracle 选件例如JServer、Parallel Option、和Partitioning Options被缺省安装。 当你到了选件要安装的对话时,不管你是否想使用Oracle选件,安装Oracle所有选件。Oracle选件将不被使用,直到你决定在一个数据库中使用他们。 安装所有Oracle选件的原因是由于$ORACLE_HOME/bin/relink脚本的一个bug。这个脚本在每次升级后或Oracle8i打补丁后都要运行。然而,似乎脚本假定所有的库文件,包括哪些Oracle自带的选件,都存在。如果它不能找到甚至一个库文件,重新链接就失败。 如果你碰巧使用了原来的8.1.5.0.1补丁并且注意了sqlplus或svrmgrl仍然报告是8.1.5.0.0,这是因为,是由于丢失库文件而导致重新链接失败。在我第一次安装时,我取消了我能取消的所有Oracle选件。在使用补丁以后,错误记录(如果你做了一个)将显示出: /usr/bin/ld: Cannot open -lordsdo8: No such file or directory 当你不安装Oracle选件而使用8.1.5.0.2补丁,情况是更糟糕。你甚至不能运行svrmgrl: ORA-12545 Connect failed because target host or object does not exist. 2.3 不要用数据库助手创建数据库 在安装完成后,Oracle数据库助手将运行。注意,即使你在以前的提示你是否要用数据库助手创建一个数据库的一个对话框回答“No”,它仍将运行。 当你运行数据库助手时,你将得到一条错误消息: JNLS Exception:oracle.ntp.jnls.JNLSException Unable to find anyNational Character Sets. Please check your Oracle installation. 只要忽略这条消息并且继续。当你被提示创建、修改或删除一个数据库时,就取消,并且完全退出Oracle通用安装程序。我们需要首先使用补丁。 以下是从8i补丁的常见问题有关上面错误消息的文字: -------------------------------------------------------------------------------- 6. Just before the DB Assistant is launched, a dialog is displayed withthe warning:"JNLS Exception: oracle.ntp.jnls.JNLSException Unable to find any National Character Sets. Please check your Oracle installation." This is a known problem (884001). Ignore the warning -------------------------------------------------------------------------------- 2.4 使用 Oracle8i 补丁 从Oracle Technology Network获得最新的补丁。目前,最新的补丁是8.1.5.0.2。8.1.5.0.2 补丁是一个累积的补丁。它包括8.1.5.0.1 补丁。运行补丁并通过检查/tmp/81501.log和/tmp/81502.log查看任何错误。检查是否在这些脚本中有重新连接失败。用grep找词“fail”。如果重新连接失败,有可能是没有安装Oracle所有选件。见“安装所有Oracle选件”。 3. 创建一个数据库 3.1 运行数据库助手 既然你使用了最新的补丁,你现在已经准备好创建你的数据库了。运行dbassist。你将得到这样一条错误消息: JNLS Exception:oracle.ntp.jnls.JNLSException Unable to find anyNational Character Sets. Please check your Oracle installation. 只要忽略这条消息并且继续。这是摘自8i补丁的常见问题关于上面错误消息的文字: -------------------------------------------------------------------------------- 6. Just before the DB Assistant is launched, a dialog is displayed withthe warning:"JNLS Exception: oracle.ntp.jnls.JNLSException Unable to find any National Character Sets. Please check your Oracle installation." This is a known problem (884001). Ignore the warning -------------------------------------------------------------------------------- 实际上,你不必使用数据库助手创建一个数据库。你可以得到页脚本来做它。详见item number 9 on the 8i patch FAQ。然而,这个文件假定你使用数据库助手。 3.2 使用定制安装/专用服务器模式 当提示在Typical(典型)与Custom(定制)之间选择时,选择定制,同样,当提示在Dedicated Server Mode(专用服务器模式)和Shared Server Mode(共享服务器模式)之间选择时,选择专用服务器模式。如果你需要一个使用共享服务器模式(MTS)的数据库,你可以一开始创建一个使用专用服务器模式的数据库并在以后改变为共享服务器模式或MTS。如果你坚持创建一个使用共享服务器模式的数据库,一旦被启动,你可能得到这个错误: ORA-01012: Not logged in 其原因在下面介绍,下文摘自Oracle8i Concept 文档(没包含在Oracle8i EE Linux CD,但是包含在Oracle8i EE NT CD!): Oracle8i Concepts Release 8.1.5 A67781-01 Chapter 8 Restricted Operations of the Multi-Threaded Server Certain administrative activities cannot be performed while connected to a dispatcher process, including shutting down or starting an instance and media recovery. An error message is issued if you attempt to perform these activities while connected to a dispatcher process. These activities are typically performed when connected with administrator privileges. When you want to connect with administrator privileges in a system configured with multi-threaded servers, you must state in your connect string that you want to use a dedicated server process (SRVR=DEDICATED) instead of a dispatcher process. 使用专用服务器的另一个原因,至少目前,是当创建一个实例(instance)时,使用BEQ协议,因为还没有设置任何监听器,至少没在一开始的安装时设置。BEQ协议是唯一一个不要求监听器正在运行的协议,并且只能用在Oracle正在运行的同一台机器上。还有,BEQ协议总是使用一个专用服务器,绝不是一个多线程服务器(MTS)。这是摘自Oracle8i Administration Reference for Linux的文字: Oracle8i Administrator"s Reference Release 8.1.5 for Intel Linux A74957-01 Chapter 5 The BEQ Protocol The BEQ protocol is both a communications mechanism and a process-spawning mechanism. If a service name is not specified, either directly by the user on the command line or the login screen or indirectly through an environment variable such as TWO_TASK, then the BEQ protocol is used. In which case, a dedicated server will always be used, and the multi-threaded server is never used. This dedicated server is started automatically by the BEQ protocol, which waits for the server process to start and attach to an existing SGA. If the startup of the server process is successful, the BEQ protocol then provides inter-process communication through UNIX. An important feature of the BEQ protocol is that no network listener is required for its operation, since the protocol is linked into the client tools and directly starts its own server process with no outside interaction. However, the BEQ protocol can only be used when the client program and Oracle8i reside on the same machine. The BEQ protocol is always installed and always linked to all client tools and to the Oracle8i Server. 如果上述仍然不能让你工作,它可能是NLS_LANG环境变量设置不当的问题。见尽管我使用了专用服务器过程,仍然得到“ ORA-01012 :Not logged in”。 3.3 保存到脚本 当提示你是否要创建一个数据库,或保存到脚本中并在以后运行脚本时,选择保存到脚本。这将帮助你理解背后发生了什么并帮助你在数据库创建期间诊断任何问题。 3.4 运行脚本 脚本将在$ORACLE_HOME/install中找到。你仅需运行一个脚本,因为它以正确的顺序调用所有其他单独的脚本。我建议你分别运行每个脚本。 当你运行第一个脚本时,名为SIDrun.sh,它将启动实例并创建SYSTEM数据文件和表空间、控制文件和重做(redo)日志文件。运行其他脚本,名为SIDrun1.sh和SIDrun2.sh。 3.5 扩大你的重做日志文件 如果你接受缺省的512K的重做日志文件大小和2个重做日志组,你会注意到在$ORACLE_BASE/admin/SID/bdump警告日志文件中找到这样的消息: Thread 1 cannot allocate new log, sequence 4 Checkpoint not complete 第一行的最后数字是变化的。这是因为重做日志文件尺寸太小。在这种情况下,再增加2个稍大些的(如4MB)重做日志记载组,删除并重建前2个日志组使得所有的日志文件组有4MB的大小。 如果你对重做日志组没有足够大的尺寸,脚本SIDjava.sh,它在Oracle8i中初始化Java,可能不能完成并且失败。如果你有较小的退回(rollback)片段,会发生同样的事情。 现在运行其他脚本,按照主脚本提供的顺序所指出的那样。当你运行脚本SIDjava.sh时,即如果你选择了JServer选件在数据库中创建,注意它可能花很长时间。罪魁祸首就是SQL语句create或REPLACE JAVA SYSTEM。 3.6 修改你的init.ora文件 由数据库助手生成的init.ora文件没有指明要使用的退回片段。这已经被指出来了,因为实例的初始启动还没有生成退回片段,除了在SYSTEM中的片段。 因此你需要修改你的位于$ORACLE_BASE/admin/pfile中的init.ora文件并且为ROLLBACK_SEGMENTS提供值。 3.7 不用数据库助手创建一个数据库 有一种方法不必使用dbassist创建一个数据库。进入$ORACLE_HOME/rdbms/install/create目录,并阅读读README文件。另一个参考是8i Patch FAQ的第9条。 以下是我使用在$ORACLE_HOME/rdbms/install/create下提供的脚本创建another数据库的步骤。在这种情形下,SID将称作8idb: 为了与以前创建数据库的管理文件的目录一致,我创建了如下目录: cd $ORACLE_BASE/admin mkdir 8idb mkdir 8idb/pfile mkdir 8idb/bdump mkdir 8idb/cdump mkdir 8idb/udump mkdir 8idb/create mkdir 8idb/exp mkdir 8idb/adhoc mkdir 8idb/arch 当然,你将不需要所有这些目录。你至少需要pfile、bdump、cdump和udump。 拷贝文件$ORACLE_HOME/rdbms/install/create/init.ora到目录$ORACLE_BASE/admin/8idb/pfile,并且我给文件起名为init8idb.ora。你可以保留init.ora名字。 然后建立下列符号连接: ln -s $ORACLE_BASE/admin/8idb/pfile/init8idb.ora $ORACLE_HOME/dbs/init8idb.ora 连接的名字很重要,因为它应该在以后匹配/etc/oratab中的ORACLE_SID入口。在$ORACLE_HOME/bin中的脚本dbstart和dbshut读入在/etc/oratab中的每个入口,为每个入口获得ORACLE_SID,并寻找$ORACLE_HOME/dbs相应的参数文件, 这里参数文件的名字必须是initSID.ora。 现在修改$ORACLE_BASE/admin/8idb/pfile/init8idb.ora文件。我特别修改了下列入口: 以下,我命名新的数据库为我打算的SID: db_name = 8idb instance_name = 8idb service_names = 8idb.company.com.au 对于控制文件,我指定了控制文件的完整路径和名字。这些文件将在数据库创建期间生成: control_files = ("/home/oracle/app/oracle/oradata/8idb/control01.ctl", "/home/oracle/app/oracle/oradata/8idb/control02.ctl") 对于共享池的尺寸,我修改shared_pool_size与其他数据库一样。我能记得dbassist说过类似于“you need at least 50mb for shared_pool_size with the JServer option”的东西。 shared_pool_size = 52428800 既然我们将在以后增加重做日志文件的数量和大小,我决定现在而非以后增加缓冲区。 log_buffer = 327680 退回片段仍然是离线的,因为数据库还没有被创建,所以这些还不存在。因此我给下列入口加上注释: # rollback_segments =( r01 , r02 , r03 , r04 ) 指明你想在哪儿倒出文件。这里我做了下列设置: background_dump_dest = /home/oracle/app/oracle/admin/8idb/bdump core_dump_dest = /home/oracle/app/oracle/admin/8idb/cdump user_dump_dest = /home/oracle/app/oracle/admin/8idb/udump 因为我不使用Advanced Replication Option(高级复制选件),我注释了下列入口: #job_queue_processes = 0 #job_queue_interval = 60 #distributed_transactions = 10 #open_links = 4 我禁用了到8i数据库的IIOP连接的分派器(dispatcher)以便我们在警告文件和pmon跟踪文件中不会得到“Load Indicator not supported by OS”的消息。也要注意,在我的参数文件中没有任何mts入口。因此,这里被创建的数据库使用专用服务器进程。 #mts_dispatchers = "(PROTOCOL=TCP)(PRE=oracle.aurora.server.SGiopServer)" #mts_servers = 1 最后,按README文件的说明,我改变compatible入口。然而,注意,dbassist仅允许值8.1.0。也许是dbassist另一个bug? compatible = "8.1.5" 现在我创建立了目录/挂载点,在那里我想要存储数据文件。当然,遵循OFA,下列仅仅是一个例子。 mkdir $ORACLE_BASE/oradata/8idb 现在我从$ORACLE_HOME/rdbms/install/create拷贝脚本cdrb1.sh, cdrb2.sh,和cdrb3.sh到$ORACLE_HOME/install并分别命名他们为8idbcrdb1.sh, 8idbcrdb2.sh,和8idbcrdb3.sh: cp -vf $ORACLE_HOME/rdbms/install/create/crdb1.sh $ORACLE_HOME/install/"$ORACLE_SID"crdb1.sh cp -vf $ORACLE_HOME/rdbms/install/create/crdb2.sh $ORACLE_HOME/install/"$ORACLE_SID"crdb2.sh cp -vf $ORACLE_HOME/rdbms/install/create/crdb3.sh $ORACLE_HOME/install/"$ORACLE_SID"crdb3.sh 确保你至少对于bash加双引号与$ORACLE_SID。 改变目录到$ORACLE_HOME/install。然后我编辑第一个脚本SIDcrdb1.sh(在这里8idbcrdb1.sh),显示如下: 修改ORACLE_SID匹配我想要的SID: ORACLE_SID=8idb 修改口令文件的名字指明我想要的SID: $ORACLE_HOME/bin/orapwd file=$ORACLE_HOME/dbs/orapw8idb password=change_on_install 修改starpup命令指明要使用的参数文件的地点。我们可以指明实际的参数文件而不是到参数文件的一个符号 连接: startup nomount pfile = $ORACLE_HOME/dbs/init8idb.ora 改变在CREATE DATABASE命令中的数据库名以匹配在参数文件指明示的那个: CREATE DATABASE "8idb" 再回到CREATE DATABASE命令,改变SYSTEM数据文件的地点和大小位于我们先前创建了的目录下: DATAFILE "$ORACLE_BASE/oradata/8idb/system01.dbf" SIZE 80M 改变CREATE DATABASE命令中重做日志文件的地点并增加其大小: logfile "$ORACLE_BASE/oradata/8idb/redo01.log" SIZE 4096K, "$ORACLE_BASE/oradata/8idb/redo02.log" SIZE 4096K; 现在运行脚本SIDcdrb1.sh。如果你得到消息: ORA-12162: TNS:service name is incorrectly specified 那么你没有为ORACLE_SID指定有效的值。这发生了保留ORACLE_SID的值$1时,它假定从命令行获得参数,而我没指定一个参数。 如果由于一些原因,数据库的创建失败了,你不光是只是重新运行脚本,是你将还要删除先前被创建了的口令文件。否则,你将得到: OPW-00005: File with same name exists - please delete or rename 在我的情况中,我不仅删除了先前的口令文件,我也删除了文件$ORACLE_HOME/dbs/lkSID。这个文件似乎在你创建数据库时创建,实际上它只是一个文本文件:"DO NOT DELETE THIS FILE!" 你可能碰到的其他错误如下: ORA-01501: CREATE DATABASE failed ORA-00200: controlfile could not be created ORA-00202: controlfile: "/home/oracle/app/oracle/oradata/8idb/dbs/control02.ctl" ORA-27040: skgfrcre: create error, unable to create file Linux Error: 2: No such file or directory 错误是显然的,因为我为第二个控制文件指定了一个不存在的目录。 编辑第二个脚本SIDcrdb2.sh(8idbcrdb2.sh): 修改ORACLE_SID匹配我想要的SID: ORACLE_SID=8idb 我搜索所有$ORACLE_HOME/dbs的出现并且用$ORACLE_BASE/oradata/8idb替代了它们。因为我在同一个目录下存储他们。另外,遵循你的OFA地点,因此你可以最终为每个数据文件获得不同的挂载点。当然, 绝对确保你指定的路径存在(没有错别字!)或数据文件将不被创建,并且特别地你必须使再次运行脚本的一部分创建数据文件或借助svrmgrl创建他们。 现在运行第二个脚本SIDcrdb2.sh(8idbcrdb2.sh)。只要你正确指定了所有的路径,并且你正确地指定了你的ORACLE_SID,你应该没有任何问题。 现在,你可能想要增加更多的重做日志文件,否则你将在警告日志文件中得到类似于以下的消息: Thread 1 cannot allocate new log, sequence 79 Checkpoint not complete 为此我运行了svrmgrl,以internal连接了并再创建了2个重做日志组,如下显示: SQL> alter database 2 add logfile group 3 ("/home/oracle/app/oracle/oradata/8idb/redo03.log") size 4096K 3 / Statement Processed. SQL> alter database 2 add logfile group 4 ("/home/oracle/app/oracle/oradata/8idb/redo04.log") size 4096k 3 / Statement Processed. 你可能想要通过在括号内增加另一个文件名,并且每个重做日志文件的文件名由一个逗号分开,且每个重做日志文件的文件名包围在他们自己的引号内,可让每个日志文件组有超过一个的成员。 编辑第3个脚本SIDcrdb3.sh(8idbcrdb3.sh)。我在这里做的所有改变是值ORACLE_SID。 运行第3个脚本。应该没有问题。 在继续安装Oracle的一些或所有选件前,你可能想要检查系SYSTEM表空间最大范围。通过sqlplus以system/manager登录并且做: SQL> set linesize 1000 SQL> SELECT tablespace_name "TABLESPACE", 2 initial_extent "INITIAL_EXT", 3 next_extent "NEXT_EXT", 4 min_extents "MIN_EXT", 5 max_extents "MAX_EXT", 6 pct_increase 7 FROM sys.dba_tablespaces 8 / TABLESPACE INITIAL_EXT NEXT_EXT MIN_EXT MAX_EXT PCT_INCREASE ------------------------------ ----------- ---------- ---------- ---------- ------------ SYSTEM 10240 10240 1 121 50 OEM_REPOSITORY 131072 131072 1 2147483645 0 RBS 131072 131072 2 2147483645 0 TEMP 262144 262144 1 2147483645 0 USERS 51200 51200 1 2147483645 0 INDX 51200 51200 1 2147483645 0 6 rows selected. SYSTEM表空间的缺省MAXEXTENTS是121,它确实不够,特别是当我们增加Oracle选件时。如果我们不增加它,我们将得到类似于“unable to extend ... in tablespace SYSTEM”的错误消息。因此我做了: SQL> alter tablespace system 2 default storage 3 (pctincrease 0 maxextents unlimited) 4 / Tablespace altered. 现在再运行上面的查询。这次,SYSTEM表空间的MAX_EXT应该是一个大数字。 退出sqlplus并且返回到shell。现在选择你的数据库想要哪个Oracle选件。如果Oracle选件要求执行超过一个的脚本,保证你以在$ORACLE_HOME/rdbms/install/create/ README文件中说明的正确的顺序执行这些脚本。 确定改变每个脚本中的ORACLE_SID值。如果你加入InterMedia选件,保证你在drsys.sh脚本中为DRSYS数据文件指定了正确且有效的一条路径。 最后, 编辑你的initSID.ora文件并删除和rollback_segments入口的注释,以便在你关闭并且重启数据库时,将使用创建的退回片段。 记住,我们这里创建的数据库使用8idb作为ORACLE_SID,并且在后文中引用的数据库假定为ORACLE_SIDO为ORCL。 4. 数据库创建的后期过程 4.1自动化数据库启动和关闭 自动化数据库的启动和关闭是简单的。即使你不想要数据库自动地启动,你应该总是自动化数据库的关闭以防止破坏你的数据库。有关的步骤是: su成为root。 用一行ORACLE_SID:ORACLE_HOME:{Y|N}形式修改/etc/oratab,用来自你的环境变量的值代替ORACLE_SID和 ORACLE_HOME。该行类似这样: ORCL:/home/oracle/app/oracle/product/8.1.5:Y 在行末尾的Y将表明你是否想要数据库自动地启动和关闭。 在/etc/rc.d/init.d里创建一个脚本,起名为oracle8i,并把下面的代码放进去,它是在"Oracle8i Linux Installation Guide"提供的脚本基础上的一个修改版本。注意在该指南中的脚本由一个bug,阻止它关掉Oracle8i数据库。这在下面解释。 #!/bin/sh # Set ORA_HOME to be equivalent to the ORACLE_HOME # from which you wish to execute dbstart and # dbshut # set ORA_OWNER to the user id of the owner of the # Oracle database in ORA_HOME ORA_HOME=/home/oracle/app/oracle/product/8.1.5 ORA_OWNER=oracle case "$1" in "start") # Start the Oracle databases: # The following command assumes that the oracle login will not prompt the # user for any values echo -n "Starting Oracle8i: " su - $ORA_OWNER -c $ORA_HOME/bin/dbstart touch /var/lock/subsys/oracle8i echo ;; "stop") # Stop the Oracle databases: # The following command assumes that the oracle login will not prompt the # user for any values echo -n "Shutting down Oracle8i: " su - $ORA_OWNER -c $ORA_HOME/bin/dbshut rm -f /var/lock/subsys/oracle8i echo ;; "restart") # Restart the Oracle databases: echo -n "Retarting Oracle8i: " $0 stop $0 start echo ;; *) echo "Usage: oracle8i { start | stop | restart }" exit 1 esac exit 0 确保用你的ORACLE_HOME环境变量值代替ORA_HOME的值。关于该修改的脚本有几点要注意的是: 上述修改的脚本在/var/lock/subsys下创建立一个文件以指出系统或进程正在运行,而缺省脚本不做这个。作为一个背景进程,脚本/etc/rc.d/rc,在杀死过程时,将对以一个K开始的运行级别(runlevel)执行所有脚本,并且它也通过检查在/var/lock/subsys下的一个文件(文件名类似)的存在与否来检查子系统是否正在运行。因此,如果你使用缺省脚本,它将不关闭Oracle8i 数据库,因为这个文件在/var/lock/subsys下不存在。对RedHat 6.0是这样。我不能肯定RedHat 6.1或其他Linux分发的/etc/rc.d/rc脚本是否相同。 作为上述的结论,如果你为上面的脚本起名不是oracle8i,修改所有的行: touch /var/lock/subsys/oracle8i rm /var/lock/subsys/oracle8i 并且用脚本名代替oracle8i。例如,如果你命名脚本为dbora,你应该有: touch /var/lock/subsys/dbora rm /var/lock/subsys/dbora 测试脚本确实在工作。试试: ./oracle8i stop ./oracle8i start ./oracle8i restart ./oracle8i invalid-parameter 创建到你刚刚创建的自动化数据库关闭的脚本的一个连接。Runlevel 0是HALT ,而runlevel 6是REBOOT。 我的情况是: ln -s /etc/rc.d/init.d/oracle8i /etc/rc.d/rc0.d/K10oracle8i ln -s /etc/rc.d/init.d/oracle8i /etc/rc.d/rc6.d/K10oracle8i 无论何时系统把它的runlevel改变到0或6,脚本将过获得执行,这就是当你分别发出/sbin/shutdown - h now和/sbin/shutdown - r now时所发生的。 另外,可以创建到你创建的自动化数据库启动脚本的一个连接。我为RedHat 6.0选择的缺省运行级别是runlevel 3。在我的情况中: ln -s /etc/rc.d/init.d/oracle8i /etc/rc.d/rc3.d/S99oracle8i 4.2 安装 SQL * Plus联机帮助 如果你还没有SQL*Plus的帮助手段,你可以想要安装它。这完全是可选的。通过运行SQL*Plus并且在SQL*Plus提示符下键入HELP来检查你是否有了SQL*Plus的联机帮助。要安装联机帮助: 以oracle登录到shell。 键入export SYSTEM_PASS=system/manager(对Bash)定义环境变量SYSTEM_PASS。 执行脚本$ORACLE_HOME/bin/helpins。 运行SQL*Plus并在SQL*Plus提示符下键入HELP。 5. 配置Net8 在本节中,将解释如何安装并且配置一个Net8监听器和Oracle命名服务者。你不必要求使用Oracle命名服务器。Oracle提供若干方法解析网络服务名字。对于完全的讨论,见从 Oracle技术网络站点的Oracle Net8 管理员指南。 5.1 Net8助手的局限 你可能经历了Net8助手的问题。我所碰到的导致netasst崩溃的情形是在做下列的任何操作: 测试一个网络服务名字。 查找Oracle命名服务器。 创建Oracle命名服务器。 上述的结果是,不能为Oracle命名服务器的敏感操作(例如START、STOP和RELOAD)设置一个Oracle命名服务器加密的口令,因为口令的加密似 |