购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

3.1 创建数据库

3.1.1 数据库创建概述

创建Oracle数据库是一个复杂的过程,“复杂”之处并不在于创建数据库的过程,而在于对整个数据库的“规划”。“规划”是很重要的,它直接影响到以后数据库性能以及数据库的可扩展。对于一个已经完成部署的系统(尤其是7×24小时运行),如果我们要对其系统结构进行重大的变动,我们的老板会很不高兴,即使老板同意我们进行修改,我们也将付出很大的代价,这种两头都不讨好的事情,我们可以在数据库规划阶段有效避免。

我们可以在第一次安装Oracle软件的时候创建数据库,也可以在安装完Oracle软件后再创建数据库。推荐大家使用后者。

3.1.1.1 数据库的类型

不同类型的数据库满足不同的要求,Oracle有三种类型的数据库:General Purpose(通用数据库)、Transaction Processing(事务处理数据库)、Data Warehouse(数据仓库)。

每种类型的数据库都有各自的特点,针对不同的应用,我们应该创建不同类型的数据库。有关这三种类型数据库的特点,我们将做一一介绍。

General Purpose(通用数据库): 这种数据库用于常规目的。用户会执行大量的操作,从简单的事务到复杂的查询。这种类型的数据库没有针对性。

Transaction Processing(事务处理数据库): 这种数据库也叫联机事务处理数据库(Online Transaction Processing Databases,OLTP)。在这种数据库中,用户会执行大量的并发事务(Transaction),每个事务(Transaction)又很小,只涉及很少的数据。这种事务由大量的写任务组成。这是一种以“写”为主的数据库。

Data Warehouse(数据仓库): 也可以叫“决策支持系统(Decision Support System,DSS)”。在这种类型的数据库中,用户执行大量的联机分析处理(Online Analytical Processing,OLAP)。联机分析处理将执行大量的查询(query),涉及大量的数据。这是一种以“读”为主的数据库。

3.1.1.2 数据库存储方面的考虑

进行数据库设计的时候,数据的存储也是我们考虑得最多的因素之一,Oracle的存储设计是否合理,直接关系到数据库部署以后的性能。我们可以把数据存放在文件系统(File System)、自动存储管理(Automatic Storage Management,ASM)和裸设备(Raw device)上。

文件系统(File System) :如果使用文件系统,则Oracle将把数据文件放到文件系统的一个目录中。由于这样的文件系统用于存放数据,建议大家不要把存放数据的目录和Oracle软件的安装目录及操作系统使用的目录混在一起,如果那样做,会降低整个系统的性能。可以选择下面的文件系统。

■ 普通文件系统,这是在普通磁盘上创建的文件系统。在分布数据文件的时候,建议大家遵循OFA(Optimal Flexible Architecture)的原则。

■ 建立在逻辑卷(Logical Volume Manager,LVM)或者RAID设备上的文件系统。如果要使用这样的文件系统,Oracle推荐使用先条块化后镜像(stripe-and-mirror)的机制,使用这种机制在提高性能的同时,还可以提高数据的可靠性。

自动存储管理(Automatic Storage Management,ASM) :在这里,我们把它叫做“自动存储管理”。ASM是一种Oracle存储的解决机制,它免去了DBA对磁盘I/O的手动调整。它简化了数据库的动态管理,如:创建和分布数据库、磁盘空间管理。ASM是Oracle 10g的新特性之一。

裸设备(Raw device) :裸设备也是应用得比较广泛的存储技术。它绕过了操作系统,由Oracle直接对存放在裸设备上的数据进行读/写。对于文件系统来说,如果我们要写数据,Oracle首先把数据交给操作系统,再由操作系统写磁盘。裸设备的读写机制正好绕过了操作系统那一层。

Oracle的三种存储机制各有千秋,不能一概而论。在对系统进行设计的时候,我们应该进行测试,系统的部署是建立在测试基础之上的。只有测试以后,我们才能选择使用何种机制来分布Oracle的数据。

3.1.1.3 数据库管理方面的考虑

为了简化Oracle的管理,Oracle提供了一个基于Web的管理工具叫“企业管理器(Oracle Enterprise Manager)”。

企业管理器有两种方式进行部署。

■ 集中部署,管理网络中的多个数据库。

■ 本地部署,管理单台机器。

