Oracle程序开发范例宝典
上QQ阅读APP看书,第一时间看更新

第1章 Oracle数据库基础

Oracle 11g 的安装与卸载

Oracle 数据库的启动与关闭

Oracle 数据库的物理存储结构

Oracle 数据字典

实例001 画读者与图书之间的E-R图

这是一个提高基础技能的实例

实例说明

在设计关系型数据库时,首先需要为它建立逻辑模型。关系型数据库的逻辑模型可以通过实体和关系组成的图形来表示,这种图形称之为E-R图,它实现将现实世界中的实体和实体之间的联系转换为逻辑模型。使用E-R图形表示的逻辑模型被称为E-R模型,一个标准的E-R模型主要由实体、属性和联系三部分组成。本实例要求画出读者与图书之间的E-R图。

技术要点

1.实体和属性

实体是一个数据对象,是指客观存在并可以相互区分的事物,如一个教师、一个学生、一个雇员等。每个实体由一组属性来表示,例如,一个具体的学生拥有学号、姓名、性别和班级等属性,其中学号可以唯一标识具体某个学生这个实体。具有相同属性的实体组合在一起就构成实体集,即实体集是实体的集合,而实体则是实体集中的某一个特例,例如,王同学这个实体就是学生实体集中的一个特例。

在E-R模型中,实体用矩形表示,矩形内注明实体的命名。实体名常用以大写字母开头的有具体意义的英文名词来表示,联系名和属性名也采用这种方式。图 1.1 所示为一个图书档案的E-R图。

图1.1 图书档案实体E-R图

2.联系

在实际应用中,实体之间是存在联系的,这种联系必须在逻辑模型中表现出来。在E-R模型中,联系用菱形表示,菱形框内写明“联系名”,并用“连接线”将有关实体连接起来,同时在“连接线”的旁边标注上联系的类型,两个实体之间的联系类型可以分为以下3类。

● 一对一:若对于实体集A 中的每一个实体,在实体集合B 中最多有一个实体与之相关;反之亦然,则称实体集A与实体B具有一对一的联系,可标记联系为1∶1。

● 一对多:若对于实体集A 中的每一个实体,在实体集B 中有多个实体与之相关;反之,对于实体集B中的每一个实体,实体集A中最多有一个实体与之相关,则称实体集A与实体集B具有一对多的联系,可标记联系为1∶n。

● 多对多:若对于实体集A 中的每一个实体,在实体集B 中有多个实体与之相关;反之,对于实体集B中的每一个实体,实体集A中也有多个实体与之相关,则称实体集A与实体集B具有多对多的联系,可标记联系为m∶n。

实现过程

例如,一个读者可以有多个图书借还记录,而一个借还记录只能隶属于一个读者,这样“读者档案实体”与“读者借还实体”之间就存在一对多的联系(即 1∶n),那么这两个实体之间的联系如图1.2所示。

图1.2 读者档案实体与读者借还实体之间的联系图

举一反三

根据本实例,读者可以进行以下操作。

画客户操作ATM机的E-R图。

画学生选课的E-R图。

实例002 安装Oracle 11g数据库

这是一个提高基础技能的实例

实例说明

Oracle 11g 的安装与升级都是一项比较复杂的工作,为了便于将Oracle 11g 数据库管理系统安装在多种操作平台上(如Windows 平台、Linux 平台和UNIX 平台等),Oracle 11g 提供了一个通用的安装工具——Oracle Universal Installer,该工具是基于Java 语言开发的图形界面安装工具,利用它可以在不同操作系统平台上安装Oracle 11g 数据库。本实例主要介绍Oracle 11g在Windows平台上的安装过程。

技术要点

Oracle 11g 数据库服务器由Oracle 数据库软件和Oracle 实例组成。安装数据库服务器就是将管理工具、实用工具、网络服务和基本的客户端等组件从安装盘复制到计算机硬盘的文件夹结构中,并创建数据库实例、配置网络和启动服务等。下面对Oracle 11g 的安装过程进行详细说明,这里以Oracle Database 11g 发行版2 为例(Oracle 11g 其他版本的安装可参考此版本)。这里先简单介绍下Oracle 11g 的发展历程。

Oracle数据库发展至今,已经经过了30多年的历史,如表1.1所示,列出了Oracle数据库各个版本的推出年份及大事记。

表1.1 Oracle数据库大事记

经过权威市场研究分析表明,Oracle数据库现在以绝对的优势占据数据库市场的头把交椅,而且其接近50%的市场份额,标志着Oracle数据库的市场地位难以撼动。随着人类社会信息资源的不断增长,更加需要强大而安全的数据库管理系统,这导致Oracle数据库的市场占有率在这些年来不断地增加,其独占鳌头的市场地位是不容置疑的。

那Oracle 11g 的新特性呢?

Oracle 数据的最新版本是Oracle 11g,通过使用Oracle 11g 数据库,可以帮助企业管理企业信息、更深入地洞察业务状况并迅速地做出调整以适应不断变化的竞争环境。Oracle 11g 数据库增强了Oracle数据库独特的数据库集群、数据中心自动化和工作量管理功能,其主要的新特性如下所示。

1.增强信息生命周期管理和存储管理能力

Oracle 11g数据库具有极新的数据划分和压缩功能,可实现更经济的信息生命周期管理和存储管理。很多原来需要手工完成的数据划分工作在Oracle 11g数据库中都实现了自动化,Oracle 11g数据库还扩展了已有的范围、散列和列表划分功能,增加了间隔、索引和虚拟卷划分功能。

2.全面回忆数据变化

Oracle 11g 数据库具有Oracle 全面回忆(Oracle Total Recall)组件,可帮助管理员查询在过去某些时刻指定表格中的数据。管理员可以用这种简单实用的方法给数据增加时间维度,以跟踪数据变化、实施审计并满足法规要求。

3.最大限度提高信息可用性

在保护数据库应用免受计划停机和意外宕机影响方面,Oracle在业界一直处于领先地位, Oracle 11g 数据库进一步增强了这种领先地位,数据库管理员现在可以更轻松地达到用户的可用性预期。新的可用性功能包括:Oracle 闪回交易(Oracle Flashback Transaction),可以轻松撤销错误交易以及任何相关交易;并行备份和恢复功能,可改善非常大数据库的备份和存储性能;“热修补”功能,不必关闭数据库就可以进行数据库修补,提高了系统可用性。

4.Oracle快速文件

Oracle 11g 数据库具有在数据库中存储大型对象的下一代功能,这些对象包括图像、大型文本对象或一些先进的数据类型,如XML、医疗成像数据和三维对象。Oracle快速文件(Oracle Fast Files)组件使得数据库应用的性能完全比得上文件系统的性能。

5.更快的XML

在 Oracle 11g 数据库中,XML DB 的性能获得了极大的提高,XML DB 是 Oracle 数据库的一个组件,可以帮助客户以本机方式存储和操作 XML 数据。Oracle 11g 数据库增加了对二进制XML数据的支持,现在客户可以选择适合自己特定应用及性能需求的XML存储选项。

6.透明的加密

Oracle 11g 数据库进一步增强了Oracle 数据库无与伦比的安全性,这个新版数据库增强了Oracle 透明数据加密功能,将这种功能扩展到了卷级加密之外。Oracle 11g 数据库具有表空间加密功能,可用来加密整个表、索引和所存储的其他数据。

7.嵌入式OLAP行列

Oracle 11g 数据库在数据仓库方面也引入了创新,OLAP 行列现在可以在数据库中像物化图那样使用,因此开发人员可以用业界标准SQL实现数据查询,同时仍然受益于OLAP行列所具有的高性能。

8.连接汇合和查询结果高速缓存

Oracle 11g 数据库进一步增强了甲骨文在性能和可扩展性方面的业界领先地位,增加了查询结果高速缓存等新功能。通过高速缓存和重用经常调用的数据库查询以及数据库和应用层的功能,查询结果高速缓存功能改善了应用的性能和可扩展性。

9.增强了应用开发能力

Oracle 11g 数据库提供多种开发工具供开发人员选择,它提供的简化应用开发流程,可以充分利用Oracle 11g 数据库的关键功能,这些关键功能包括:客户端高速缓存、提高应用速度的二进制XML、XML处理以及文件存储和检索。

实现过程

(1)在数据库安装光盘或安装文件夹中双击 setup.exe 文件,将启动 Oracle Universal Installer安装工具,并打开如图1.3所示的命令行窗口,然后会在该窗口中出现用于检测计算机软件、硬件安装环境的提示信息,若安装环境不满足系统安装的最小需求,则程序会终止运行。

图1.3 启动Oracle Universal Installer

