创建Oracle数据库是一个复杂的过程,“复杂”之处并不在于创建数据库的过程,而在于对整个数据库的“规划”。“规划”是很重要的,它直接影响到以后数据库性能以及数据库的可扩展。对于一个已经完成部署的系统(尤其是7×24小时运行),如果我们要对其系统结构进行重大的变动,我们的老板会很不高兴,即使老板同意我们进行修改,我们也将付出很大的代价,这种两头都不讨好的事情,我们可以在数据库规划阶段有效避免。
我们可以在第一次安装Oracle软件的时候创建数据库,也可以在安装完Oracle软件后再创建数据库。推荐大家使用后者。
不同类型的数据库满足不同的要求,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),涉及大量的数据。这是一种以“读”为主的数据库。
进行数据库设计的时候,数据的存储也是我们考虑得最多的因素之一,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的数据。
为了简化Oracle的管理,Oracle提供了一个基于Web的管理工具叫“企业管理器(Oracle Enterprise Manager)”。
企业管理器有两种方式进行部署。
■ 集中部署,管理网络中的多个数据库。
■ 本地部署,管理单台机器。
企业管理器控件(Oracle Enterprise Manager Database Control):在默认情况下,企业管理器控件随着数据库一起安装,它提供一个基于Web界面的接口,通过这个接口可以监控、管理和维护Oracle数据库。企业管理器控件可以执行所有的数据库管理任务。通过企业管理器控件,还可以得到数据库的信息,这些信息包括:
■ 实例名,数据库版本,Oracle主目录的位置等。
■ 当前实例的有效性。
■ 数据库警报信息。
■ 安全警报自动通知。
■ 会话和与SQL语句相关的性能信息。
■ 空间使用情况。
如果安装了企业管理器控件(Oracle Enterprise Manager Database Control),我们就可以使用Oracle的自动备份功能。
如果启用Oracle的自动备份(Oracle Automated Backup)功能,则企业管理器(Oracle Enterprise Manager)会定时一个作业(Job),这个作业使用RMAN(Oracle Database Recovery Manager)自动把数据库备份到指定的存储区域。
设置定时备份时,我们可以设置定时备份的时间和执行定时备份的操作系统账号,这个账号必须属于DBA组(ORA_DBA)。
如果安装了企业管理器控件(Oracle Enterprise Manager Database Control),就可以使用Oracle的邮件通知功能。可以定义一个事件,当这个事件发生时,企业管理器(Oracle Enterprise Manager)就会以E-mail的形式通知我们。这些事件可以是磁盘空间的使用达到了一定限度,或者数据库异常关闭等。
启用邮件通知,我们必须指定和邮件相关的设置。
■ 发送邮件服务器(SMTP)的主机名。
■ 用于接收邮件的邮箱地址。
写在前面的话
我们可以用DBCA创建数据库,也可以用脚本创建数据库。如果我们要创建多个数据库,则最好利用脚本。利用脚本创建数据库既“简单”又“复杂”。说“简单”,我们只需把脚本复制到SQL*Plus中执行便可;说“复杂”,利用脚本创建数据库的过程容易出现问题。不过,一旦我们调试好了脚本,利用脚本创建数据库还是非常简单的!
通过图形界面工具(DBCA)创建数据库是一件简单的事情。特别是对于刚学Oracle的朋友,我们推荐使用DBCA创建数据库。DBCA(DataBase Configuration Assistant)是一个图形界面工具,可以用来创建、删除和配置数据库。
创建相应的目录。
在本例中,数据文件、控制文件等大部分文件均放在这个目录。
用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 修改密码
验证数据库创建是否成功。
如果执行这段脚本提示其他信息,则表示数据库创建还有问题。
至此,数据库创建成功。
写在前面的话
通过图形界面(DBCA)创建数据,本来是一件简单的事情,但是,对于DBA来说,如果要创建多个数据库,那就是重复劳动,将耗费不必要的时间。如果建立一段脚本,则在需要的时候,我们只需修改几个参数,然后,通过复制、粘贴,执行这段脚本就能轻易完成整个数据库的创建,岂不是一件很惬意的事情!
■ 必要的Oracle软件已经安装。
■ 设置好环境变量。
以用户oracle的身份登录。
编辑环境变量。
看看下面的环境变量是否设置正确。
ORACLE_SID=man中的man是我们要启动的实例(Instance),也是我们要创建的数据库的名称。这个名称可以随意指定,但是,这个名称必须和CREATE DATABASE命令中的相同。
ORACLE_BASE是已经安装好的Oracle软件的根目录(Oracle Base)。
ORACLE_HOME是已经安装好的Oracle软件的主目录(Oracle Home)。
【小贴士(Tip)】 设置好用户oracle的环境变量是我们成功创建数据库的关键之一。创建数据库失败,或者在创建数据库的过程中产生一些不可预料的异常,多数是源于环境变量设置不当。
使环境变量立即生效。
最保险的办法是,关闭当前窗口,重新打开一个新的窗口,重新以用户oracle的身份登录操作系统。
验证环境变量设置是否生效。
看看上面显示的值和我们设置的值是否相同。
设置实例名。
如果用户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的身份登录。
如果提示其他信息,则说明数据库创建有问题。
至此,数据库创建结束,大功告成!
在Linux AS4上安装完Oracle 10g以后,用DBCA创建数据库时,报告下面错误:
ORA-12547错误的产生,是由于缺少RPM包libaio-0.3.93-4.i386.rpm所引起的。
下载libaio-0.3.93-4.i386.rpm包。
安装包。
在Windows 2000上重新安装Oracle 9i,在使用DBCA配置数据库时,报告错误ORA-12571:TNS:packet writer failure。
这是因为sqlnet.ora文件中的参数SQLNET.AUTHENTICATION_SERVICES设置不正确所造成的。
找到文件sqlnet.ora。
其中ORACLE_HOME表示Oracle的主目录,在注册表中可以找到它指向的路径。
编辑文件sqlnet.ora。
将参数SQLNET.AUTHENTICATION_SERVICES由NTS改成NONE。
保存以后,单击“重试”按钮继续安装。
引起ORA-12571错误,还可能有下面的原因。
■ 磁盘阵列中的SCSI磁盘的接口松动。
■ 数据库正在关闭中。
■ 网络中的IP冲突。
使用DBCA创建数据库的时候,报告错误“ORA-27123: unable to attach to shared memory segment”。
这是因为共享内存(Shared Memory)参数shmmax设置得太小造成的。
提高共享内存(Shared Memory)参数shmmax的值。
以超级用户(root)的身份登录系统。
查看共享内存(Shared Memory)的当前值。
改变参数shmmax的大小,这种方法无须重新启动操作系统(OS)。
2147483648(2G)是共享内存的最新值。
若要永久改变参数shmmax的大小,则执行下面的过程。
编辑文件/etc/sysctl.conf。
往这个文件中加入如下内容:
4000000000是共享内存的最大值(不到4G)。
为了让内核参数生效,重新启动操作系统。
手工创建数据库失败,有时,命令行明确地告诉我们失败的原因;有时,命令行窗口给出的提示比较含糊。这些提示不能帮助我们找出建库失败的原因,因此我们还需要查看Oracle的警报文件(alert file)与跟踪文件(trace file),以确定数据库创建失败的原因。
先对命令行提示的错误信息进行分析。
然后,查看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指向的路径找到跟踪文件。
对跟踪文件进行分析。
使用CREATE DATABASE语句创建数据库时,报告下面的错误。
这是由于CREATE DAT ABASE语句中的数据库名称和初始化参数文件(PFILE)中的数据库名称(db_name)不同所造成的。
修改CREATE DAT ABASE语句或者初始化参数文件(PFILE)中的参数db_name,使两个地方指定的数据库名称相同。
为了手工创建数据库,要先启动实例。启动实例时,产生错误,具体过程如下:
其中,PFILE='/oracle/app/oracle/product/10.1.0/Db_1/dbs/initman.ora2'是初始化参数文件。
当实例被异常终止时,如果我们在同一SQL*Plus窗口(界面)再次执行STARTUP命令,就会产生这个错误。
退出当前的SQL*Plus。
重新启动SQL*Plus,登录数据库。
然后执行STARTUP命令启动数据库。
在SQL*Plus中执行CREATE DATABASE语句创建数据库,产生下面的错误。
如果多次执行CREATE DATABASE语句,则说明已经生成了控制文件。
利用操作系统命令把这个文件删除。
当执行CREATE DATABASE语句创建数据库时,产生下面的错误。
当执行CREATE DATABASE语句后(不一定成功),数据库的状态已经改变到MOUNT状态,这时候,如果我们再一次执行CREATE DATABASE语句,就会报这个错误,因为手工创建数据库时,数据库必须运行在NOMOUNT状态。
关闭实例。
重新把实例启动到MOUNT状态。
再次执行create database语句创建数据库,就不会产生ORA-01100错误。
当用CREATE DATABASE语句创建数据库时,报告下面的错误。
【小贴士(Tip)】 Oracle在命令行给我们的提示“ORA-01092:ORACLE instance terminated.Disconnection forced”,这只是一个笼统的提示,我们不应该把时间浪费在琢磨这个错误信息上。根据这个提示,我们不会找到问题的所在。如果想要找到问题的所在,则请查看警报文件(alert file)和跟踪文件(trace file)。
查看警报文件alert_man.log,发现下面的错误信息。
当重建数据库的时候,如果初始化参数文件的参数remote_login_passwordfile='EXCLUSIVE',就会产生上面的错误。
◆ 方法一 :使用orapwd工具重建口令文件。
关于orapwd如何创建口令文件,在本书的相关章节已经有详细的描述。
◆ 方法二 :
找到初始化参数文件,默认情况下是在下面的路径中。
ORACLE_HOME是环境变量,表示Oracle的主目录。
编辑初始化参数文件。
将参数remote_login_passwordfile的值改成SHARED。
用刚刚修改的初始化参数文件(PFILE)重新启动实例。
再执行数据库创建命令。
【小贴士(Tip)】 警报文件(alert file)的命名格式是:alert+实例名+.log。如:警报文件alert_man.log就是alert+man(实例名)+.log。
使用CREATE DATABASE语句创建数据库时,报告如下错误。
查看警报文件(alert file),发现下面的信息。
经过仔细检查,发现原来是CREATE DATABASE语句中指定的回滚表空间名称(UNDO TABLESPACE undodo)和初始化参数中的表空间名称(undo_tablespace='UNDOTBS1')不相同。
修改CREATE DATABASE语句的子句UNDO TABLESPACE或者修改初始化参数文件(PFILE)中的参数undo_tablespace,使它们的回滚表空间名称相同。
运行CREATE DATABASE语句创建数据库,提示如下信息。
查看警报文件(alert file),发现下面的错误信息。
查看跟踪文件(trace file),发现下面的错误信息。
经过仔细检查,发现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。所以,创建数据库失败。
◆ 方法一 :修改初始化参数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,在后面加上数据文件的说明。比如:
这里增加了数据文件的说明。
当执行CREATE DATABASE语句创建数据库时,产生下面的错误。
在实例还没有启动的情况下,我们就执行CREATE DATABASE语句创建数据库,这时候会报告错误“ORA-01034:ORACLE not available”。
把数据库启动到NOMOUNT状态。
执行创建数据库的命令。
手工创建数据库,启动实例时,报告如下错误信息。
或者
初始化参数BACKGROUND_DUMP_DEST用于指定一个目录,后台进程(LGWR、DBWn…)的调试信息(跟踪信息)会被写到这个目录下。当这个目录不存在的时候,后台进程(background processes)的启动就会失败。
创建目录,并使用户oracle可以访问这些目录。
修改初始化参数。
使background_dump_dest='/oracle/app/oracle/admin/man/bdump'。
重新启动实例。
手工创建数据库,启动实例时,报告如下信息。
这是因为参数user_dump_dest指向的目录不存在所造成的。
使参数user_dump_dest指向一个正确的目录,并且用户oracle对这个目录要有读/写权限。