企业管理器控件(Oracle Enterprise Manager Database Control):在默认情况下,企业管理器控件随着数据库一起安装,它提供一个基于Web界面的接口,通过这个接口可以监控、管理和维护Oracle数据库。企业管理器控件可以执行所有的数据库管理任务。通过企业管理器控件,还可以得到数据库的信息,这些信息包括:

■ 实例名,数据库版本,Oracle主目录的位置等。

■ 当前实例的有效性。

■ 数据库警报信息。

■ 安全警报自动通知。

■ 会话和与SQL语句相关的性能信息。

■ 空间使用情况。

3.1.1.4 自动备份(Automated Backups)

如果安装了企业管理器控件(Oracle Enterprise Manager Database Control),我们就可以使用Oracle的自动备份功能。

如果启用Oracle的自动备份(Oracle Automated Backup)功能,则企业管理器(Oracle Enterprise Manager)会定时一个作业(Job),这个作业使用RMAN(Oracle Database Recovery Manager)自动把数据库备份到指定的存储区域。

设置定时备份时,我们可以设置定时备份的时间和执行定时备份的操作系统账号,这个账号必须属于DBA组(ORA_DBA)。

3.1.1.5 E-mail通知

如果安装了企业管理器控件(Oracle Enterprise Manager Database Control),就可以使用Oracle的邮件通知功能。可以定义一个事件,当这个事件发生时,企业管理器(Oracle Enterprise Manager)就会以E-mail的形式通知我们。这些事件可以是磁盘空间的使用达到了一定限度,或者数据库异常关闭等。

启用邮件通知,我们必须指定和邮件相关的设置。

■ 发送邮件服务器(SMTP)的主机名。

■ 用于接收邮件的邮箱地址。

3.1.2 Solaris下用DBCA创建数据库

写在前面的话

我们可以用DBCA创建数据库,也可以用脚本创建数据库。如果我们要创建多个数据库,则最好利用脚本。利用脚本创建数据库既“简单”又“复杂”。说“简单”,我们只需把脚本复制到SQL*Plus中执行便可;说“复杂”,利用脚本创建数据库的过程容易出现问题。不过,一旦我们调试好了脚本,利用脚本创建数据库还是非常简单的!

通过图形界面工具(DBCA)创建数据库是一件简单的事情。特别是对于刚学Oracle的朋友,我们推荐使用DBCA创建数据库。DBCA(DataBase Configuration Assistant)是一个图形界面工具,可以用来创建、删除和配置数据库。

3.1.2.1 创建环境与准备
〖Environment〗
〖创建数据库前的准备〗

创建相应的目录。

在本例中,数据文件、控制文件等大部分文件均放在这个目录。

3.1.2.2 创建方法与过程

用X-Window工具Xmanager登录服务器。

登录成功以后,在桌面上单击鼠标右键,执行“tools”→“terminal”命令,打开如图3-1所示的窗口。

图3-1 终端界面

以用户oracle的身份登录。

设置环境变量。

这里指定的IP地址是运行X-Window(Xmanager)那台客户端机器的IP地址,并不是服务器的IP地址。

启动数据库配置工具DBCA,如图3-2所示。

图3-2 DBC A欢迎界面

单击“Next”按钮,进入如图3-3所示的界面。

图3-3 创建数据库

选择“Create a Database”(创建数据库),单击“Next”按钮,进入如图3-4所示的界面。

图3-4 选择创建的数据库类型

在这里,选择要创建的数据库类型。

■ Custom Database:定制数据库,数据库的许多选项都要由我们自己定义,这个选项适合有一定经验的朋友。

■ Data Warehouse:表示要创建一个数据仓库。

■ General Purpose:表示要创建的数据库只用于一般的用途。

■ Transaction Processing:这种数据库用于联机事务处理。

对于学习Oracle的朋友来说,请选择“General Purpose”。

单击“Next”按钮,进入如图3-5所示的界面。

■ Global Database Name:输入全局数据库的名称。

■ SID:输入实例的名称。

图3-5 指定数据库名和SID

【小贴士(Tip)】 数据库的名称(Database Name)和实例的名称(SID)是两个概念,在RAC(集群)环境下,多个实例可以同时打开一个数据库。数据库的名称(Database name)和实例的名称(SID)可以不同。通常,在单机环境下,数据库的名称(Database name)和实例的名称(SID)相同。