(2)在Oracle Universal Installer 安装工具检测完当前系统的软、硬件环境之后,将打开“配置安全更新”界面。该界面主要用来设置系统的在线更新方式,若数据库所安装的机器没有连接Internet,则无需进行系统在线更新配置。这样在该界面上可以取消“我希望通过My Oracle Support接收安全更新”复选框的标记,并将“电子邮件”文本框置空,然后单击“下一步”按钮,如图1.4所示。

图1.4 配置安全更新界面

(3)单击“下一步”按钮后,系统会弹出“未指定电子邮件地址”的信息提示框,如图1.5所示。这里单击“是”按钮,表示对上一步的设置进行确认就可以了。

图1.5 “未指定电子邮件地址”提示框

(4)单击“是”按钮后,会打开“选择安装选项”界面,该界面用于选择“安装选项”,这里选择“创建和配置数据库”选项,然后单击“下一步”按钮,如图1.6所示。

图1.6 “选择安装选项”界面

(5)单击“下一步”按钮后,会打开“系统类”界面,如图 1.7 所示。该界面用来选择数据库被安装在哪种操作系统平台上(Windows 主要有桌面版和服务器版两种),这要根据当前机器所安装的操作系统而定,本演示实例使用的是 Windows 7 操作系统(属于桌面类系统),所以选择“桌面类”,然后单击“下一步”按钮。

图1.7 “系统类”界面

(6)单击“下一步”按钮后,会打开“典型安装配置”界面。在该界面中,首先设置“文件目录”,默认情况下,安装系统会自动搜索出剩余磁盘空间最大的磁盘作为默认安装盘,当然也可以自定义安装磁盘。然后选择“数据库版本”,安装系统提供的数据库版本包括“企业版”、“标准版”、“个人版”和“定制版”4种,通常选择“企业版”就可以。接着输入“全局数据库名”和“登录密码”(需要记住,该密码是SYSTEM、SYS、SYSMAN、DBSNMP这4个管理账户共同使用的初始密码。另外,用户SCOTT的初始密码为tiger),其中“全局数据库名”也就是数据库实例名称,它具有唯一性,不允许出现两个重复的“全局数据库名”。最后单击“下一步”按钮,如图1.8所示。

图1.8 典型安装配置界面

(7)单击“下一步”按钮后,会打开“执行先决条件检查”界面,该界面用来检查安装本产品所需要的最低配置,检查结果会在下一个界面中显示出来,如图1.9所示。

图1.9 执行先决条件检查界面

(8)检查完毕后,弹出如图1.10所示的“概要”界面,在该界面中会显示出安装产品的概要信息,若在上一步中检查出某些系统配置不符合Oracle安装的最低要求,则会在该界面的列表中显示出来,以供用户参考,然后单击“完成”按钮即可。

图1.10 概要界面

(9)单击“完成”按钮后,会打开“安装产品”界面,该界面会显示产品的安装进度,如图1.11所示。

图1.11 安装产品界面

(10)当“安装产品”界面中的进度条到达100%后,会打开“Database Configuration Assistant”界面——即数据库配置助手界面,如图1.12所示。在该界面中,单击“停止”按钮,可以随时停止文件的复制。

图1.12 数据库配置助手界面

(11)当“数据库配置助手”界面中的进度条到达100%后,表示Oracle 11g 数据库安装所需的文件已经复制完毕,这时会弹出一个包含“安装信息”的对话框,如图1.13所示。

图1.13 包含“安装信息”的对话框

(12)在上面的对话框中单击“口令管理”按钮,会打开如图 1.14 所示的“口令管理”对话框,在该对话框中可以为某些用户重新设置口令或者解除某些用户的锁定状态(比如,SCOTT用户默认处于锁定状态)。

图1.14 口令管理对话框

(13)在“口令管理”对话框中单击“确定”或“取消”按钮就可以返回到如图 1.13 所示的包含“安装信息”的对话框,在该对话框中单击“确定”按钮将打开“完成”界面,如图1.15所示。另外,需要用户在这个界面记住Oracle企业管理器(OEM)的连接地址,这是一个Web形式的企业管理器,它的地址通常默认为“https://localhost:1518/em”。至此 Oracle 11g 数据库安装完毕,单击“关闭”按钮完成Oracle 11g 数据库的安装。

图1.15 完成界面

举一反三

根据本实例,读者可以进行以下操作。

在Linux 系统中安装Oracle 11g 数据库。

在UNIX 系统中安装Oracle 11g 数据库。

实例003 卸载Oracle 11g数据库

这是一个提高基础技能的实例

实例说明

Oracle 11g 的卸载主要有两种方式,一种是使用Oracle Universal Installer 管理工具,该工具以向导的模式卸载数据库;另一种是通过运行“deinstall.bat”批处理文件来卸载数据库。由于第一种卸载方式以向导模式进行,比较简单,这里不做过多介绍。这里主要讲解第二种卸载数据库的方法——使用“deinstall.bat”批处理文件卸载数据库。

技术要点

卸载Oracle 11g 的具体步骤在“实现过程”中。

实现过程

使用“deinstall.bat”批处理文件卸载数据库,具体步骤如下。

(1)首先打开Windows 7 的“组件服务”窗口中,然后停止所有的Oracle 后台服务程序,如图1.16所示。

图1.16 停止Oracle所有的后台服务

(2)然后运行“E:\app\Administrator\product\11.2.0\dbhome_1\deinstall\deinstall.bat”这个批处理文件(这个目录要根据自己实际安装的位置来确定),会打开如图1.17所示的命令行窗口,然后等待程序提取“卸载”信息。

图1.17 第一个命令行界面

(3)“卸载”信息提取完毕后,会显示如图 1.18 所示的第二个命令行界面,用以取消配置LISTENER单实例监听程序。

图1.18 第二个命令行界面

(4)接着显示如图1.19所示的第三个命令行界面,在该界面的提示符位置输入全局数据库名称,若存在多个数据库,则数据库名称之间使用逗号分隔(这里输入“orcl”),然后按“Enter”键(或者什么也不输,直接按“Enter”键即可)。

图1.19 第三个命令行界面

(5)这时会显示第四个命令行界面,如图1.20 所示。在该界面提示符的位置输入“y”字符,然后按“Enter”键。

图1.20 第四个命令行界面

(6)这时会显示第五个命令行界面,如图1.21 所示,等待卸载Oracle 11g 数据库,卸载操作可能要持续几分钟,耐心等待。

图1.21 第五个命令行界

(7)卸载完成,命令行界面会自动退出,由于这种自动卸载功能并不完全彻底,需要手动清除安装目录中的剩余文件。

举一反三

根据本实例,读者可以进行以下操作。

使用Oracle Universal Installer 管理工具卸载Oracle 11g。

实例004 使用SQL*Plus工具

这是一个提高基础技能的实例

实例位置:光盘\mingrisoft\01\004

实例说明

Oracle 11g提供了多种数据库管理工具,经常用到的有SQL*Plus、Oracle企业管理器(Oracle Enterprise Manager)和数据库配置助手(Database Configuration Assistant)。本实例主要介绍SQL*Plus工具。

技术要点

在 Oracle 11g 数据库系统中,用户对数据库的操作主要是通过 SQL*Plus 来完成的。SQL*Plus 作为 Oracle 的客户端工具,既可以建立位于数据库服务器上的数据连接,也可以建立位于网络中的数据连接,下面将介绍如何启动SQL*Plus和如何使用SQL*Plus连接到数据库。

(1)选择“开始”/“所有程序”/“Oracle-OraDb11g_home1”/“应用程序开发”/“SQL*Plus”命令,打开如图1.22所示的SQL*Plus启动界面。

图1.22 SQL*Plus启动界面

(2)在命令提示符的位置输入登录用户(如SYSTEM或SYS等系统管理账户)和登录密码(密码是在安装或创建数据库时指定的),若输入的用户名和密码正确,则SQL*Plus将连接到数据库,如图1.23所示。

图1.23 使用SQL*Plus连接数据库

另外,还可以通过在“运行”中输入 cmd 命令来启动命令行窗口,然后在该窗口输入SQL*Plus命令来连接数据库,如图1.24所示。使用SQL*Plus命令连接数据库实例的语法格式如下:

图1.24 使用SQL*Plus命令连接数据库实例

SQLPLUS username[/password][@connect_identifier] [AS SYSOPER|SYSDBA]

● username 表示登录用户名。

● password 表示登录密码。

● @connect_identifier 表示连接的全局数据库名,若连接本机上的默认数据库,则可以省略。

实现过程

(1)启动SQL*Plus,以scott/tiger身份连接数据库。如图1.25所示。

