

开始学习吧~

创建和使用数据库
创建数据库一般有两种方法:
1. 使用图形界面工具数据库配置助手DBCA(Database Configuration Assistant);2. 使用Create Database语句,这是一种基于命令行的方式。
3.1.1 界面方式创建数据库
1. 数据库的创建
在Oracle中,以界面方式创建数据库主要使用数据库配置向导DBCA(Database Configuration Assistant)来完成。
下面使用DBCA创建学生成绩管理数据库XSCJ,步骤如下:
(1) 启动DBCA,出现“欢迎使用”界面,如图3.1.1所示,单击“下一步”按钮进入创建数据库的向导。
(2) 在“操作”窗口中,用户可以选择要执行的操作,这里选中“创建数据库”选项,如图3.1.2所示,单击“下一步”按钮。
(3) 在“数据库模板”窗口中,选择相应选项后单击“显示详细资料”按钮可查看该数据库模板的各种信息。这里选择“一般用途或事务处理”选项,如图3.1.3所示,单击“下一步”按钮。
(4) 在“数据库标识”窗口中输入“全局数据库名”和“SID”,如图3.1.4所示,单击“下一步”按钮。
说明:
1.SID是数据库实例的唯一标识符,创建系统服务和操作数据库时都需要用到。
2.SID在同一数据库服务器中必须是唯一的。
(5) 在“管理选项”窗口中可选择配置Enterprise Manager企业管理器或配置Database Control管理本地数据库,这里保持默认设置,如图3.1.5所示,单击“下一步”按钮。
(6) 在“数据库身份证明”窗口中,将所有账户设置为同一管理口令(Mm123456),如图3.1.6所示,单击“下一步”按钮。
注:Oracle主目录用户口令,是指安装Oracle时设定的数据库系统管理口令。
(7) 在“数据库文件所在位置”窗口中,选择“所有数据库文件使用公共位置”,单击“浏览”按钮选择数据库文件的存放路径,如图3.17所示,单击“下一步”按钮。
(8) 在“恢复配置”窗口中采取默认的配置,单击“下一步”按钮继续。
(9) 在“数据库内容”窗口中勾选“示例方案”,如图3.1.8所示,这样就可以在学习的过程中参考标准设置,也可了解基础的数据库创建方法和SQL语言。
如果你有SQL脚本,还可以在这一步加载,系统会根据脚本在这个数据库中创建用户、表空间、表、权限等,但要注意,加载SQL脚本的先后顺序一定要正确,这里暂不加载脚本,直接单击“下一步”按钮。
(10) 在“初始化参数”和“数据库存储”窗口中也保持默认配置,两次单击“下一步”按钮。
(11) 在“创建选项”窗口中选择“创建数据库”选项,如图3.1.9所示,单击“完成”按钮,之后会弹出确认创建的对话框,单击“确定”按钮开始创建数据库。
(12) 图3.1.9 “数据库内容”窗口创建数据库期间显示的创建进度窗口如图3.11所示,过程较为漫长,其间进度条也会在几个点上时间停滞不前,但这并不是死机(请勿关闭程序或重启!),读者需要耐心地等待……
(13) 创建数据库完毕后,系统会弹出窗口显示相关的提示信息,如图3.12所示,需要在这一步解锁SCOTT、SYSTEM、SYS账户并设置其口令,单击窗口中的“口令管理”按钮,弹出“口令管理”对话框。
(14) 单击“完成”窗口中的“口令管理”按钮,弹出“口令管理”对话框,如图3.1.13所示。
找到用户名SCOTT,为其设置新口令为Mm123456,该口令用于后面登录和操作数据库,请读者务必牢记!
至此,所有步骤都已经全部完成,单击“确定”按钮回到“完成”窗口,单击“关闭”按钮即可。
现在,系统服务中应该已经有SID为XSCJ有服务选项,并且已置为“自动”启动,服务正在运行,如图3.1.14所示,访问XSCJ数据库前必须保证已启动了这两个系统服务: Oracle OraDB12 Home1TNSListener 和 Oracle Service XSCJ。
2. 数据库的修改
当创建一个数据库时,把数据库分成叫做表空间(ablespace)的多个逻辑区段。SYSTEM、SYSAUX、USERS等表空间是Oracle系统默认创建的表空间,然后创建另外的表空间以分别存储不同类型的数据。
创建表空间时,会相应地创建数据文件(datafile)以存储数据,这些文件被立即分配在它们创建时指定的表空间。因此,在数据库与表空间之间就存在着一对多的关系,并且在表空间与数据文件之间也存在一对多的关系。
在数据库创建后,数据文件和日志文件名一般就不再改变了。对已存在的数据库可以进行的修改主要有以下几个方面。
(1) 增加或删除数据文件
(2) 改变数据文件的大小和增长方式
(3) 改变日志文件的大小的增长方式
在Oracle中,使用命令方式创建数据库的过程非常复杂,因此应尽量使用DBCA来创建数据库。
1. 创建数据库
(1)要根据应用程序的需求建立一个相应能满足要求的数据库。
创建数据库的主要步骤如下:
① 通过应用情况设计和决定数据库的内容。
② 设计数据库的结构使得数据库内容紧凑和减少碎片(初步创建时可使用默认设置)。
③ 安装时事先定好ORACLE用户的环境变量,主要有:ORACLE_SID、ORACLE_HOME和相关的路径设置。
④ 从标准例子的init.ora文件中拷贝和编辑参数文件。必须配置的参数有db_name(数据库名称)、control_files(控制文件名称和位置,可以有多个)和重做日志文件个数等等,其它各项可以在安装数据库时设置成默认参数。
⑤ 具体有以下参数值得重视:
Db_block_size:该参数设置ORACLE数据库Database Block的大小,它代表ORACLE数据库数据存取的最小单位,最好是操作系统块大小的整数倍为宜,较大的设置值可以减少大量存取数据的时间,但会浪费磁盘空间,该参数在创库时一旦设置,便不能更改,除非重新创建数据库,一般设置大小:4096或8192。
Db_block_buffers:该参数设置Oracle数据库内存缓冲区块的个数,该参数和Db_block_size的乘积即为整个数据高速缓冲区Database Buffer Cache的大小,该值要根据系统物理内存情况设置成一个比较大的数。
Log_checkpoint_timeout:该参数设置距上次触发checkpoint事件过多少秒后触发下一次checkpoint事件,该值设大可以减少磁盘I/O的频繁程度,推荐设置(缺省设置):1800[秒]。
Log_buffer:该参数设置Redo Log Buffer的大小,设大该值,可以减少Redo日志文件磁盘I/O。
nls_language:该参数设置国家语言有关的各种NLS数据显示格式参数,推荐设置:“SIMPLIFIED CHINESE”。
nls_territory:该参数设置国家惯例有关的各种NLS数据显示格式参数,推荐设置:“CHINA”。
shared_pool_size:该参数主要包含共享SQL池、字典高速缓冲区,设大该值可以增加运行SQL语句和数据字典在内存中的占有率,以此增加数据库SQL语句的执行效率,推荐设置较大的值。
2. 设定实例标识符
一般情况下,每个Oracle数据库都必须对应一个数据库实例。所以在建立数据库之前,必须先指定数据库实例的系统标识符,此系统标识符俗称的SID。SID可用以识别不同的Oracle数据库,因此SID名称必须是唯一的,可经由操作系统的环境变量ORACLE_SID设定。
在如图3.1.23所示的“命令提示符”界面中,使用如下命令设定SID:
SET ORACLE_SID=mydb |
|
3. 设定数据库管理员的验证方法
为了创建数据库,必须经过数据库的验证手续,且被赋予适当系统权限后才可以建立,Oracle数据库。可以使用密码文件或操作系统的验证方法。
下面给出的是密码文件验证方法。
Orapwd file=D:\Oracle\oradata\DATABASE\PWDmydb.ora Password=123456 entries=5 |
4. 创建初始化参数
对于任何一个Oracle数据库,实例(系统全局区SGA和后台进程)都是从使用初始化参数文件开始的。为了使操作更加简单,使用默认的名称将初始化参数文件存储在Oracle的默认路径中。这样,当启动数据库时,Oracle在默认路径寻找初始化参数文件因此就不必指定PELE参数。
以下是创建新数据库之前必须新增或编辑的初始化参数。
① 全局数据库名称
Oracle 11g全局数据库名称由数据库名称与网域名称组成,数据库名称和网域名称分别由DB_NAME与DB_DOMAIN参数设定。这两个参数合并之后就可以在网际网络上唯一识别每一个Oracle 11g数据库。
DB_NAME必须是ASCII字符,且不能超过8个字符。在创建数据库的过程中,DB_NAME设定值会记录在数据文件、控制文件以及重做日志文件中。如果激活Oracle实例的时候,初始化参数文件中设定的DB_NAME值不同于控制文件中所记录的值,那么数据库。
在此设置这两个参数如下:将无法激活
DB_NAME=mydb DB_domain=“” |
② 控制文件名称与路径
控制文件是Oracle数据库中相当重要的文件。因此必须在新的初始化参数文件内加入CONTROL_FILE参数以设定控制文件的名称以及路径。
当执行CREATE DATABASE命令时,列在CONTROL_FILE参数指定的控制文件将随之建立。如果初始化参数文件忽略了此参数,则Oracle会在执行CREATE DATABASE命令时自动建立控制文件并命名,然后放在系统默认路径下。如果CONTROL_NAME内设定的控制文件已经存在,那么,Oracle会自动覆盖既有的控制文件。如果想建立全新的控制文件,请确定CONTROL_NAME设定的控制文件名不会与操作系统下任何文件名重复。
建议为每个数据库至少规划两个控制文件,并分散在两个实体磁盘上。如此可避免任一个控制文件毁损时造成系统停摆。
③ 数据块大小
Oracle数据库存放数据的最小单位为数据块(data block)。数据库标准数据块大小设定在初始化参数文件的DB_BLOCK_SIZE设定值为基础所建立的。此外DB_BLOCK_SIZE也是建立新表空间时预设的数据块大小。除了标准数据块大小之外,Oracle支持额外四种非标准数据块大小。
从Oracle 9!开始,DB_BLOCK_SIZE所设定的仅是标准数据块大小;绝大多数的数据库环境只需要设定该参数即可。一般来说,DB_BLOCK_SIZE可设定为4KB或8KB。如果此参数未经设定,则Oracle会自动依照数据库所在操作系统自动决定适当的数据块大小。
需要注意的是,标准数据块大小在数据库建立之后就无法改变,除非重建数据库。如果数据库的数据块大小不同于操作系统区块大小,那么建议将DB_BLOCK_SIZE设为操作系统区块大小的整数倍。假定操作系统区块大小为4KB,则不妨设定DB_BLOCK_SIZE=8192。在某些情况下,这样配置方法将会显著地提升数据存取效率。
非标准数据块大小设定值可为2KB、4KB、8KB、16KB或32KB。需注意的是这种类型的数据块将受到操作系统环境限制,不是所有操作系统都可以设定上述所有区块大小的。若要使用非标准数据块时,还必须适当配置SGA内数据库缓冲区的子缓冲区,其方式是由DB_Nk_CACHE_SIZE参数来设定的。
数据块大小设置如下:
DB_BLOCK_SIZE=8192 |
④ 影响SGA容量的初始化参数
这种类型的初始化参数将控制系统全局区SGA的大小。
● 设定数据库缓冲区大小。Oracle数据库缓冲区大小是由初始化参数文件DB_CACHE_SIZE参数决定的。数据库缓冲区以标准数据块存取单位。如果设定一组DB_BLOCK_SIZE与DB_nk_CACHE_SIZE参数,则可在Oracle数据库中实现使用多重数据块大小。如果上述两项参数在初始化参数文件中没有明确设定,则Oracle会自动设定适当的DB_CACHE_SIZE值,且将DB_nk_CACHE_SIZE设定为0。
【例1】缓冲区大小设置如下:
DB_CACHE_SIZE=20M DB_2K_CACHE_SIZE=10M DB_8K_CACHE_SIZE=8M |
注意:
DB_nk_CACHE_SIZE参数不能设定为标准数据块的缓冲区大小,也就是说,如果DB_CACHE_SIZE设定为4KB,就不能再设定DB_4K_CACHE_SIZE参数。
● 设定共享池和大型池容量。SGA内的共享池(Shared Pool)与大型池(Large Pool)分别由SHARED_POOL_SIZE与LARGE_POOL_SIZE所设定。这两个参数都属于动态参数。如果初始化参数文件未设定这两个参数,则Oracle 9!将自动决定其适当大小。
在设定SGA时需要注意,SGA最大容量由SGA_MAX_SIZE控制。可动态地改变该参数值,但是需注意SGA_MAX_SIZE是数据库缓冲区、共享池、大型池以及其他SGA组件的容量总和。各区域之大小不能超过SGA_MAX_SIZE。如果SGA_MAX_SIZE未设定,则Oracle会自动将SGA_MAX_SIZE设定为所有SGA组件大小的总和。
⑤ 设定处理程序最大数目
初始化参数PROCESSES可决定同时连接Oracle的操作系统程序最大数量。
⑥ 设定空间撤销(Undo)管理方法
Oracle就某种特殊机制来确保数据一致性和完整性,以便必要时回滚(orllback)失败的数据,或是撤销(undo)某个数据处理动作。Oracle将这些信息统称为撤销项目(undo entries)。Oracle的撤销项目存放在撤销表空间(undo tablespace)或回滚段(rollback segments)。
针对撤销项目的管理,初始化参数文件的UNDO_MANAGEMENT可设定由下列方式之一激活Oracle实例。
● AUTO:以“自动撤销管理模式”激活Oracle实例,其撤销项目将储存于撤销表空间。
● MANUAL:以“手动模式”激活Oracle实例,其撤销项目将储存于回滚段。为了向前兼容,UNDO_MANAGEMETN的默认值为MANUAL。
也就说,所要创建的数据库的全局数据库名称为mydb。
5. 启动SQL*Plus并以SYSDBA连接到Oracle实例
Sqlplus/nolog Connect system/123456 as sysdba |
6. 启动实例
在没有装载数据库情况下启动实例,通常只有在数据库创建期间或在数据库上实施维护操作时才会这么做。
使用带有NOMOUNT选项的STARTUP命令即可实现。
STARTUP NOMOUNT pfile=”D:\app\tao\mydb\pfile\initmydb.ora” |
此时,还没有数据库。在准备创建新数据库的过程中,仅仅创建了系统全局区(SGA),并且后台进程才刚开始。
7. 创建初始化参数
在Oracle中创建数据库时,需使用CREATE DATABASE语句,创建前要确保用户具备创建数据库的权限。
【例2】使用CREATE DATABASE语句创建数据库mydb。
CREATE DATABASE mydb MAXINSTANCES 1 MAXDTAFILES 100 DATAFILE ‘D:\ app\tao\oradta\mydb\users01.dbf’ SIZE 500M AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED UNDO TABLESPACE UNDOTBS DATAFILE ‘D:\ app\tao\oradta\mydb\users01.dbf’ SIZE 150M REUSE AUTOEXTEND ON NEXT 50M MAXSIZE UNLIMTED CHARACTER SET ZHS16GBK NATIONAL CHARACTER SET AL16UTF16 LOGFILE ‘D:\app\tao\oradta\mydb\users01.log’SIZE 100M, ‘D:\app\tao\oradta\mydb\users01.log’SIZE 100M, ‘D:\app\tao\oradta\mydb\users01.log’SIZE 100M, MAXLOGHISTORY 1 MAXLOGFILES 5 MAXLOGMEMBERS 5 |
上面创建的数据库具有以下主要特点。
(1)数据库名称为mydb,全局数据库名称也为mydb。
(2)设置MAXINSTANCES参数只能有一个实例可以装载和打开数据库。
(3) DATAFILE 子句设定该数据库SYSTEM表空间所对应的操作系统文件为
‘D:\ app\tao\oradta\mydb\users01.dbf’。假如该文件已事先存在,将被覆盖。
(4)UNDO_TABLESPACE子句创建并命名撤销表空间UNDOTBS,用于存储撤销记录。
(5)ZHS16GBK为数据库存放数据的字符集,它支持中文。
(6)新数据库拥有三个重做日志文件,分别在LOGFILE子句中设定。
MAXLOGHISTORY、MAXLOGFILES和MAXLOGMEMBERS选项为重做日志文件的相关设定。
(7)新数据库的时区与操作系统的时区相同。
1. 修改数据库
数据库创建之后,可以使用ALTER DATABASE语句来修改数据库的某些设置。
语法格式如下:
ALTER DATABASE database_name |[ARCHIVELOG | NOARCHIVELOG] |[NO]FORCE LOGGING |RENAME FILE ‘filename’[,...n]TO‘re_filename’[,...n] |CREATE DATAFILE‘data_filename’ [AS{‘filename’[SIZE integer[K|M|G|T]][REUSE]] [,...n]} |NEW] |DATAFILE‘filename’{ONLINE | OFFLINE[FOR DROP] | RESIZE integer [K|M|G|T] |END BACKUP | AUTOEXTEND{OFF | ON[NEXT integer[K | M]] [MAXSIZE UMLIMITED | integer[K | M]]]]}} |ADD LOGFILE‘filename’[SIZE integer K | M |G | T]][REUSE]][,...n] |DROP LOGFILE‘filename’ | ...; |
说明:
(1)RENAEM FILE:重命名数据文件、临时文件或重做日志文件成员。该子句只在控制文件中对文件重命名,而不在操作系统上对其真正重命名。在指定该子句前,必须按操作系统对文件名的约定指定每个文件名。
(2)CREATE DATAFILE:创建新的空数据文件替代旧数据文件。可用该子句重新创建没有备份丢失的数据文件。data_filename须同作为或曾作为数据库部分的一个文件。AS子句指定新数据文件的名字和大小。如果忽略AS子句,Oracle用data_filename定义的名字和大小创建文件。
(3)DATAFLIE:对数据文件有如下影响。
ONLINE:使数据文件联机。
ONLINE:使数据文件脱机。
FOR DROP:数据库在NOARCHIVELOG模式时使数据文件脱机。
RESIZE:将数据文件增加或减少到指定的绝对大小。
AUTOEXTEND OFF/ON:允许或禁止自动扩展。
END BACKUP:在联机表空间备份。
(4)ADD LOGFILE:添加重做日志文件。
(5)DROP LOGFILE:删除重做日志文件。
其他参数和关键字CREATE DATABASE的参数和关键字的含义相同,请参照对CREATE DATABASE参数和关键字的说明。
【例3】数据库的归档模式和数据文件。
使上面创建的数据库mydb切换到归档模式。
ALTER DATABASE mydb ARCHIVELOG |
创建新的数据文件以代替原来的数据文件。
ALTER DATABASE mydb CREATE DATAFILE‘users’AS‘D:\ app\tao\oradta\mydb\users01.dbf’ SIZE 50M REUSE AUTOEXTEND ON NEXT 20M MAXSIZE 500M; |
在执行了上例的ALTER DATABASE命令之后,创建了一个初始大小为50MB的数据文件。在该数据文件被填满后,它按20MB大小进行自我扩展,这个扩展持续到文件已达到500M。
【例4】使用ALTER DATABASE命令来手工扩展users01数据文件。
ALTER DATABASE mydb DATAFILE‘D:\ app\tao\oradta\mydb\users01.dbf’RESIZE 200M; |
在执行上例所示的ALTER DATABASE命令之后,指定的文件users01被重新设定为200MB。
【例5】使用ALTER DATABASE命令修改XSCJ的字符集。
ALTER DATABASE XSCJ CHARACTER SET SIMPLIFIED CHINESE_ZHSI6GBK; |
2. 删除数据库
删除数据库使用DROP DATABASE命令。
语法格式:
DROP DATABASE database_naem; |
其中database_naem是要删除的数据库名。
【例6】删除数据库mydb。
DROP DATABASE mydb; |
注意:使用DROP DATABASE语句将删除数据库中的所有数据文件,要小心使用。
3.1.4 Oracle数据库的使用
1. 监听器的启动与关闭
监听器的启动有两种方式:
方法1:在命令行直接启动监听器
(1)“cmd”命令打开命令行窗口。
(2) lsnrctl start <监听器名称>
方法2:打开监听器管理控件后,再启动监听器
(1) 使用cmd打开Windows操作系统的命令行窗口。
(2) 执行lsnrctl命令启动监听器控件。
(3) LSNRCTL>start Listener
如果要关闭监听器,可以在操作系统命令行窗口中输入“lsnrctl stop<监听器的名称>”执行关闭操作,如果执行lsnrctl stop命令(没有指定监听器的名称),则将关闭默认的监听器,即关闭listener。如图4.18所示。
|
图3.1.24 命令窗口 |
1. Oracle数据库与例程的关系
每一个启动的数据库至少对应一个例程(实例)。
(1) 什么是例程
是Oracle运行进程和分配内存的组合体。它由一逻辑内存和一系列后台服务进程组成。
(2) 例程作用
启动数据库时,内存结构和服务进程得到分配、初始化和启动。
(3) 例程目的
使用Oracle管理数据库,使用户可以与数据库之间进行通信。
3. Oracle数据库的启动
启动Oracle数据库需要主要执行三个操作步骤:
(1) 启动实例
启动实例即在内存中构建实例,包括读取参数文件、分配SGA和启动后台进程等操作。
(2) 装载数据库
装载数据库是将数据库与已启动的实例相联系,数据库装载后,数据库保持关闭状态。
(3) 打开数据库
打开数据库主要是打开控制文件、数据库文件和日志文件。
必须保证数据库某种一致性、可用性、安全性的操作状态
Oracle数据库的启动可以通过多种工具来完成,包括【Windows服务】窗口、【SQL Plus】窗口、OEM企业管理器等。
4. Oracle数据库的关闭
Oracle数据库的关闭也分为3个步骤:
(1) 关闭数据库
写回--检查点--关闭文件(CTL打开状态)-无法访问
(2) 卸载数据库
CTL更改相关选项--关闭CTL--例程存在
(3) 终止例程
后台进程和服务进程终止--SGA和PGA内在区被收回
3.1.5 Oracle数据库SQL*Net
SQL*Net是基于Oracle特有的Transparent Network Substrate(简称TNS)技术发展出来的网络存取中介软件,使用不同的网络通讯协议(如TCP/IP,SPX/IPX与DECNet等),SQL*Net也可以处理不同的数据格式和国家语言字码间的转换。
在客户/服务器结构下,通信的两端不论是客户端或服务器端都需配置SQL*Net中介软件,服务器端在数据库主机上还需启动一个侦听程序(listener),以便能够不断侦听所有来自网络各地的客户端联机请求,侦听程序处理客户端联机请求的做法可以有以下类型:
① 专用服务器
当侦听程序受到一个客户端联机请求时,侦听程序新启动一个专用服务器程序负责服
务用户程序的各项要求,并将执行结果传回给用户程序。整个通信过程,专用服务器程序与
用户程序通过SQL*Net来对话。
② 多线程服务器
当侦听程序受到一个客户端联机请求时,侦听程序将用户程序连接到一个已预先启动的共享调度程序(Shared Dispatcher)上,此共享调度程序负责接受用户程序的各项要求,并将之放入要求队列,共享服务器从队列中取出数据加以执行,然后将执行结果放至响应队列中,同享调度程序在自响应队列中取得数据后传回给客户端,整个通信过程,专用服务器程序与用户程序通过SQL*Net来对话。
侦听程序相关文件包括:
$ORACLE_HOME/bin/lsnrctl | 侦听程序文件 |
$ORACLE_HOME/network/admin/listener.ora | 侦听程序组态设置文件 |
$ORACLE_HOME/network/log/listener.log | 侦听程序执行记录文件 |
启动侦听程序: $lsnrctl start
侦听程序状态: $lsnrctl status
终止侦听程序: $lsnrctl stop
组态文件设置:
组态文件名称 | 设置内容说明 | 客户端 | 服务器端 |
Listener.ora | 描述数据库主机所有侦听程序的名称与网址以及数据库SID。 | Ö | |
Tnsnames.ora
| 描述客户端会连上的每一个目标数据库位置,并各配以一专用之服务名称,以便在联机时指明。 | Ö | Ö |
SQLnet.ora
| 设置SQL*Net执行时诊断错误用的选项参数,若只用到默认值的话可以不需要该组态文件。 | Ö | Ö |
设置listener.ora组态文件
同一台主机所启动的各个listener共享同一个listener.ora组态文件,该组态文件的设置包括以下几个部分:
(1) listener名称。
(2) listener的侦听对象地址:这里需要列出与listener进行通讯的所有对象,包括使用进程间调用(IPC)的本地客户端应用程序与ORACLE数据库的共享调度程序(Shared Dispatcher)、使用TCP/IP、SPX/IPX或DECNet的远程客户端应用程序等。
(3) 使用这个listener的数据库:必须列出这台主机上所有共享此listener的数据库SID。
3.1.6 创建与配置监听器
1. 监听器:负责Oracle数据库和客户端之间的通讯
在Oracle数据库服务器中,通过一个叫“监听器”的组件接收来自客户端的连接请求。它是客户端和服务器端的中间组件。监听器是位于服务器端的、独立运行的一个后台进程,它运行在服务器端,但是独立于数据库服务器单独运行,也就是说,当数据库没有启动的时候,监听器也能独立运行。监听器负责对客户端的连接请求进行监听,并且对服务器端的连接负荷进行调整。
配置好Oracle网络是数据库成功连接的前提条件之一。
2. Oracle监听器的配置方法主要有两种:
(1) 通过图形界面工具Net Manager配置监听。
(2) 直接使用文本编辑器编辑监听器配置文件listener.ora,配置监听器。
3. 监听器
位于数据库服务器端,当监听器启动时,需要参照位于服务器端的监听器配置文件“listener.ora”。文件可以使用【记事本】之类的编辑器进行手工编辑,也可以使用【Net Configuration Assistant】(简称为netCA)之类的图形编辑界面进行配置。
在【服务】窗口中可以查看监听器服务,如图3.14.25所示,创建数据库orcl时创建了一个监听器服务,监听器启动后,实例中的PMON进程会把实例名称作为服务名注册到同一台服务器上在1521端口监听的监听器。
【例7】(任务)
(1) 理解监听器配置文件“listener.ora”内容的含义和作用。
(2) 使用【Net Configuration Assistant】图形界面添加一个新的监听程序LISTENER1。
(3) 使用手工编辑配置文件“listener.ora”的方法添加一个新的监听程序LISTENER2,端口号为1526。并使用监听器的命令行工具启动该监听器。
解: (任务实施)
使用【记事本】打开监听器配置文件“listener.ora”,其默认的初始内容如下所示。
监听器负责管理 Oracle 数据库和客户端之间的通讯,它在一个特定的网卡端口(默认是TCP 1521端口)上监听连接请求,并将连接转发给数据库。
具体功能: (1)监听客户端的请求。
(2)为客户端请求分配 Server Process。
(3)注册实例服务。
(4)错误转移。
(5)负责均衡
配置文件“listener.ora”内容的含义和作用如下:
(1) SID_LIST_LISTENER部分内容表示注册到监听器里的服务名的相关信息。在使用netCA创建的监听器配置信息中,默认只有一个服务名,也就是SID_DESC部分,该服务名表示对外部C语言编写的函数进行调用时所用的服务名。
(2) LISTENER部分说明了与监听器相关的重要信息,其中,LISTENER表示监听器的名称,也是默认监听器的名称。ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)部分的监听信息在PL/SQL程序调用外部C语言编写的函数时使用。
ADDRESS=(PROTOCOL=IPC)(HOST=localhost)(PORT=1521)这一部分说明了监听器所在的地址,其中所采用的协议为TCP协议,监听器所在的主机名为localhost,监听器在1521端口上监听连接请求。
3.1.8 启动与关闭Oracle数据库
数据库与实例是分离的,能够互相独立存在。
通常情况下Oracle服务器会自动启动数据库,如果需要启动数据库,则必须以SYS用户作为SYSDBA身份登录,然后再执行数据库的启动操作。
启动Oracle数据库的命令startup有多个参数:nomount、mount、restrict、force和recover。各个数据库启动命令及其特点如表3.1.27所示。
Oracle数据库的启动命令 | 特点 |
startup | 启动数据库实例,装载数据库,且打开数据库,允许访问数据库,当前实例的控制文件中所描述的所有文件都已经打开,这是默认方式,startup命令默认的参数就是open,等价于先执行“startup mount”命令,然后执行“alter database open;”命令 |
Startup mount | 启动数据库实例,并装载数据,但不打开数据库 只是给数据库管理员进行管理操作,不允许数据库的用户访问。仅仅只是当前实例的控制文件被打开,数据文件未打开。在该模式下可以进行如下的某些操作:(1) 重命名数据文件 (2) 添加、取消或重命名重做日志文件 (3) 允许和禁止重做日志存档选项 (4) 执行完整的数据库恢复操作 startup mount命令等价于先执行“startup nomount”命令,然后执行“alter database mount;”命令 |
startup nomount 实例启动 | 只启动数据库实例,不装载数据库,内存中尚无实例,也没有system表空间 只是初始化文件,分配SGA区,启动数据库后台进程并打开后台跟踪文件,没有打开控制文件和数据文件,不以访问数据库。在该模式下可以进行以下操作: (1)重建控制文件、数据库 (2)查看一些与实例、参数、SGA和进程等有关的视图,例如v$instance、v$parameter、v$SGA、v$process、v$version、v$database等 |
startup restrict | 以受限方式打开数据库,只允许具有权限的用户访问数据库,这种模式下,允许用户进行以下操作: (1)执行数据库数据的导出或导入 (2)执行数据装载操作 (3)暂时阻止一般的用户使用数据 |
Startup pfile=<文件名> |
以指定的初始化文件启动数据库,不是采用默认初始化文件 |
Starrup force | 中止当前数据库的运行,并以强制方式重新开始正常的启动数据库 |
Startup recover | 数据库启动,并开始介质恢复 |
表 3.1.27 各个数据库启动命令及其特点
关闭Oracle数据库的命令shutdown有4个参数:normal、transactional、immediate和abort,缺省不带任何参数时表示是normal,即shutdown命令等价于shutdown normal。各个数据库关闭命令及其特点如表3.1.18所示。
Oracle数据库的关闭命令 | 特 点 |
shutdown[normal] 正常关闭 (默认关闭方式) | (1) 不断开现有连接的用户,阻止任何用户建立新的连接,包括管理员在内 (2) 已经连接的用户能够继续他们当前的工作,如递交新的更新事务,直到此用户自行断开连接 (3) 等待所有当前连接的用户断开与数据库的连接 (4) 所有用户都断开连接,数据库才进行关闭操作 (5) 采用这种方式关闭数据库,需要等待时间很长 (6) 下一次启动数据库时,不需要任何的实例恢复 |
shutdown transactional 事务处理关闭 | (1) 阻止任何用户建立新的连接 (2) 等待所有当前连接用户未递交的活动事务提交完毕,然后立即断开用户的连接 (3) 所有的用户都断开连接立即关闭数据库 (4) 下一次启动数据库时,不需要任何的实例恢复 |
shutdown immediate 立即关闭 | (1) 阻止任何用户新的连接,同时限制当前连接用户开始新的事务 (2) 如果已连接用户有未完成的事务,则数据库系统不会等待他们完成,而是直接把当前未递交的事务回退 (3) 数据库管理系统不再等待用户主动断开连接,当未递交的事务回退成功后,系统会直接关闭、卸载数据库,并终止数据库进程 (4) 下一次启动数据库时,不需要任何的实例恢复 (5) 适用于马上发生断电、数据库或者某应用程序功能不正常、用户不能注销等情况 |
shutdown abort 终止关闭 | (1) 立即关闭数据库,相当于断电 (2) 阻止任何用户新的连接,也不能启动新的事务,立即终止当前SQL语句处理,不回退提交的事务,隐式断开所有用户的连接 (3) 常用于马上要发生断电、实例启动不正常、数据库或者某应用程序功能不正常、用户不能注销等情况 (4) 下一次启动数据库时,需要实例的恢复过程 |
表3.1.28 各个数据关闭命令及其特点
对于normal、transactional、immediate三个数据库启动命令选项,不存在需要回退的、被挂起的未提交事务,并有数据文件和日志文件同步,所有的资源被释放,数据库被“干净”、“一致”地关闭。
对于abort这个数据库启动命令选项,没有提交的事务也没有回退,数据文件也没有正常关闭,但该命令选项并不会损坏数据库,只是使数据库处于不一致的状态,使用这种方式关闭数据库后,建议不要执行备份之类的操作。
【例8】(任务)
(1) 首先以SYSTEM用户身份登录服务器,查看数据库的当前状态。然后以SYS用户身份作为SYSDBA登录,使用“shutdown immediate”命令立即关闭数据库。接着以SYS用户作为SYSDBA连接到空闲例程,再使用“startup”命令直接打开数据。
(2) 先使用“shutdown transactional”命令关闭数据库,然后依次使用“startup nomount”命令启动实例,使用“alter database mount ;”命令装载数据库,使用“alter database open;”命令打开数据。
解:(任务实施)
1. 立即关闭数据库与直接打开数据库
(1) 以SYSTEM用户身份登录服务器
打开【SQL Plus】窗口,在提示输入的用户名后输入“SYSTEM/123456 @orcl”,按Enter键,执行该命令,以SYSTEM用户登录服务器。
(2) 查看数据库的当前状态
在提示符“SQL>”后输入“select name , open_mode from v$database ; ”命令,按Enter键,查看数据库的当前状态。
(3) 以SYS用户身份作为SYSDBA登录
在提示符“SQL>”后输入“conn SYS@orcl as sysdba”命令按Enter键,然后在输入口令提示符后输入“Oracle_11g”按Enter键,建立与数据库的连接。
(4) 立即关闭数据库
在提示符“SQL>”后输入“shutdown immediate”按Enter键,在【SQL Plus】窗口中依次会出现“数据库已经关闭”、“已经卸载数据库”、“ORACLE 例程已经关闭”的提示信息,如图4.20所示。
(5) 以SYS用户作为SYSDBA连接到空闲例程
在提示符“SQL>”后输入“conn sys/Oracle_11g as sysdba”命令按Enter键,连接到空闲例程,由于此时数据库已被关闭,内存中尚无实例,也没有system表空间,只能以sys用户作为sysdba登录,不能使用其他用户名和口令进行登录。
(6) 使用“startup”命令直接打开数据库
在提示符“SQL>”后输入“startup” 命令按Enter键,直接打开数据库,使数据库从SHUPDOWN状态直接转换到OPEN状态,在【SQL Plus】窗口中依次会出现“ORACLE 例程已经启动”、“数据库装载完毕”、“数据库已经打开”的提示信息,如图31.29所示。
2. 分步启动实例、装载数据库和打开数据库
(1) 以SYS用户身份作为SYSDBA登录
(2) 使用“shutdown transactional”命令关闭数据库
(3) 使用“startup nomount”命令启动实例
(4) 查看当前数据库实例的状态
(5) 使用“alter database mount;”命令装载数据库
(6) 数据库成功装载后查看当前数据库的状态MOUNTED
(7) 使用“alter database open ;”命令打开数据库
(8) 数据库成功打开后查看当前数据库的状态READ WRITE

学到了吗?有收获吗?
欢迎大家留言噢~
记得置顶公众号或设为星标
第一时间浏览精彩内容噢~