单击“Next”按钮,进入如图3-6所示的界面。

图3-6 管理选项

【说明】 为了使用Enterprise Manager,选择“Configure the Database with Enterprise Manager”。“Enable Email Notifications”是一项比较有用的功能。输入邮箱及SMTP的地址。当Oracle有异常出现的时候,会通过E-mail的形式通知你,说你的数据库哪里出了问题,需要你关注一下。“Enable Daily Backup”用于设置数据库定时备份。

单击“Next”按钮,进入如图3-7所示的密码设置界面。

在这里,可以设置用户的密码。选择“Use the Same Password for All Accounts”,则所有的用户都使用相同的密码。选择“Use Different Passwords”,则分别为每个用户设置单独的密码。

单击“Next”按钮,进入存储配置界面。如图3-8所示。

■ 选择“File System”,所有的文件都放在文件系统上。

图3-7 密码设置

图3-8 存储配置

■ 选择“Automatic Storage Management(ASM)”,可以简化存储的管理,并优化I/O,这是Oracle 10g的新特性。

■ 选择“Raw Devices”,所有的文件都放在裸设备上。

本例中,选择“File System”。

单击“Next”按钮,进入如图3-9所示的界面。

图3-9 指定数据文件存储方式

■ 选择“Use Database File Locations from Template”,则使用Oracle的模板进行文件的分布。

■ 选择“Use Common Location for All Database Files”,则所有的数据文件都放在相同的目录下。

■ 选择“Use Oracle-Managed Files”,则使用Oracle管理的文件,这种方法可以简化文件的管理。例如,当删除一个表空间的时候,Oracle将自动删除该表空间相应的数据文件(操作系统文件),而不需要DBA手工使用操作系统命令删除这些文件。

在本例中,选择“Use Common Location for All Database Files”,输入路径为/export/home/nbodata。

单击“Next”按钮,进入如图3-10所示的界面。

图3-10 设置恢复区

■ 选择“Specify Flash Recovery Area”(设置闪回区),这是Oracle 10g的新特性,这个特性可以把数据库闪回(flash)到以前的某个状态。

■ 选择“Enable Archiving”,则使创建的数据库运行于归档模式。

单击“Edit Archive Mode Parameters”按钮,进入如图3-11所示的界面,设置归档参数。

■ 选择“Automatic Archiving”,则启动归档进程。

■ 在“Archive Log File Format”中指定归档文件的格式,一般使用默认值。

■ 在“Archive Log Destinations”中指定归档日志的存放路径,可以指定多个归档路径。

归档参数设置完成以后,单击“Next”按钮,进入如图3-12所示的界面。

在这里指定数据库创建完成后要运行什么脚本,可以输入脚本的路径和名字。当数据库创建完成以后,这些脚本将会自动被执行。在一般情况下,这里无须额外的操作。

单击“Next”按钮,进入如图3-13所示的界面。

在这里设置内存参数。

■ 选择“Typical”可以设置Oracle占用的内存占整个操作系统物理内存的百分比。

■ 选择“Custom”可以分别设置SGA和PGA的大小。

图3-11 设置归档参数

图3-12 指定定制脚本

图3-13 内存设置

切换到“Sizing”选项卡,进入如图3-14所示的界面。

图3-14 设置最大进程数

在这里设置Oracle允许的最大进程数。一般使用默认值,这个参数在安装完成后可以进行调整。

切换到“Character Sets”选项卡,进行字符集的设置,如图3-15所示。

■ 在“Choose from the list of character sets”后的下拉列表中设置字符集选择数据库的字符集,一般选择ZHS16GBK(简体中文)。

■ 在“National Character Set”后的下拉列表中选择国家字符集,一般选择“AL16UTF16”。

■ 在“Default Language”后的下拉列表中选择默认的语言。

■ 在“Default Date Format”后的下拉列表中选择默认的日期格式。

图3-15 设置字符集

单击“Next”按钮,进入数据库的模式选择界面,如图3-16所示。

■ Dedicated Server Mode:专有数据库模式,这种模式适合常常执行批处理的数据库。

■ Shared Server Mode:适合有很多并发连接的数据库。

单击“All Initialization Parameters”按钮,查看所有的初始化参数设置,如图3-17所示。

图3-16 选择数据库的模式