图1.25 以scott/tiger身份连接数据库

举一反三

根据本实例,读者可以进行以下操作。

在命令行窗口中用scott/tiger身份连接数据库。

实例005 Oracle 企业管理器和数据库配置助手

这是一个提高基础技能的实例

实例说明

本实例主要介绍Oracle企业管理器(Oracle Enterprise Manager)和数据库配置助手(Database Configuration Assistant)。

技术要点

(1)Oracle Enterprise Manager(OEM)是基于Web 界面的Oracle 数据库管理工具。启动Oracle 11g 的OEM 只需在浏览器中输入其URL 地址——通常为https://localhost:1518/em,然后连接主页即可。也可以在“开始”菜单的“Oracle 程序组”中选择“Database Control - orcl”菜单命令来启动Oracle 11g 的OEM 工具。

(2)在安装 Oracle 11g 数据库管理系统的过程中,若选择“仅安装 Oracle 数据库软件”,则系统安装完毕后,需要手动创建数据库才能够实现对 Oracle 数据库的各种操作。在Oracle 11g 中,可以通过 Database Configuration Assistant(DBCA)数据库配置助手来实现创建和配置数据库。

实现过程

(1)启动Oracle企业管理器。

如果是第一次使用OEM,启动Oracle 11g 的OEM 后,需要安装“信任证书”或者直接选择“继续浏览此网站”即可。然后就会出现 OEM 的登录页面,用户需要输入登录用户名(如SYSTEM、SYS、SCOTT等)和登录口令,如图1.26所示。

图1.26 登录OEM

在输入用户名和口令后,单击“登录”按钮,若用户名和口令都正确,就会出现“数据库实例”的“主目录”属性页,如图1.27所示。

图1.27 “主目录”页面

OEM以图形的方式提供用户对数据库的操作,虽然操作起来比较方便简单,不用需要使用大量的命令,但这对于初学者来说减少了学习操作Oracle数据库命令的机会,而且不利于读者深刻地理解Oracle数据库。因此建议读者强制自己使用SQL*Plus工具,另外,本书实例的讲解也都主要在SQL*Plus中完成,以帮助读者更好地学习SQL*Plus命令。

(2)使用数据库配置助手。

在开始菜单中选择“所有程序”/“Oracle - OraDb11g_home1”/“配置和移植工具”/“Database Configuration Assistant”菜单命令,打开如图1.28 所示的窗口。

图1.28 启动数据库配置助手

然后,用户只需要按照 DBCA 向导的提示逐步进行设置,就可以实现创建和配置数据库。

举一反三

根据本实例,读者可以进行以下操作。

操作Oracle企业管理器。

实例006 启动数据库实例到NOMOUNT模式下

这是一个提高基础技能的实例

实例位置:光盘\mingrisoft\01\006

实例说明

Oracle数据库实例的启动过程分为3步骤,分别是启动实例、加载数据库、打开数据库。用户可以根据实际情况的需要,以不同的模式启动数据库。下面通过实例介绍如何启动数据库实例到NOMOUNT模式下。

技术要点

这种启动模式只会创建实例(即创建 Oracle 实例的各种内存结构和服务进程),并不加载数据库,也不会打开任何数据文件。启动数据库所使用的命令格式如下:

STARTUP [nomount] [resetrict] [pfile=filename]

● nomount:表示启动实例不加载数据库。

● resetrict:用于指定以受限制的会话方式启动数据库。

● pfile:用于指定启动实例时所使用的文本参数文件,filename 就是文件名。

Oracle数据库实例在启动时必须读取一个初始化参数文件,以便从中获得有关实例启动的参数配置信息。若在startup语句中没有指定pfile参数,则Oracle首先读取默认位置的服务器初始化参数文件spfile,若没有找到默认的服务器初始化参数文件,则将读取默认位置的文本初始化参数文件。

说明:通常在创建新数据库或重建控制文件时,使用NOMOUNT模式启动数据库实例。

实现过程

(1)启动SQL*Plus,以system身份连接数据库。

(2)使用startup语句启动数据库到nomount下。

(3)主要程序代码如下。

SQL> connect system/1qaz2wsx as sysdba;

已连接。

SQL> shutdown immediate

数据库已经关闭。

已经卸载数据库。

ORACLE 例程已经关闭。

SQL> startup nomount

ORACLE 例程已经启动。

Total System Global Area 535662592 bytes

Fixed Size     1375792 bytes

Variable Size   226492880 bytes

Database Buffers   301989888 bytes

Redo Buffers    5804032 bytes

在上面的示例代码中,首先用户要以sysdba的身份登录,才具有关闭和启动数据实例的权限。在使用shutdown 命令关闭数据库实例之后,使用startup nomount 命令启动数据库实例。

举一反三

根据本实例,读者可以进行以下操作。

启动数据库实例到MOUNT模式下

实例007 启动数据库实例到MOUNT模式下

本实例是一个实用的程序

实例位置:光盘\mingrisoft\01\007

实例说明

本实例讲解了如何启动数据库实例到MOUNT模式下。

技术要点

这种模式将启动实例、加载数据库并保持数据库的关闭状态,下面的示例代码显示了如何使用MOUNT模式启动数据库实例。启动数据库所使用的命令格式如下:

STARTUP [mount] [resetrict] [pfile=filename]

● mount:表示启动实例、加载数据库并保持数据库的关闭状态。

说明:MOUNT 模式通常在进行数据库维护时使用。比如,执行数据库完全恢复操作、更改数据库的归档模式等。

实现过程

(1)启动SQL*Plus,以system身份连接数据库。

(2)使用startup语句启动数据库到mount下。

(3)主要程序代码如下。

SQL> shutdown immediate

数据库已经关闭。

已经卸载数据库。

ORACLE 例程已经关闭。

SQL> startup mount

ORACLE 例程已经启动。

Total System Global Area 535662592 bytes

Fixed Size     1375792 bytes

Variable Size   226492880 bytes

Database Buffers   301989888 bytes

Redo Buffers    5804032 bytes

数据库装载完毕。

上面的代码中,首先使用shutdown 命令关闭数据库实例,然后再使用startup mount 命令启动数据库实例。

举一反三

根据本实例,读者可以进行以下操作。

启动数据库实例到OPEN模式下。

实例008 启动数据库实例到OPEN模式下

本实例是一个实用的程序

实例位置:光盘\mingrisoft\01\008

实例说明

本实例讲解了如何启动数据库实例到OPEN模式下。

技术要点

这种模式将启动实例、加载并打开数据库,这就是常规的启动模式,用户想要对数据库进行多种操作,就必须使用OPEN模式启动数据库实例。

STARTUP [open] [resetrict] [pfile=filename]

● open:表示启动实例、加载并打开数据库,这个是默认选项。

实现过程

(1)启动SQL*Plus,以system身份连接数据库。

(2)使用startup语句启动数据库到open下。

(3)主要程序代码如下。

SQL> startup

ORACLE 例程已经启动。

Total System Global Area 535662592 bytes

Fixed Size     1375792 bytes

Variable Size   226492880 bytes

Database Buffers   301989888 bytes

Redo Buffers    5804032 bytes

数据库装载完毕。

数据库已经打开。

在上面的代码中,startup 命令的后面不带有任何参数,就表示以 OPEN 模式启动数据库实例。

举一反三

根据本实例,读者可以进行以下操作。

启动数据库实例到FORCE模式下。

实例009 启动数据库实例到FORCE模式下

这是一个提高基础技能的实例

实例位置:光盘\mingrisoft\01\009

实例说明

FORCE模式,这种模式将终止实例并重新启动数据库,这种启动模式具有一定的强制性。比如,在其他启动模式失效时,可以尝试使用这种启动模式。本实例讲解了如何启动数据库实例到FORCE模式下。

技术要点

STARTUP [ force] [resetrict] [pfile=filename]

● force:表示终止实例并重新启动数据库。

实现过程

(1)启动SQL*Plus,以system身份连接数据库。

(2)使用startup语句启动数据库到force下。

(3)主要程序代码如下。

SQL> startup force

ORACLE 例程已经启动。

Total System Global Area 535662592 bytes

Fixed Size     1375792 bytes

Variable Size   226492880 bytes

Database Buffers   301989888 bytes

Redo Buffers    5804032 bytes

数据库装载完毕。

数据库已经打开。

举一反三

根据本实例,读者可以进行以下操作。

根据不同情况启动Oracle数据库实例。

实例010 使用NORMAL方式关闭数据库

这是一个提高基础技能的实例

实例位置:光盘\mingrisoft\01\010

实例说明