图3-17 查看初始化参数

关闭图3-17,单击“Next”按钮,镜像控制文件,如图3-18所示。

在这里设置控制文件的位置和名称。为了防止数据库出现意外,一般要设置多个控制文件。

图3-18 镜像控制文件

单击“Datafiles”节点,如图3-19所示。

在这里设置数据文件的路径和名称。

图3-19 设置数据文件

展开“Redo Log Groups”,设置联机日志文件(online redo),如图3-20所示。

图3-20 设置联机日志文件

在默认情况下,有三组联机日志,每组中只有一个成员(文件),需要我们往每组中再添加一个成员(文件)。

单击“Next”按钮,进入如图3-21所示的界面。

图3-21 数据库创建选项

单击“Finish”按钮,进入如图3-22所示的界面,其中列出了与我们即将创建的数据库有关的参数设置。

单击“OK”按钮,进入如图3-23所示的界面,开始数据库的创建。

这个过程比较长,需要耐心等待。

图3-22 数据库创建确认

图3-23 开始创建数据库

当数据库创建完成时,出现如图3-24所示的对话框,提示我们是否要改变用户的口令。

如果单击“Exit”按钮,则数据库创建全部结束;如果单击“Password Managerment”按钮,则出现如图3-25所示的界面。

在这里,我们可以再次修改每个用户的密码。

密码修改完成以后,单击“OK”按钮,数据库创建完成。

图3-24 是否修改密码

图3-25 修改密码

验证数据库创建是否成功。

如果执行这段脚本提示其他信息,则表示数据库创建还有问题。

至此,数据库创建成功。

3.1.3 DIY——Solaris下手工创建数据库

写在前面的话

通过图形界面(DBCA)创建数据,本来是一件简单的事情,但是,对于DBA来说,如果要创建多个数据库,那就是重复劳动,将耗费不必要的时间。如果建立一段脚本,则在需要的时候,我们只需修改几个参数,然后,通过复制、粘贴,执行这段脚本就能轻易完成整个数据库的创建,岂不是一件很惬意的事情!

3.1.3.1 创建环境与条件
〖Environment〗
〖创建数据库的条件〗

■ 必要的Oracle软件已经安装。

■ 设置好环境变量。

以用户oracle的身份登录。

编辑环境变量。

看看下面的环境变量是否设置正确。

ORACLE_SID=man中的man是我们要启动的实例(Instance),也是我们要创建的数据库的名称。这个名称可以随意指定,但是,这个名称必须和CREATE DATABASE命令中的相同。

ORACLE_BASE是已经安装好的Oracle软件的根目录(Oracle Base)。

ORACLE_HOME是已经安装好的Oracle软件的主目录(Oracle Home)。

【小贴士(Tip)】 设置好用户oracle的环境变量是我们成功创建数据库的关键之一。创建数据库失败,或者在创建数据库的过程中产生一些不可预料的异常,多数是源于环境变量设置不当。

使环境变量立即生效。

最保险的办法是,关闭当前窗口,重新打开一个新的窗口,重新以用户oracle的身份登录操作系统。

验证环境变量设置是否生效。

看看上面显示的值和我们设置的值是否相同。

3.1.3.2 开始创建数据库

设置实例名。

如果用户oracle的.profile中设置了实例名,就没必要执行下面的设置。

这个实例名,就是我们将要创建的数据库的实例名。

创建口令文件(Password File)。

调用口令文件创建工具orapwd创建口令文件。

orapwd是独立的、能在操作系统(OS)的命令行执行的Oracle工具。这个工具用于创建Oracle的口令文件。

FILE指定要创建的口令文件的路径及名称,默认路径是$ORACLE_HOME/dbs,$ORACLE_HOME是环境变量,表示Oracle的主目录。我们可以把口令文件放在其他地方,但是,根据以往的经验,还是建议把口令文件放在默认路径下,因为,虽然我们已经把口令文件放在其他地方,但是有时Oracle还会到默认路径下去查找口令文件(Password File),这就是有时口令文件(Password File)明明存在,Oracle却提示“找不到口令文件”的原因。

orapwman是口令文件的名称,口令文件的格式是:orapw+实例名(instance name)。如口令文件的名字orapwman,就是组合:orapw+man。我们应该严格遵守这种命名规范,这样可以减少不必要的麻烦!