与启动Oracle数据库实例相同,关闭Oracle数据库实例也分为3个步骤,分别是关闭数据库、卸载数据库、关闭Oracle实例。在SQL*Plus中,可以使用shutdown语句关闭数据库,其具体语法格式如下:

SHUTDOWN [normal | transactional | immediate | abort]

● normal:表示以正常方式关闭数据库。

● transactional:表示在当前所有的活动事务被提交完毕之后,关闭数据库。

● immediate:表示在尽可能短的时间内立即关闭数据库。

● abort:表示以终止方式来关闭数据库。

由于前3种关闭方式经常用到(第4种要在极特殊的情况下才用到),下面将主要讲解如何使用NORMAL方式关闭数据库。

技术要点

(1)使用NORMAL方式关闭数据库:这种方式称作正常关闭方式,如果对关闭数据库的时间没有限制,通常会使用这种方式来关闭数据库。在SQL*Plus中,可以使用shutdown语句关闭数据库,其具体语法格式如下:

SHUTDOWN [normal]

● normal:表示以正常方式关闭数据库。

(2)使用TRANSACTIONAL方式关闭数据库,这种方式称作事务关闭方式,它首要任务是能够保证当前所有的活动事务都可以被提交,并在尽可能短的时间内关闭数据库。使用TRANSACTIONAL方式关闭数据库,代码及运行结果如下。

SQL> shutdown transactional

数据库已经关闭。

已经卸载数据库。

ORACLE 例程已经关闭。

以事务方式关闭数据库时,Oracle将执行如下操作。

● 阻止用户建立新连接和开始新事务。

● 等待所有活动事务提交后,再断开用户连接。

● 当所有的活动事务提交完毕、所有的用户都断开连接后,关闭数据库。

(3)使用IMMEDIATE方式关闭数据库时,就跟IMMEDIATE单词的含义一样,这种方式称作立即关闭方式,这种方式能够在尽可能短的时间内关闭数据库。下面的代码显示了如何使用IMMEDIATE方式关闭数据库。使用IMMEDIATE方式关闭数据库,代码及运行结果如下。

SQL> shutdown immediate

数据库已经关闭。

已经卸载数据库。

ORACLE 例程已经关闭。

在这种关闭方式下,Oracle不但会立即中断当前用户的连接,而且会强行终止用户的当前活动事务,将未完成的事务回退。以立即关闭方式关闭数据库时,Oracle将执行如下操作。

● 阻止用户建立新连接和开始新事务。

● 将未提交的活动事务回退。

● 关闭数据库。

(4)ABORT 方式:这种方式称作终止关闭方式,终止关闭方式具有一定的强制性和破坏性。使用这种方式会强制中断任何数据库操作,这样可能会丢失一部分数据信息,影响数据库的完整性。除了由于使用其他3种方式无法关闭数据库而使用它之外,应该尽量避免使用这种方式。使用ABORT方式关闭数据库,代码及运行结果如下。

SQL> shutdown abort

ORACLE 例程已经关闭。

以立即关闭方式关闭数据库时,Oracle将执行如下操作。

● 阻止用户建立新连接和开始新事务。

● 取消未提交的活动事务,而不是回退。

● 立即终止正在执行的任何SQL 语句。

● 立即关闭数据库。

实现过程

(1)启动SQL*Plus,以system身份连接数据库。

(2)使用shutdown语句关闭数据库。

(3)主要程序代码如下。

SQL> shutdown normal;

数据库已经关闭。

已经卸载数据库。

ORACLE 例程已经关闭。

从上面的代码可以看出,Oracle在执行shutdown命令后,所返回的响应信息就是关闭数据库实例的过程。当以正常方式时关闭数据库时,Oracle将执行如下操作。

● 阻止任何用户建立新的连接。

● 等待当前所有正在连接的用户主动断开连接。

● 当所有的用户都断开连接后,将立即关闭数据库。

举一反三

根据本实例,读者可以进行以下操作。

使用TRANSACTIONAL方式关闭数据库

实例011 使用DBCA创建一个数据库

这是一个提高基础技能的实例

实例说明

本实例使用Oracle 数据库管理工具——Database Configuration Assistant(数据库配置助手)创建一个DBSQL数据库。

技术要点

使用Oracle 11g 的DBCA(数据库配置助手)来创建一个数据库,主要有12 个步骤,其中主要是前3个步骤的设置,后面的9个步骤,按照提示和自己的要求简单设置就可以了。

实现过程

使用DBCA创建一个数据库,其中最主要的前3个步骤。

(1)打开Database Configuration Assistant,首先出现的是“欢迎使用”界面,然后单击“下一步”按钮,打开如图1.29所示的“操作”界面,在该界面选择“创建数据库”选项。

图1.29 选择“创建数据库”

(2)单击“下一步”按钮,打开如图1.30所示的“数据库模板”界面,这里建议选择“数据仓库”选项,这样我们可以创建一个功能比较完善的数据仓库。

图1.30 选择“数据仓库”

(3)单击“下一步”按钮,打开如图1.31所示的“数据库标识”界面,并输入“全局数据库名”(如DBSQL)和SID(通常与全局数据库名相同)。

图1.31 输入“数据库标识”

创建后的数据库在Administration Assistant for Windows 中打开,显示效果如图1.32 所示。

图1.32 通过DBCA创建的DBSQL数据库

举一反三

根据本实例,读者可以进行以下操作。

使用DBCA实现创建和配置数据库。

实例012 强制关闭Oracle数据库

这是一个提高基础技能的实例

实例位置:光盘\mingrisoft\01\012

实例说明

我们介绍了在 SQL*Plus 中,可以使用 shutdown 语句关闭数据库,其具体语法格式如下:

SHUTDOWN [normal | transactional | immediate | abort]

在实例010中,已经详细介绍了前三种关闭方式,最后一种关闭方式在本例中进行讲解。本实例主要实现了强制关闭Oracle数据库的功能。

技术要点

以强制关闭方式关闭数据库时,Oracle将执行如下操作。

● 阻止用户建立新连接和开始新事务。

● 取消未提交的活动事务,而不是回退。

● 立即终止正在执行的任何SQL 语句。

● 立即关闭数据库。

实现过程

(1)启动SQL*Plus,以system身份连接数据库。

(2)使用ABORT 方式关闭数据库,只要在SQL*Plus 环境下输入“shutdown abort”命令,然后按“Enter”键确认就可以了。

(3)主要程序代码及运行结果如下。

SQL> shutdown abort

ORACLE 例程已经关闭。

举一反三

根据本实例,读者可以进行以下操作。

使用IMMEDIATE方式关闭数据库。

实例013 查询Oracle标准数据块的大小

这是一个提高基础技能的实例

实例位置:光盘\mingrisoft\01\013

实例说明

本实例通过V$PARAMETER数据字典来查询Oracle标准数据块的大小,运行结果如图1.33所示。

图1.33 Oracle标准数据块的大小

技术要点

下面介绍一下数据块。

数据块是Oracle逻辑存储结构中的最小的逻辑单位,也是执行数据库输入输出操作的最小存储单位。那什么是Oracle逻辑存储结构呢?

逻辑存储结构是Oracle数据库存储结构的核心内容,对Oracle数据库的所有操作都会涉及其逻辑存储结构。逻辑存储结构是从逻辑的角度分析数据库的构成,是对数据存储结构在逻辑概念上的划分。Oracle的逻辑存储结构是一种层次结构,主要由表空间、段、区间和数据块等概念组成。逻辑结构是面向用户的,当用户使用Oracle设计数据库时,其使用的就是逻辑存储结构。Oracle的逻辑存储结构中所包含的多个结构对象从数据块到表空间形成了不同层次的粒度关系,如图1.34所示。

图1.34 Oracle的逻辑存储结构

从图1.34中可以看到,Oracle数据库是由多个表空间组成的(可见数据库自身也属于逻辑概念),而表空间又是由多个段组成的,段由多个数据区组成,数据区又是由多个数据块组成的。

Oracle数据存放在“Oracle数据块”中,而不是“操作系统块”中。通常Oracle数据块是操作系统块的整数倍,如果操作系统块的大小为2048B,并且Oracle数据块的大小为8192B,则表示Oracle数据块由4个操作系统块构成。Oracle数据块有一定的标准大小,其大小被写入到初始化参数DB_BlOCK_SIZE中。另外,Oracle支持在同一个数据库中使用多种大小的块,与标准块大小不同的块就是非标准块。

数据块中可以存放表数据、索引数据和簇数据等,无论存放哪种类型的数据,其结构都是相同的。数据块由块头、表目录、行目录、自由空间和行数据这5部分组成,如图1.35所示。

图1.35 数据块的结构

数据块中各个组成部分的介绍如下。

● 块头:存放数据块的基本信息,如块的物理地址、块所属的段的类型等。

● 表目录:存放表的相关信息。如果数据块中存储的数据是表数据,则表目录中存储有关这些表的相关信息。

● 行目录:如果块中有行数据存在,则这些行的信息将被记录在行目录中。这些信息包括行的地址等。

● 自由空间:空余空间是一个块中未使用的区域,这片区域用于新行的插入和已经存在的行的更新。

● 行数据:用于存放表数据和索引数据的地方,这部分空间已被数据行所占用(如,表中的若干行数据记录)。

通常把块头、表目录、行目录这三部分组合起来称为头部信息区,头部信息区不存放数据,它存放整个块的引导信息,起到引导系统读取数据的作用。所以头部信息区若遭到破坏,则Oracle系统将无法读取这部分数据。另外,空余空间和行数据公共构成块的存储区,用于存放真正的数据记录。

实现过程

(1)启动SQL*Plus,以system身份连接数据库。

(2)通过V$PARAMETER数据字典来查询Oracle标准数据块的大小。

(3)主要程序代码如下:

SQL> col name format a30

SQL> col value format a20

SQL> select name,value from v$parameter where name = 'db_block_size' ;

在上面的代码中,首先格式化“name”列和“value”列的大小,以方便在同一行显示,然后使用“select”语句获得参数“db_block_size”的值(即VALUE列的值),该值也就是标准数据块的大小。

举一反三

根据本实例,读者可以进行以下操作。

查看数据库中数据字典的信息。

实例014 获取Oracle的数据文件信息

这是一个可以提高基础技能的实例

实例位置:光盘\mingrisoft\01\014

实例说明

数据文件是用于保存用户应用程序数据和Oracle系统内部数据的文件,这些文件在操作系统中就是普通的操作系统文件,Oracle在创建表空间的同时会创建数据文件。本实例通过查询dba_data_files或v$datafile数据字典来了解Oracle系统的数据文件信息,程序运行结果如图1.36所示。

图1.36 获取Oracle的数据文件信息

技术要点

Oracle数据库在逻辑上由表空间组成,每个表空间可以包含一个或多个数据文件,一个数据文件只能隶属于一个表空间。

在创建表空间的同时,Oracle会创建该表空间的数据文件。在表空间中创建数据对象(如表、索引、簇等)时,用户是无法指定使用哪一个数据文件来进行存储的,只能由Oracle系统负责为数据对象选择具体的数据文件,并在其中分配物理存储空间。一个数据对象的数据可以全部存储在一个数据文件中,也可以分布存储在同一个表空间的多个数据文件中。

在读取数据时,Oracle系统首先从数据文件中读取数据,并将数据存储在内存的高速数据缓冲区中。如果用户要读取数据库中的某些数据,而请求的数据又不在内存的高速数据缓冲区中,则需要从相应的数据文件中读取数据并存储在缓冲区中。当修改和插入数据时,Oracle不会立即将数据写入数据文件,而是把这些数据保存在数据缓冲区中,然后由Oracle的后台进程DBWR决定如何将其写入到相应的数据文件。这样的存取方式减少了磁盘的I/O操作,提高了系统的相应性能。

实现过程

(1)启动SQL*Plus,以system身份连接数据库。

(2)通过查询dba_data_files或v$datafile数据字典来获取Oracle系统的数据文件信息。

(3)主要程序代码如下:

SQL> col file_name for a50;

SQL> set linesize 100;

SQL> select file_name,tablespace_name from dba_data_files;

在上面的代码中,可以看到 3 种类型的数据文件:系统数据文件(SYSTEM01.DBF 和SYSAUX01.DBF)、插销数据文件(UNDOTBS01.DBF)和用户数据文件(USERS01.DBF、EXAMPLE01.DBF、TBSP_1.DBF和TBSP_3.DBF),下面对这三种类型的数据文件进行介绍。

● 系统数据文件

用于存放“特殊”的用户数据和Oracle系统本身的数据,如用户建立的表名、列名及字段类型等,这些属于用户数据范畴,这些数据被存放在系统表空间所包含的数据文件中,而Oracle系统内部的数据字典、系统表(如dba_data_files、dba_temp_files等)中所存储的数据属于Oracle系统的内部数据,这些数据也存放在系统表空间所包含的数据文件中。

● 撤销数据文件

撤销数据文件隶属于撤销表空间。如果修改Oracle数据库中的数据,那么就必须使用撤销段,撤销段用来临时存放修改前的旧数据,而撤销段通常存放在一个单独的撤销表空间中,这个撤销表空间所包含的数据文件就是撤销数据文件。

● 用户数据文件

用户数据文件用于存放用户应用系统的数据,这些数据包括与应用系统有关的所有相关信息,比如,上面代码中的“TBSP_1.DBF”和“TBSP_3.DBF”文件就是一个具体应用系统的两个数据文件。

举一反三

根据本实例,读者可以进行以下操作。

查看Oracle临时文件的信息

实例015 查看Oracle控制文件信息

这是一个可以提高基础技能的实例

实例位置:光盘\mingrisoft\01\015

实例说明

控制文件是一个二进制文件,它记录了数据库的物理结构,其中主要包含数据库名、数据文件与日志文件的名字和位置、数据库建立日期等信息。由于控制文件存放有数据文件、日志文件等的相关信息,因此,Oracle实例在启动时必须访问控制文件。如果控制文件正常,实例才能加载并打开数据库,但若控制文件中记录了错误的信息,或者实例无法找到一个可用的控制文件,则实例无法正常启动。本实例通过查询v$controlfile数据字典来查看Oracle系统的控制文件信息,实例运行结果如图1.37所示。

图1.37 Oracle系统的控制文件信息

技术要点

当Oracle实例在正常启动时,系统首先要访问的是初始化参数文件spfile,然后Oracle为系统全局区(SGA)分配内存。这时,Oracle实例处于安装状态,并且控制文件处于打开状态。接下来Oracle会自动读出“控制文件”中的所有数据文件和日志文件的信息,并打开当前数据库中所有的数据文件和所有的日志文件以供用户访问。

每个数据库至少拥有一个控制文件,一个数据库可以同时拥有多个控制文件,但是一个控制文件只能属于一个数据库。控制文件内部除了存放数据库名及其创建日期、数据文件、日志文件等的相关信息之外,在系统运行过程中,还存放有系统更改号,检查点信息及归档的当前状态等信息。

Oracle数据库系统处于安全考虑,在安装Oracle数据库或创建数据库时,系统会自动创建两个或三个控制文件,每个控制文件记录相同的信息。这样可确保在数据库运行时,如果某个控制文件损坏,Oracle会自动使用另外一个控制文件,当所有控制文件都损坏时,系统将无法工作。

说明:当数据库的物理组成更改时,Oracle 自动更改该数据库的控制文件。数据恢复时,也要使用控制文件。

实现过程

(1)启动SQL*Plus,以system身份连接数据库。

(2)通过查询v$controlfile数据字典来查看Oracle系统的控制文件信息。

(3)主要程序代码如下:

SQL> col name format a60;

SQL> select name from v$controlfile;

举一反三

根据本实例,读者可以进行以下操作。

查看控制文件所存放的路径。

实例016 查看Oracle的日志文件信息

这是一个可以提高基础技能的实例

实例位置:光盘\mingrisoft\01\016

实例说明

日志文件的主要功能是记录对数据所作的修改,对数据库所作的修改几乎都记录在日志文件中。在出现问题时,可以通过日志文件得到原始数据,从而保障不丢失已有操作成果。如果要了解 Oracle 系统的日志文件信息,可以通过查询 v$logfile 视图来实现。实例运行结果如图 1.38所示。

图1.38 Oracle系统的日志文件信息

技术要点

Oracle 的日志文件包括重做日志文件(Redo Log File)和归档日志文件(Archive Log File),它们是Oracle系统的主要文件之一,尤其是重做日志文件,它是Oracle数据库系统正常运行所不可或缺的。下面将介绍这两种日志文件。

1.重做日志文件

重做日志文件用来记录数据库所有发生过的更改信息(如修改、添加、删除等信息)及由Oracle内部行为(如创建数据表、索引等)而引起的数据库变化信息,在数据库恢复时,可以从该日志文件中读取原始记录。在数据库运行期间,当用户执行 Commit 命令(数据库提交命令)时,数据库首先将每笔操作的原始记录写入到日志文件中,写入日志文件成功后,才把新的记录传递给应用程序,所以,在日志文件上可以随时读取原始记录以恢复某些数据。