PASSWORD用于指定用户SYS的密码,启动实例时需要用户SYS。

ENTRIES=5表示最多有多少个用户可以成为超级用户(SYSDBA)。

创建初始化参数文件(PFILE)/oracle/app/oracle/product/10.1.0/Db_1/dbs/initman.ora2。

这个文件的内容大致如下:

这里要注意数据库的名称(db_name)与回滚表空间的名称(undo_tablespace),这些名称必须和CREATE DATABASE语句中的相同。

【小贴士(Tip)】 从网上进行搜索,在Oracle的官方文档,或者我们已经安装的Oracle中,都有初始化参数文件(PFILE)的模板。我们可以把这些文件拿过来,稍作修改,就成为我们的PFILE。我们没有必要从头到尾地写一个PFILE文件,那样会耗费许多不必要的时间。

连接实例。

以用户SYS身份登录,这里要用到口令文件,这里的口令(用户SYS的口令)就是创建口令文件时指定的口令。

这里连接到一个空闲的实例(instance)。

根据PFILE创建SPFILE(Server Parameter File)。

根据初始化参数文件PFILE(initman.ora)创建服务器参数文件(SPFILE)。

SPFILE的命名规范是SPFILE+实例名+.ora

刚创建的SPFILE只有下次实例(instance)启动时才有效,所以,如果实例已经启动,请先将其关闭。

initman.ora2是上面的步骤中创建的初始化参数文件(PFILE)。

【小贴士(Tip)】 用于启动数据库的参数文件有两种类型:PFILE与SPFILE。一定不要混淆这两种类型的文件。只有数据库关闭的时候,才能修改PFILE。可以直接编辑PFILE。SPFILE是二进制文件,不能直接使用文本编辑器(如:vi)编辑它,只能通过命令(alter system)修改它。在数据库运行的时候,可以修改SPFILE中的参数。

把数据库实例启动到MOUNT状态。

如果没有创建SPFILE,则可以使用下面的命令启动实例。

initman.ora2是初始化参数文件(PFILE)。

注意: 这里只把实例启动到NOMOUNT状态。

创建数据库。

创建需要的目录

■ 创建初始化参数文件initman2.ora中涉及的目录。

■ 创建CREATE DATABASE语句中涉及的目录。

■ 目录创建完成以后,要把这些目录的属主改成oracle:dba(如:chown-Roracle:dba/oracle/app/oracle/admin/man/bdump),以便于操作系统用户oracle能够读/写这些目录。

执行CREATE DATABASE语句创建数据库

这个过程比较慢,需要耐心等待。

CREATE DATABASE man——创建数据库,这里指定数据库的名字为man。

USER SYS IDENTIFIED BY wy——指定用户SYS的密码。

USER SYSTEM IDENTIFIED BY wy——指定用户SYSTEM的密码。

LOGFILE——创建联机日志文件。

GROUP 1('/export/home/mandata/redo01_1','/export/home/mandata/redo01_2') SI ZE 100M——指定要创建的第一组联机日志,这组日志由两个成员(文件)组成。

MAXLOGFILES——指定日志(online redo)组的最大数量,就是可以最多有多少组日志。

MAXLOGMEMBERS——指定每组日志(online redo)中可以有多少个日志文件(日志成员)。

MAXLOGHISTORY——设定归档日志的最大数量,这个参数控制视图V$ARCHIVED_LOG的最大记录条数。

MAXDATAFILES——设置数据文件的最大数量。

MAXINSTANCES——指定有多少个实例(instance)可以同时装载(MOUNT)并打开(open)该数据库。

CHARACTER SET Z HS16GBK——指定字符集,一般中国大陆指定ZHS16GBK,ZHS16GBK是简体中文。

NATIONAL CHARACTER SET AL16UTF16——指定国家字符集,一般指定AL16UTF16。

ARCHIVELOG——使创建的数据库运行在归档模式。

DATAFILE'/export/home/mandata/system01.dbf'SIZE 325M REUSE——指定SYSTEM表空间的组成文件及文件大小。REUSE表示如果文件存在,则重用它。

SYSAUX DATAFILE'/ex port/home/mandata/sysaux01.dbf'SI ZE 325M REU SE——指定SYSAUX表空间的组成文件及大小。