技巧:通过对表或者整个表空间设定 NOLOGGING 属性时,使基于表或表空间中所有的DML操作(如创建表、删除视图、修改索引等操作)都不会生成日志信息,这样就会减少了日志信息的产生。

为了保障数据库系统的安全,每个Oracle实例都启用一个日志线程来记录数据库的变化。日志线程由若干“日志组”构成,而每个日志组又由一个或者多个日志文件构成。

2.归档日志文件

在所有的日志文件被写入一遍之后,LGWR进程将再次转向第一个日志组进行重新覆写,这样势必会导致一部分较早的日志信息被覆盖掉,但Oracle通过归档日志文件解决了这个问题。

Oracle数据库可以运行在两种模式下,即归档模式和非归档模式。非归档模式就是指在系统运行期间,所产生的日志信息不断地记录到日志文件组中,当所有重做日志组被写满后,又重新从第一个日志组开始覆写。归档模式就是在各个日志文件都被写满而即将被覆盖之前,先由归档进程(ARCH)将即将被覆盖的日志文件中的日志信息读出,并将“读出的日志信息”写入到归档日志文件中,而这个过程又被称为归档操作。

在归档操作进行的过程中,日志写入进程(LGWR)需要等待归档进程(ARCH)的结束才能开始覆写日志文件,这样就延迟了系统的响应时间,而且归档日志文件本身又会占用大量的磁盘空间,这些都会影响系统的整体性能。所以在默认情况下,Oracle系统不采用归档模式运行。

实现过程

(1)启动SQL*Plus,以system身份连接数据库。

(2)通过查询v$logfile视图来实现查看Oracle日志文件信息。

(3)主要程序代码如下:

SQL> col member for a50;

SQL> select member from v$logfile;

Oracle系统在运行过程中产生的日志信息,首先被临时存放在SGA(系统全局区)的“重做日志缓冲区”中,当发出Commit命令(或日志缓冲区信息满1/3)时,LGWR进程(日志写入进程)将日志信息从“重做日志缓冲区”中读取出来,并将“读取的日志信息”写入到日志文件组中序列号较小的文件里,一个日志组写满后接着写另外一个日志组。当LGWR进程将所有能用的日志文件都使用过一遍之后,它将再次转向第一个日志组重新覆写。

举一反三

根据本实例,读者可以进行以下操作。

查看当前Oracle系统是否采用归档模式

查询归档日志文件的所在路径

实例017 查看数据库中内部系统表

本实例可以方便操作、提高效率

实例位置:光盘\mingrisoft\01\017

实例说明

SYSTEM表——即系统表空间,它用于存放Oracle系统内部表和数据字典的数据,如表名、列名、用户名等。Oracle本身不赞成将用户创建的表、索引等存放在系统表空间中。表空间中的数据文件个数不是固定不变的,可以根据需要向表空间中追加新的数据文件。通过v$fixed_view_definition查看数据库中内部系统表的信息。查询后的部分结果如图1.39所示。

图1.39 查看数据库中内部系统表

技术要点

Oracle使用表空间将相关的逻辑结构(如段、数据区等)组合在一起,表空间是数据库的最大逻辑划分区域,通常用来存放数据表、索引、回滚段等数据对象(即Segment),任何数据对象在创建时都必须被指定存储在某个表空间中。表空间(属逻辑存储结构)与数据文件(属物理存储结构)相对应,一个表空间由一个或多个数据文件组成,一个数据文件只属于一个表空间。Oracle数据的存储空间在逻辑上表现为表空间,而在物理上表现为数据文件。举个例子来说,表空间相当于操作系统中的文件夹,而数据文件就相当于文件夹中的文件。每个数据库至少有一个表空间(即SYSTEM表空间),表空间的大小等于所有从属于它的数据文件大小的总和。

由于表空间在物理上(即磁盘上)包含操作系统中的一个或多个数据文件,因此在表空间中创建的数据对象就存在以下两种情况。

(1)若表空间只包含一个数据文件,则该表空间中的所有对象都存储在这个数据文件中。

(2)若表空间包含多个数据文件,则Oracle即可将数据对象存储在该表空间的任意一个数据文件中,也可以将同一个数据对象中的数据分布在表空间的多个数据文件中。

在创建数据库时,Oracle系统会自动创建多个默认的表空间,这些表空间除了用于管理用户数据的表空间之外,还包括用于管理Oracle系统内部数据(如数据字典)的表空间,除了本实例列举的SYSTEM 表空间外,Oracle 11g 版本默认创建的主要表空间还有SYSAUX 表空间,UODO表空间和USERS表空间。

实现过程

(1)启动SQL*Plus,以system身份连接数据库。

(2)通过v$fixed_view_definition查看数据库中内部系统表的信息。

(3)主要程序代码如下:

SQL> col view_name format a30

SQL> col view_definition format a30

SQL> select * from v$fixed_view_definition;

举一反三

根据本实例,读者可以进行以下操作。

通过dict查看数据库中数据字典的信息。

实例018 使用show parameter命令显示服务器参数

这是一个可以提高基础技能的实例

实例位置:光盘\mingrisoft\01\018

实例说明

服务器参数文件SPFILE(Server parameter File)是二进制文件,用来记录了Oracle 数据库的基本参数信息(如数据库名、控制文件所在路径、日志缓冲大小等)。数据库实例在启动之前, Oracle系统首先会读取SPFILE参数文件中设置的这些参数,并根据这些初始化参数来配置和启动实例。比如,设置标准数据块的大小(即参数db_block_size的值)、设置日志缓冲区的大小(即参数log_buffer的值)等,所以SPFILE参数文件非常重要。服务器参数文件在安装Oracle数据库系统时由系统自动创建,文件的名称为SPFILEsid.ora,sid为所创建的数据库实例名。

本实例使用show parameter 命令来显示服务器参数。实例运行结果如图1.40 所示。

图1.40 显示服务器参数

技术要点

用户可以通过如下两种方式查看数据库的服务器参数。

(1)查询视图V$PARAMETER,可利用该动态性能视图来确定参数的默认值是否被修改过,以及是否可以用ALTER SYSTEM 和ALTER SESSION 命令修改。

(2)可以使用SQL*Plus 的SHOW PARAMETER 命令显示服务器的参数。

本实例主要介绍第二种方法。

实现过程

(1)启动SQL*Plus,以system身份连接数据库。

(2)使用show parameter 命令来显示服务器参数。

(3)主要程序代码如下:

SQL> show parameter

举一反三

根据本实例,读者可以进行以下操作。

查询视图V$PARAMETER中的name、value和ismodified列的值。

实例019 修改服务器参数

这是一个可以提高基础技能的实例

实例位置:光盘\mingrisoft\01\019

实例说明

修改数据库的服务器参数,有两种方法,通过企业管理器(OEM)或ALTER SYSTEM 命令来实现,本例分别介绍。

技术要点

(1)通过企业管理器(OEM)修改,首先使用SYSTEM用户登录OEM,然后选择“服务器”页面中的“初始化参数”项,将打开如图1.41所示的“初始化参数”页面,在该页面的“值”列中就可以修改参数值,然后保存即可。

图1.41 OEM中的初始化参数

(2)使用ALTER SYSTEM 命令修改服务器参数。

实现过程

(1)启动SQL*Plus,以system身份连接数据库。

(2)通过ALTER SYSTEM 命令修改标准数据块的大小为4096 字节。

(3)主要程序代码如下:

SQL> alter system set db_block_size=4096

系统已更改

举一反三

根据本实例,读者可以进行以下操作。

修改标准数据块的大小。

实例020 创建一个密码文件

这是一个可以提高基础技能的实例

实例位置:光盘\mingrisoft\01\020

实例说明

Oracle系统运行时,除了必须的数据文件、控制文件、日志文件及服务器参数文件外,还需要一些辅助文件,如密码文件、警告文件和跟踪文件,本实例介绍如何创建密码文件。

技术要点

密码文件是Oracle系统用于验证sysdba权限的二进制文件,当远程用户以sysdba或sysoper连接到数据库时,一般要用密码文件验证。

Oracle 11g(这里以发行版2 为例)密码文件的默认存放位置在%dbhome_1%\database 目录下,密码文件的命名格式为PWD<sid>,其中sid表示数据库实例名。创建密码文件既可以在创建数据库实例时自动创建,也可以使用ORAPWD.EXE工具手动创建,创建密码文件的命令格式如下:

C:\>ORAPWD FILE=<filename> PASSWORD=<password> ENTRIES=<max_users>

● filename:表示密码文件名称。

● password:表示设置internal/sys 账户口令。

● max_users:表示密码文件中可以存放的最大用户数,对应允许以sysdba/sysoper 权限登录数据库的最大用户数。

创建了密码文件后,需要设置初始化参数remote_login_passwordfile来控制密码文件的使用状态,通常有3种状态值:NONE表示只要通过操作系统验证,就不用通过Oracle密码文件验证;SHARED表示多个数据库实例都可以采用此密码文件验证;EXCLUSIVE表示只有一个数据库实例可以使用此密码文件验证。

实现过程

(1)在“运行”中输入cmd命令来启动命令行窗口。

(2)创建一个密码文件,其SYS口令为012345。

(3)主要程序代码如下:

C:\>ORAPWD FILE=E:\app\Admin\product\11.2.0\dbhome_1\database\PWDorcl.ora password=012345 entries=40

举一反三

根据本实例,读者可以进行以下操作。

创建一个密码文件,其SYS口令为111111。

实例021 查看当前实例的警告文件的路径

这是一个可以提高基础技能的实例

实例位置:光盘\mingrisoft\01\021

实例说明

本实例介绍如何查看当前实例的警告文件的路径。

技术要点

警告文件(即警告日志文件)是一个存储在 Oracle 系统目录下的文本文件(名称通常为alert_orcl.log),它用来记录Oracle系统在运行信息和错误信息。运行信息一般包括Oracle实例的启动与关闭、建立表空间、增加数据文件等,错误信息包括空间扩展失败、启动实例失败等。

当Oracle系统安装完毕后,其实例日常运行的基本信息都会记录在警告文件中。警告文件的路径可通过Oracle系统的'background_dump_dest参数值来查看,并且该参数值由服务器进程和后台进程写入。

注意:随着时间的推移,警告文件会越来越大,数据库管理员应该定期删除警告文件。

实现过程

(1)启动SQL*Plus,以system身份连接数据库。

(2)在v$parameter视图中查看当前实例的警告文件的路径。

(3)代码及运行结果如下:

SQL> col name for a20;

SQL> col value for a50;

SQL> select name, value from v$parameter where name = 'background_dump_dest';

NAME   VALUE

--------------------    ------------------------------------------------

background_dump_dest e:\app\administrator\diag\rdbms\orcl\orcl\trace

举一反三

根据本实例,读者可以进行以下操作。

删除警告文件。

实例022 查看当前实例的用户跟踪文件的路径

这是一个可以提高基础技能的实例

实例位置:光盘\mingrisoft\01\022

实例说明

本实例介绍如何查看当前实例的用户跟踪文件的路径。

技术要点

跟踪文件包括后台进程跟踪文件和用户进程跟踪文件。后台进程跟踪文件用于记录后台进程的警告或错误消息。后台进程跟踪文件的磁盘位置由初始化参数 BACKGROUND_DUMP_DEST 确定,后台进程跟踪文件的命名格式为<sid>_<processname>_<spid>.trc,例如:orcl_cjq0_5172.trc。用户进程跟踪文件用于记载与用户进程相关的信息,它主要用于跟踪 SQL语句。通过用户进程跟踪文件,可以判断SQL语句的执行性能。用户进程跟跟踪文件的位置由初始化参数 user_dump_dest 确定,用户进程跟踪文件的命名格式为<sid>_ora_<spid>.trc,如orcl_ora_4888.trc。

说明:每个后台进程都有对应的后台进程跟踪文件。

实现过程

(1)启动SQL*Plus,以system身份连接数据库。

(2)在v$parameter视图中查看当前实例的用户跟踪文件的路径。

(3)代码及运行结果如下:

SQL> select value from v$parameter where name = 'user_dump_dest';

VALUE

-------------------------------------------------

e:\app\administrator\diag\rdbms\orcl\orcl\trace

举一反三

根据本实例,读者可以进行以下操作。

查看后台进程跟踪文件。

实例023 修改Oracle大型池的缓存区

这是一个可以提高基础技能的实例

实例位置:光盘\mingrisoft\01\023

实例说明

系统全局区(System Global Area)是所有用户进程共享的一块内存区域,也就是说,SGA中的数据资源可以被多个用户进程共同使用。SGA主要由高速数据缓冲区、共享池、重做日志缓存区、java池和大型池等内存结构组成。SGA随着数据库实例的启动而加载到内存中,当数据库实例关闭时,SGA 区域也就消失了。本实例主要介绍大型池(Large pool),要求修改Oracle大型池的缓存区大小为16m。

技术要点

大型池在SGA区中不是必须的内存结构,只在某些特殊情况下,实例需要使用大型池来减轻共享池的访问压力,常用的情况有以下几种。

● 当使用恢复管理器进行备份和恢复操作时,大型池将作为I/O 缓冲区使用。

● 使用I/O Slave 仿真异步I/O 功能时,大型池将被当作I/O 缓冲区使用。

● 执行具有大量排序操作的SQL 语句。

● 当使用并行查询时,大型池作为并行查询进程彼此交换信息的地方。

大型池的缓存区大小是通过LARGE_POOL_SIZE 参数定义的,在Oracle 11g 中,用户可以使用alter system命令动态地修改其缓存区的大小。

注意:如果在SGA区中没有设置大型池,则在实例需要时,Oracle系统会在共享池或PGA中分配一定的缓存空间,这样势必会影响到共享池或PGA的工作效率。

实现过程

(1)启动SQL*Plus,以system身份连接数据库。

(2)使用alter system命令修改Oracle 大型池的缓存区大小为16m。

(3)代码及运行结果如下:

SQL> alter system set large_pool_size = 16m;

系统已更改。

SQL> show parameter large_pool_size;

NAME       TYPE  VALUE

------------------------------------      -----------  ------------

large_pool_size       big integer 16M

举一反三

根据本实例,读者可以进行以下操作。

通过修改参数SHARED_POOL_SIZE的值,修改Oracle共享池的内存空间大小为30m。

实例024 使用Oracle数据字典

本实例可以方便操作、提高效率

实例位置:光盘\mingrisoft\01\024

实例说明

数据字典是Oracle存放关于数据库内部信息的地方,其用途是用来描述数据库内部的运行和管理情况。比如,一个数据表的所有者、创建时间、所属表空间、用户访问权限等信息,这些信息都可以在数据字典中查找到。当用户操作数据库遇到困难时,就可以通过查询数据字典来提供帮助信息。本实例要求使用数据字典dba_ts_quotas查询所有用户表空间限额,运行结果如图1.42所示。

图1.42 使用Oracle数据字典

技术要点

Oracle数据字典的名称由前缀和后缀组成,使用下划线“_”连接,其代表的含义如下。

● DBA_:包含数据库实例的所有对象信息。

● V$_:当前实例的动态视图,包含系统管理和系统优化等所使用的视图。

● USER_:记录用户的对象信息。

● GV_:分布式环境下所有实例的动态视图,包含系统管理和系统优化使用的视图。

● ALL_:记录用户的对象信息机被授权访问的对象信息。

虽然通过 Oracle 企业管理器(OEM)操作数据库比较方便,但它不利于读者了解 Oracle系统的内部结构和应用系统对象之间的关系,所以建议读者尽量使用SQL*Plus来操作数据库。为了使读者方便了解Oracle系统内部的对象结构和进行高层次的数据管理,下面给出最常用的数据字典及其说明。

1.基本数据字典

基本数据字典主要包括描述逻辑存储结构和物理存储结构的数据表,另外,还包括一些描述其他数据对象信息的表,如 dba_views、dba_triggers、dba_users 等。基本数据字典及其说明如表1.2所示。

表1.2 基本数据字典及其说明

续表

2.常用动态性能视图

Oracle系统内部提供了大量的动态性能视图,之所以说是“动态”,是因为这些视图的信息在数据库运行期间会不断地更新。动态性能视图以 v$作为名称前缀,这些视图提供了关于内存和磁盘的运行情况,用户只能进行只读访问而不能修改它们。常用的动态性能视图及其说明如表1.3所示。

表1.3 常用动态性能视图

上面介绍了Oracle数据字典的基本内容,实际上Oracle数据字典的内容非常丰富,这里因篇幅有限,不能一一列举,需要读者在学习和工作中逐渐积累。运用好数据字典技术,可以使用户能够更好地了解数据库的全貌,这样对于数据库优化、管理等有极大的帮助。

注意:Oracle 数据字典是一个不断发展和变化的内部表,读者在参考某些资料时,要注意所使用的数据库版本是否与资料内容一致。

实现过程

(1)启动SQL*Plus,以system身份连接数据库。

(2)使用数据字典dba_ts_quotas查询所有用户表空间限额。

(3)主要程序代码如下:

SQL> col segment_name for a30;