DEFAULT TABLESPACE tbs_1——创建一个默认的永久表空间(Permanent,非临时的),Oracle将把这个表空间赋给那些没有指定默认表空间的非SYSTEM用户。tbs_1是表空间的名称。

DEFAULT TEMPORARY TABLESPACE tempts1——创建临时表空间,tempts1是临时表空间的名称。

UNDO TA BLESPACE und otbs1——创建回滚表空间,un dotbs1是回滚表空间的名称,这个表空间的名称必须和初始化参数文件(initman2.ora)中指定的表空间名称(undo_tablespace='UNDOTBS1')完全相同。

创建额外的表空间(这一步可选)。

■ 以用户sys的身份登录数据库。

■ 执行脚本创建额外的表空间。

运行SQL脚本,创建数据字典和相关的包。

■ catalog.sql用于创建数据字典。

■ catproc.sql用于创建PL/SQL所需要的函数、过程、包等。

验证数据库创建是否成功。以用户sys的身份登录。

如果提示其他信息,则说明数据库创建有问题。

至此,数据库创建结束,大功告成!

3.1.4 数据库创建疑难解析

实务44 使用DBCA创建数据库时,报告错误“ORA-12547: TNS: lost contact”
〖环境(Environmen)〗
〖现象(Symptom)〗

在Linux AS4上安装完Oracle 10g以后,用DBCA创建数据库时,报告下面错误:

〖原因(Cause)〗

ORA-12547错误的产生,是由于缺少RPM包libaio-0.3.93-4.i386.rpm所引起的。

〖方法(Action)〗

下载libaio-0.3.93-4.i386.rpm包。

安装包。

实务45 使用DBCA创建数据库时,报告错误“ORA-12571: TNS: packet writer failure”
〖环境(Environment)〗
〖现象(Symptom)〗

在Windows 2000上重新安装Oracle 9i,在使用DBCA配置数据库时,报告错误ORA-12571:TNS:packet writer failure。

〖原因(Cause)〗

这是因为sqlnet.ora文件中的参数SQLNET.AUTHENTICATION_SERVICES设置不正确所造成的。

〖方法(Action)〗

找到文件sqlnet.ora。

其中ORACLE_HOME表示Oracle的主目录,在注册表中可以找到它指向的路径。

编辑文件sqlnet.ora。

将参数SQLNET.AUTHENTICATION_SERVICES由NTS改成NONE。

保存以后,单击“重试”按钮继续安装。

引起ORA-12571错误,还可能有下面的原因。

■ 磁盘阵列中的SCSI磁盘的接口松动。

■ 数据库正在关闭中。

■ 网络中的IP冲突。

实务46 使用DBCA创建数据库时,报告错误“ORA-27123: unable to attach to shared memory segment”
〖环境(Environment)〗
〖现象(Symptom)〗

使用DBCA创建数据库的时候,报告错误“ORA-27123: unable to attach to shared memory segment”。

〖原因(Cause)〗

这是因为共享内存(Shared Memory)参数shmmax设置得太小造成的。

〖方法(Action)〗

提高共享内存(Shared Memory)参数shmmax的值。

以超级用户(root)的身份登录系统。

查看共享内存(Shared Memory)的当前值。

改变参数shmmax的大小,这种方法无须重新启动操作系统(OS)。

2147483648(2G)是共享内存的最新值。

若要永久改变参数shmmax的大小,则执行下面的过程。

编辑文件/etc/sysctl.conf。

往这个文件中加入如下内容:

4000000000是共享内存的最大值(不到4G)。

为了让内核参数生效,重新启动操作系统。

实务47 手工创建数据库时,如何查找数据库创建失败的原因
〖环境(Environment)〗
〖现象(Cause)〗

手工创建数据库失败,有时,命令行明确地告诉我们失败的原因;有时,命令行窗口给出的提示比较含糊。这些提示不能帮助我们找出建库失败的原因,因此我们还需要查看Oracle的警报文件(alert file)与跟踪文件(trace file),以确定数据库创建失败的原因。

〖方法(Action)〗

先对命令行提示的错误信息进行分析。

然后,查看Oracle的警报文件(alert file)。

找到初始化参数文件(PFILE)。

从初始化参数文件中找到参数background_dump_dest,根据background_dump_dest指向的路径找到警报文件(alert file)。