SQL> col tablespace_name for a30;

SQL> select tablespace_name,username,bytes from dba_ts_quotas;

举一反三

根据本实例,读者可以进行以下操作。

通过数据字典查询当前进程的信息。

通过数据字典查询关于数据库文件的信息。

通过数据字典查询数据库中所有数据表的描述。

实例025 查询当前实例进程信息

这是一个可以提高基础技能的实例

实例位置:光盘\mingrisoft\01\025

实例说明

从V$BGPROCESS数据字典中查询当前实例进程信息。实例运行结果如图1.43所示。

图1.43 当前实例进程信息

技术要点

Oracle后台进程是一组运行于Oracle服务器端的后台程序,是Oracle实例的重要组成部分,这组后台进程有若干个,它们分工明确——分别完成不同的系统功能,如图 1.44 所示。其中SMON、PMON、DBWR、LGWR和CKPT这5个后台进程必须正常启动,否则将导致数据库实例崩溃。此外,还有很多辅助进程,用于实现相关的辅助功能,如果这些辅助进程发生问题,只是某些功能受到影响,一般不会导致数据库实例崩溃。

图1.44 主要后台进程

● 数据写入进程(DBWR)

数据写入进程的主要任务是负责将内存中的“脏”数据块回写到数据文件中。所谓的“脏”数据块是指高速数据缓冲区中的被修改过的数据块,这些数据块的内容与数据文件的数据块内容不一致。但DBWR并不是随时将所有的“脏”数据块都写入数据文件,只有满足一定的条件时,DBWR进程才开始成批量地将“脏”数据块写入数据文件,Oracle这样做的目的是为了尽量减少I/O操作,提高Oracle服务器性能。通常在以下几种情况发生时,DBWR进程会将“脏”数据块写入到数据文件。

当用户进程执行插入或修改等操作时,需要将“新数据”写入到高速数据缓冲区,如果在高速数据缓冲区中没有找到足够用的空闲数据块来存放这些“新数据”,这时,Oracle系统将启动DBWR进程并将“脏”数据块写入到数据文件,以获得空闲数据块来存储这些“新数据”。

检查点进程启动后,它会强制要求DBWR将某些“脏”数据块写入到数据文件中。

当“脏”数据块在高速数据缓冲区中存放超过3秒钟,DBWR进程会自行启动并将某些“脏”数据块写入到数据文件中。

在某些比较繁忙的应用系统中,可以修改服务器参数文件 SPFILE 的 DB_WRITER_PROCESSES参数,以允许使用多个DBWR进程。但是DBWR进程的数量不应当超过系统处理器的数量,否则多余的DBWR不但无法发挥作用,反而会耗费系统资源。

● 检查点进程(CKPT)

检查点进程可以看做是一个事件,当检查点事件发生时,CKPT会要求DBWR将某些“脏”数据块回写到数据文件。当用户进程发出数据请求时,Oracle系统从数据文件中读取需要的数据并存放到高速数据缓冲区中,用户对数据的操作是在缓冲区中进行的。当用户操作数据时,就会产生大量的日志信息并存储在重做日志缓冲区,当Oracle系统满足一定条件时,日志写入进程(LGWR)会将日志信息写入到重做日志文件组中,当发生日志切换时(写入操作正要从一个日志文件组切换到另一组时),就会启动检查点进程。

另外,DBA还可以通过修改初始化参数文件SPFILE中的CHECKPOINT_PROCESS参数为TRUE来启动检查点进程。

● 日志写入进程(LGWR)

日志写入进程用于将重做日志缓冲区中的数据写入到重做日志文件。Oracle系统首先将用户所做的修改日志信息写入日志文件,然后再将修改结果写入数据文件。

Oracle实例在运行中会产生大量日志信息,这些日志信息首先被记录在SGA的重做日志缓冲区中,当发生提交命令、或者重做日志缓冲区的信息满 1/3、或者日志信息存放超过 3 秒钟时,LGWR 进程就将日志信息从重做日志缓冲区中读出并写入日志文件组中序号较小的文件中,一个日志组写满后接着写另外一组。当LGWR进程将所有的日志文件都写过一遍之后,它将再次转向第一个日志文件组重新覆盖,如图1.45所示。当LGWR进程写满一个日志文件组而转向写另外一组时,我们称之为日志切换。

图1.45 通过LGWR写日志文件

● 归档进程(ARCH)

归档进程是一个可选择的进程,只有当Oracle数据库处于归档模式时,该进程才可能起到作用。若Oracle数据库处于归档模式,当各个日志文件组都被写满而即将被覆盖之前,先由归档进程(ARCH)把即将被覆盖的日志文件中的日志信息读出,然后再把这些“读出的日志信息”写入到归档日志文件中,如图1.46所示。

图1.46 通过ARCH写归档文件

当系统比较繁忙而导致LGWR进程处于等待ARCH进程时,可通过修改LOG_ARCHIVE_MAX_PROCESSES参数启动多个归档进程,从而提高归档写磁盘的速度。

● 系统监控进程(SMON)

系统监控进程是在数据库系统启动时执行回复工作的强制性进程。比如,在并行服务器模式下,SMON 可以对其他处于失败的数据库做出响应,使系统切换到另外一台正常的服务器上。

● 进程监控进程(PMON)

进程监控进程用于监控其他进程的状态,当有进程启动失败时,PMON会清除失败的用户进程,释放用户进程所用的资源。

● 锁进程(LCKN)

这是一个可选进程,并行服务器模式下可以出现多个锁定进程以利于数据库通信。

● 恢复进程(RECO)

这是在分布式数据库模式下使用的一个可选进程,用于数据不一致时进行恢复工作。

● 调度进程(DNNN)

这是一个可选进程,在共享服务器模式下使用,可以启动多个调度进程。

● 快照进程(SNPN)

快照进程用于处理数据库快照的自动刷新,并通过DBMS_JOB包运行预定的数据库存储过程。

以上讲解了Oracle 11g 中的若干个典型进程,不同版本Oracle 的后台进程也不同,默认情况下,Oracle 11g 会启动200 多个后台进程。

实现过程

(1)启动SQL*Plus,以system身份连接数据库。

(2)从V$BGPROCESS数据字典中查询当前实例进程信息。

(3)主要程序代码如下:

SQL> set pagesize 50;

SQL> select name,description from v$bgprocess;

举一反三

根据本实例,读者可以进行以下操作。

显示当前用户进程的PGA信息

实例026 查询数据库所有段的存储空间

本实例可以方便操作、提高效率

实例位置:光盘\mingrisoft\01\026

实例说明

本实例实现了查询数据库所有段的存储空间的功能。查询后的部分结果如图1.47所示。

图1.47 查询数据库中所有段的存储空间信息

技术要点

查询数据库中段的存储空间信息,需要使用数据字典dba_segments,该数据字典用于描述数据库中所有段的存储空间。具体实现时,可以使用“desc dba_segments”命令查看该数据字典的数据结构,比如选择segment_name、bytes和tablespace_name3个字段,它们分别表示“段的名称、段的大小,段所在的表空间”,另外,为了使显示效果更加美观,可以使用col命令对各个字段进行格式化。

实现过程

(1)启动SQL*Plus,以system身份连接数据库。

(2)使用数据字典dba_segments查询数据库所有段的存储空间。

(3)主要程序代码如下:

SQL> col segment_name for a30;

SQL> col tablespace_name for a30;

SQL> select segment_name,bytes,tablespace_name from dba_segments;

举一反三

根据本实例,读者可以进行以下操作。

查询数据库中所有段的段的名称。

实例027 查询数据库所使用的数据文件

本实例可以方便操作、提高效率

实例位置:光盘\mingrisoft\01\027

实例说明

本实例实现了查询数据库所使用的数据文件的功能。查询后的部分结果如图1.48所示。

图1.48 查询数据库所使用的数据文件信息

技术要点

查询数据库所使用的数据文件信息,需要使用动态性能视图v$datafile,该视图用于描述数据库所使用的数据文件信息。具体实现时,可以使用“desc v$datafile”命令查看该视图的数据结构,比如选择name和bytes两个字段,它们分别表示“数据文件名称和字节大小”,另外,为了使显示效果更加美观,可以使用col命令对各个字段进行格式化。

实现过程

(1)启动SQL*Plus,以system身份连接数据库。

(2)使用动态性能视图v$datafile描述数据库所使用的数据文件信息。

(3)主要程序代码如下:

SQL> col name for a50;

SQL> select name,bytes from v$datafile;

举一反三

根据本实例,读者可以进行以下操作。

查询数据库所使用的数据文件的名称。

查询数据库所使用的数据文件的字节大小。