警报文件(alert file)的命名格式是:alert+实例名+.log,如:警报文件alert_man.log就是alert+man(实例名)+.log。

再查看跟踪文件,从中可以得到数据库创建失败的提示信息。

找到初始化参数文件(PFILE)。

从初始化参数文件中找到参数user_dump_dest。根据user_dump_dest指向的路径找到跟踪文件。

对跟踪文件进行分析。

实务48 手工创建数据库时,报告错误“ORA-01504: database name'TT'does not match parameter db_name'man'”
〖环境(Environment)〗
〖现象(Symptom)〗

使用CREATE DATABASE语句创建数据库时,报告下面的错误。

〖原因(Cause)〗

这是由于CREATE DAT ABASE语句中的数据库名称和初始化参数文件(PFILE)中的数据库名称(db_name)不同所造成的。

〖方法(Action)〗

修改CREATE DAT ABASE语句或者初始化参数文件(PFILE)中的参数db_name,使两个地方指定的数据库名称相同。

实务49 手工创建数据库,启动实例时,报告错误“ORA-24324: service handle not initialized”
〖环境(Environment)〗
〖现象(Symptom)〗

为了手工创建数据库,要先启动实例。启动实例时,产生错误,具体过程如下:

其中,PFILE='/oracle/app/oracle/product/10.1.0/Db_1/dbs/initman.ora2'是初始化参数文件。

〖原因(Cause)〗

当实例被异常终止时,如果我们在同一SQL*Plus窗口(界面)再次执行STARTUP命令,就会产生这个错误。

〖方法(Action)〗

退出当前的SQL*Plus。

重新启动SQL*Plus,登录数据库。

然后执行STARTUP命令启动数据库。

实务50 手工创建数据库时,报告错误“ORA-27038: created file already exists”
〖环境(Environment)〗
〖现象(Symptom)〗

在SQL*Plus中执行CREATE DATABASE语句创建数据库,产生下面的错误。

〖原因(Cause)〗

如果多次执行CREATE DATABASE语句,则说明已经生成了控制文件。

〖方法(Action)〗

利用操作系统命令把这个文件删除。

实务51 手工创建数据库时,报告错误“ORA-01100: database already mounted”
〖环境(Environment)〗
〖现象(Symptom)〗

当执行CREATE DATABASE语句创建数据库时,产生下面的错误。

〖原因(Cause)〗

当执行CREATE DATABASE语句后(不一定成功),数据库的状态已经改变到MOUNT状态,这时候,如果我们再一次执行CREATE DATABASE语句,就会报这个错误,因为手工创建数据库时,数据库必须运行在NOMOUNT状态。

〖方法(Action)〗

关闭实例。

重新把实例启动到MOUNT状态。

再次执行create database语句创建数据库,就不会产生ORA-01100错误。

实务52 手工重建数据库时,报告错误“ORA-01092: ORACLE instan ce terminated.Disconnection forced”之案例一
〖环境(Environment)〗
〖现象(Symptom)〗

当用CREATE DATABASE语句创建数据库时,报告下面的错误。

【小贴士(Tip)】 Oracle在命令行给我们的提示“ORA-01092:ORACLE instance terminated.Disconnection forced”,这只是一个笼统的提示,我们不应该把时间浪费在琢磨这个错误信息上。根据这个提示,我们不会找到问题的所在。如果想要找到问题的所在,则请查看警报文件(alert file)和跟踪文件(trace file)。

查看警报文件alert_man.log,发现下面的错误信息。

〖原因(Cause)〗

当重建数据库的时候,如果初始化参数文件的参数remote_login_passwordfile='EXCLUSIVE',就会产生上面的错误。

〖方法(Action)〗

方法一 :使用orapwd工具重建口令文件。

关于orapwd如何创建口令文件,在本书的相关章节已经有详细的描述。

方法二

找到初始化参数文件,默认情况下是在下面的路径中。

ORACLE_HOME是环境变量,表示Oracle的主目录。

编辑初始化参数文件。

将参数remote_login_passwordfile的值改成SHARED。

用刚刚修改的初始化参数文件(PFILE)重新启动实例。

再执行数据库创建命令。

【小贴士(Tip)】 警报文件(alert file)的命名格式是:alert+实例名+.log。如:警报文件alert_man.log就是alert+man(实例名)+.log。

实务53 手工重建数据库时,报告错误“ORA-01092: ORACLE instance terminated.Disconnection forced”之案例二
〖环境(Environment)〗
〖现象(Symptom)〗

使用CREATE DATABASE语句创建数据库时,报告如下错误。

查看警报文件(alert file),发现下面的信息。

〖原因(Cause)〗

经过仔细检查,发现原来是CREATE DATABASE语句中指定的回滚表空间名称(UNDO TABLESPACE undodo)和初始化参数中的表空间名称(undo_tablespace='UNDOTBS1')不相同。

〖方法(Action)〗

修改CREATE DATABASE语句的子句UNDO TABLESPACE或者修改初始化参数文件(PFILE)中的参数undo_tablespace,使它们的回滚表空间名称相同。

实务54 手工重建数据库时,报告错误“ORA-01092: ORACLE instance terminated.Disconnection forced”之案例三
〖环境(Environment)〗
〖现象(Symptom)〗

运行CREATE DATABASE语句创建数据库,提示如下信息。

查看警报文件(alert file),发现下面的错误信息。

查看跟踪文件(trace file),发现下面的错误信息。

〖原因(Cause)〗

经过仔细检查,发现CREATE DATABASE语句的子句DEFAULT TABLES PACE tbs_1后面没有数据文件的说明。如果DEFAULT TABLESPACE tbs_1后面没有指定数据文件,那么数据文件的管理将使用“Oracle管理的文件”(Oracle-Managed Files,OMF)。DB_CREATE_FILE_DEST用于指定OMF的路径,Oracle会自动在这个路径下创建数据文件。但是,查看初始化参数DB_CREATE_FILE_DEST的设置,这个参数的设置为空,说明没有启用OMF。所以,创建数据库失败。

〖方法(Action)〗

方法一 :修改初始化参数DB_CREATE_FILE_DEST。

在不改变DEFAULT TABLESPACE tbs_1子句的情况下,设置初始化参数DB_CREATE_FILE_DEST的值。

如果实例已经启动,则用ALTER SYSTEM改变DB_CREATE_FILE_DEST的值。

如果实例没有启动,则修改初始化参数文件(PFILE)中DB_CREATE_FILE_DEST的值,然后启动实例。

方法二 :修改CREATE DATABASE的子句DEFAULT TABLESPACE tbs_1,在后面加上数据文件的说明。比如:

这里增加了数据文件的说明。

实务55 手工创建数据库时,报告错误“ORA-01034: ORACLE not available”
〖环境(Environment)〗
〖现象(Symptom)〗

当执行CREATE DATABASE语句创建数据库时,产生下面的错误。

〖原因(Cause)〗

在实例还没有启动的情况下,我们就执行CREATE DATABASE语句创建数据库,这时候会报告错误“ORA-01034:ORACLE not available”。

〖方法(Action)〗

把数据库启动到NOMOUNT状态。

执行创建数据库的命令。

实务56 手工创建数据库,启动实例时,后台进程启动失败(如ORA-00444: background process"LGWR"failed while starting)
〖环境(Environment)〗
〖现象(Symptom)〗

手工创建数据库,启动实例时,报告如下错误信息。

或者

〖原因(Cause)〗

初始化参数BACKGROUND_DUMP_DEST用于指定一个目录,后台进程(LGWR、DBWn…)的调试信息(跟踪信息)会被写到这个目录下。当这个目录不存在的时候,后台进程(background processes)的启动就会失败。

〖方法(Action)〗

创建目录,并使用户oracle可以访问这些目录。

修改初始化参数。

使background_dump_dest='/oracle/app/oracle/admin/man/bdump'。

重新启动实例。

实务57 手工创建数据库,启动实例时,报告参数user_dump_dest错误
〖环境(Environment)〗
〖现象(Symptom)〗

手工创建数据库,启动实例时,报告如下信息。

〖原因(Cause)〗

这是因为参数user_dump_dest指向的目录不存在所造成的。

〖方法(Action)〗

使参数user_dump_dest指向一个正确的目录,并且用户oracle对这个目录要有读/写权限。 c22TiLPTZSOZKA7b6h3MK77EqwwUxhs+RevSI76zxWI+urGxfW24x4/A4NA0qT4j

点击中间区域
呼出菜单
上一章
目录
下一章
×