第四章 管理ORACLE7数据库.docx
《第四章 管理ORACLE7数据库.docx》由会员分享,可在线阅读,更多相关《第四章 管理ORACLE7数据库.docx(19页珍藏版)》请在冰豆网上搜索。
第四章管理ORACLE7数据库
第四章管理ORACLE7数据库
本章主要讲述管理ORACLE7数据库的一些必备知识。
一、数据字典
数据字典是ORACLE数据库的最重要的部分之一,是由一组只读的表及其视图所组成。
这些表和视图是数据库被建立同时由数据库系统建立起来的,起着系统状态的目录表的作用。
数据字典描述表、列、索引、用户、访问权以及数据库中的其它实体,当其中的一个实体被建立、修改或取消时,数据库将自动修改数据字典。
因此,数据字典总是包含着数据库的当前描述。
数据字典提供有关该数据库的信息,可提供的信息如下:
∙ORACLE用户的名字
∙每一个用户所授的特权和角色
∙模式对象的名字(表、视图、索引、同义词等)
∙关于完整性约束的信息
∙列的缺省值
∙有关数据库中对象的空间分布信息及当前使用情况
∙审计信息(如谁存取或修改各种对象)
∙其它一般的数据库信息
可用SQL存取数据字典,由于数据字典为只读,只允许查询。
数据字典中全部基本表和用户可存取视图为ORACLE用户SYS所持有,所有对象包含在SYS模式中,安全管理员对该帐号要严格控制。
附录A详细列出了ORACLE的数据字典与视图。
二、事务管理
1.事务(transaction)
数据库是多用户的共享资源,在多个用户并行地存取数据时,应对数据做并发控制,以免存取不正确的数据,破坏数据库的一致性。
数据库的任何状态变化都要能反映客观世界的某种真实存在的合理状态,反映到数据库中,就是数据要满足一定的约束条件,这种约束条件就是一致性约束。
有时,为了完成复杂的修改动作,往往需要临时破坏数据库的状态一致性。
因此,就有必要把这种对数据库复杂修改的一连串动作序列合并起来,这就是事务。
事务是数据库维护数据一致性的单位,它将数据库从一致性状态转换成新的一致性状态。
2.事务提交
提交一事务,即将在事务中由SQL语句所执行的改变永久化。
数据库数据的更新操作提交以后,这些更新操作就不能再撤消。
ORACLE的提交命令如下:
SQL>COMMIT;
3.事务回退
事务回退的含义是撤消未提交事务中的SQL语句所作的对数据修改。
ORACLE允许撤消未提交的整个事务,也允许撤消部分(需设置保存点)。
回退之后,数据库将恢复事务开始时的状态或保留点状态。
回退命令如下:
SQL>ROLLBACK;
4.保存点
保存点就是将一个事务划分成为若干更小的部分,以便在必要时,使当前事务只回退一部分,而其余工作得到保留。
其格式为:
SAVEPOINT保存点名;
ROLLBACKTO保存点名;
三、数据库管理员(DBA)的职责
ORACLE数据库是一个大型的高性能数据库系统,需要有专人进行管理,这就是数据库管理员(DataBaseAdministrator,简写为DBA)。
作为DBA,应具有两方面的特权:
∙操作系统特权
∙数据库特权
在ORACLE7系统初始安装后,存在以下三个具有DBA特权的数据库用户:
∙internal用户,负责数据库的启动和关闭。
只有internal用户才有启动和关闭数据库的特权。
∙sys用户,所有系统数据字典基表和视图都属于sys用户。
sys用户初始口令为:
change_on_install,当数据库安装完毕,应立即修改口令。
∙system用户,一些附加的数据字典和视图,以及一些ORACLE工具用到的表和视图都属于system用户。
system用户初始口令字为:
manager,也应当在安装数据库之后立即修改它。
SQL*DBA(7.2版本以后为svrmgrl)是DBA用来管理ORACLE的工具,可以用来对数据库进行启动、关闭、监控、创建及修改各种实体。
SQLDBA的运行方式为:
$sqldbalmode=y
四、ORACLE数据库的启动和关闭
(以OracleWorkGroup7.3.3.2forSCOUNIX5.0为例)
1.启动ORACLE数据库
(1)以ORACLE用户名启动UNIX操作系统
(2)以internal用户登录SQL*DBA实用工具:
$svrmgrl
SVRMGR>connectinternal
(3)SVRMGR>startup启动数据库
(4)SVRMGR>exit退出SQL*DBA
(5)$lsnrct1starttcp_listener启动SQL*Net
2.关闭ORACLE数据库
(1)以internal用户登录SQL*DBA实用工具:
$svrmgrl
SVRMGR>connectinternal
(2)SVRMGR>shutdownimmediate立即关闭数据库
注:
有三种方式,immediate为立即关闭,normal为正常关闭,abort为异常中止。
(3)SVRMGR>exit退出SQL*DBA
(4)重新以root用户登录UNIX
(5)#shutdown-g0-y关闭UNIX系统(以SCOUNIX为例)
五、ORACLE用户及权限管理
合理的用户和权限管理对于数据库系统的高效、安全、可靠是很关键的。
ORACLE7在用户及权限管理上有许多新的概念和特性。
1.ORACLE的用户管理
每个ORACLE数据库都有许多合法用户,这些用户可以根据用户名和口令登录数据库,并使用SQL语言存取数据。
(1)创建用户
创建用户命令格式为:
createuser用户名
identifiedby口令
defaulttablespace表空间名
temporarytablespace表空间名
quota大小on表空间名
profile资源文件
具体解释如下:
∙创建用户的操作必须由DBA来做,一般用户无权创建用户。
∙用户名必须是唯一的,即同一数据库中不能有两个相同的用户。
∙defaulttablespace表示该用户存放数据的缺省表空间。
∙temporarytablespace表明用户使用的缺省临时表空间名。
∙quota可以限制用户在某个表空间上最多可使用多少字节。
∙profile为用户指定各种资源的使用。
下面是一个创建用户的完整例子:
createuserscott
identifiedbytiger
defaulttablespacedata_ts
temporarytablespacetemp_ts
quota500Kondata_ts
profilenewprofile;
(2)修改用户
对用户的修改包括:
口令字、缺省表空间、临时表空间、表空间限量、profile、缺省角色。
角色是ORACLE7的一个新概念,我们在“权限管理”里再讨论。
在这里可把角色看成具有某些权限的一个特殊用户。
修改用户的缺省角色也就是为用户指明另一个权限的集合。
下面举几例说明修改用户的操作:
∙将scott的口令改为hello:
ALTERUSERscottIDENTIFIEDBYhello;
∙将scott的缺省表空间改为data2_ts:
ALTERUSERscottDEFAULTTABLESPACEdata2_ts;
∙将scott的临时表空间修改为temp2_ts:
ALTERUSERscottTEMPORARYTABLESPACEtemp2_ts;
∙将scott的资源文件改为otherprofile:
ALTERUSERscottPROFILEotherprofile;
∙将scott的缺省角色改为DEVELOPER:
ALTERUSERscottDEFAULTROLEDEVELOPER;
∙将当前系统所有角色都授予scott,除Payroll外:
ALTERUSERscottDEFAULTROLEALLEXCEPTPayroll;
(3)删除用户
删除用户的命令为:
DROPUSER用户名[CASCADE]
若不使用CASCADE选项,则必须在该用户的所有实体都删除之后,才能删除该用户。
使用CASCADE后,则不论用户实体有多大,都一并删除。
2.ORACLE的权限管理
ORACLE7的安全机制,是由系统权限、实体权限和角色权限这三级体系结构组成的。
所谓系统权限,是指对数据库系统及数据结构的操作权,例如创建/删除用户、表、同义词、索引等等;所谓实体权限,是指用户对数据的操作权,如查询、更新、插入、删除、完整性约束等等;所谓角色权限,是把几个相关的权限组成角色,角色之间可以进一步组合而成为一棵层次树,以对应于现实世界中的行政职位。
角色权限除了限制操作权、控制权外,还能限制执行某些应用程序的权限。
这样的安全控制体系,使得整个系统的管理人员及程序开发人员能控制系统命令的运行、数据的操作及应用程序的执行。
(1)系统权限
ORACLE7提供了80多种系统权限,每种系统权限允许用户执行特定的数据库操作。
系统权限的授予命令为GRANT,例如把创建任何表视图的权限授予scott用户:
GRANTcreateanyviewTOscott;
系统权限的回收命令为REVOKE,例如将createanyview权限从scott用户手中收回:
REVOKEcreateanyviewFROMscott;
(2)实体权限
每种类型的实体有与之相关的实体权限。
授予实体权限的命令举例(将EMP表上的Select和Insert权限授给scott):
GRANTselect,insertONempTOscott;
回收实体权限的命令举例(将EMP表上的Select权限从scott手中回收):
REVOKEselectONempFROMscott;
(3)管理角色
角色是许多权限和角色的组合。
它极大地方便了ORACLE的权限管理。
∙创建角色,如创建一个名为dept1的角色,口令字为hello:
CREATEROLEdept1IDENTIFIEDBYhello;
∙使用角色,可以通过修改用户的缺省角色来使用角色,或通过授权的方法来将角色授予其它角色或用户。
如将scott用户的缺省角色修改为DEVELOPER:
ALTERUSERscottDEFAULTROLEDEVELOPER;
将角色dept1授予manager角色:
GRANTmanagerTOscott;
∙使角色生效或失效,DBA可以通过控制角色的生效或失效,来暂时回收用户的一部分权限。
如使dept1角色失效:
SETROLEdept1DISABLE;
∙删除角色,这将会影响到拥有该角色的用户和其它角色的权限。
用DROPROLE命令删除角色,如:
DROPROLEdept1;
六.ORACLE数据库的备份与恢复
ORACLE7有一套较完整的容错机制来保证数据库系统的可靠性,它支持联机备份与恢复。
DBA应根据系统环境具体制定一个合适的备份策略,以便在数据库遭受意外破坏时能尽快恢复运行,减少数据丢失。
ORACLE数据库的备份方法有多种,这里介绍常见两种:
一种是对整个数据库的二进制备份,另一种方法是对数据库中每张表的单独备份。
1.Export/Import实用程序
利用ORACLE的实用程序Export,可将数据从数据库中提取出来;用另一个实用程序Import可将提取出来的数据送回ORACLE数据库中。
(1)Export实用程序的功能
Export是在数据库打开并能使用的情况下后备数据库数据的实用程序。
它把ORACLE数据库中的数据以ORACLE二进制形式写到操作系统文件上,该文件叫卸出文件。
它可以是磁盘文件,也可以是磁带文件。
卸出文件在需要时能被再装入到ORACLE数据库中,也可装入到另一个CPU上的ORACLE数据库上,还可把它装入到不同ORACLE版本的数据库上。
用Export可实现应用程序失败时的恢复,例如可把某个表或某些表恢复到执行该Export时的状态。
由于卸出文件的特殊格式,所以只能用Import实用程序将其读入数据库中。
(2)卸出方式
Export实用程序能卸出的对象取决于所选择的方式。
所有用户至少有两种卸出方式供选择;具有EXP_PULL_DATABASE角色的用户可有三种方式供选择。
这些方式描述如下:
·表方式:
该方式只允许用户卸出自己模式中的指定表,而不是所有表。
缺省方式是卸出操作者所拥有的全部表。
·用户方式:
该方式允许操作者卸出自己模式中的所有对象(如:
表、授权和索引等)。
·全数据库方式:
只有具有EXP_FULL_DATABASE角色的用户能使用该方式,能卸出该数据库中除SYS模式中的对象以外的所有对象。
要选择表、用户或全数据库方式,可相应指定TABLES=tablelist、OWNER=userlist或FULL=y。
(3)如何使用Export
使用Export的方法有如下三种:
·使用参数文件的命令行法
·命令行法
·交互式方法
这里只介绍命令行方法。
命令行方法允许把卸出参数写在命令行上,以控制Export的运行。
其命令格式如下:
EXPusername/password参数1参数2……
例如:
EXPsystem/managerFULL=yFILE=nov13.exp
凡能写在参数文件中的参数均能写在命令行上,写在命令行上的参数优先于写在参数文件中的参数。
但在命令行上所能写的参数不能超出系统所许可的命令行长。
下表给出卸出程序中所用的参数,供用户使用时参考。
Export实用程序参数
关键字
缺省值
说明
USERID
无
指定用户名和口令,用户名和口令之间用“/”分隔。
若USERID是PARFILE中的第一个参数,则可省略该关键字。
BUFFER
依赖于OS
指出缓冲区长度,该缓冲区用于存放数据行。
若指定为0,或包含LONG数据,则一次只能取一行。
缓冲区长度可用如下公式计算:
缓冲区长度=行数×最大行长
FILE
EXPDAT.DMP
由Export建立的输出文件名
GRANTS
Y
是指示是否卸出授权的标志。
INDEXES
Y
是指示是否卸出索引的标志。
ROWS
Y
是指示是否卸出数据行的标志。
CONSTRAINTS
Y
是指示是否卸出表约束的标志。
FULL
N
是卸出整个数据库的标志。
关键字
缺省值
说明
OWNER
无定义
表示其对象要被卸出的用户名清单。
在用户方式中指定OWNER=userlist
TABLES
无定义
在表方式卸出中,指出要进行卸出的表名:
TABLES=tablelist
RECORDLENGTH
依赖OS
文件记录长(字节),当把一个卸出文件传递给另一个操作系统时才需该参数。
INCTYPE
无
指定增量卸出类型,有效值是COMPLETE、CUMULATIVE和INCREMENTAL。
RECORD
Y
指出是否记录数据库表SYS.INCVID、SYS.INCFIL和SYS.INCEXP中的增量卸出。
HELP
N
显示装入参数的描述。
PARFILE
无
指定包含参数说明的文件
OLG
无
指定接收信息和错误信息号的文件。
例如:
EXPsystem/managerLOG=export.logFULL=y
如果指定了该参数,则所有的信息转到该文件及终端上。
CONSISTENT
NO
当指定YES时,数据库的读一致视图被卸出。
当卸出过程中其它应用正更新该数据库时,该标志有用。
为了减少卸出开销,应先同时卸出需保持一致的那些表,然后再卸出其它表。
STATISTICS
NONE
该参数指定当卸出的数据库数据被装入时生成的数据库优化器的统计类型。
其可选值是ESTIMATE、COMPUTE和NONE。
(4)Import实用程序
Import和Export是两个相配套的实用程序,Export把数据库中的数据卸出到操作系统文件中,而Import实用程序则把Export卸出的数据恢复到数据库中。
例如:
如果一个用户把他的所有表和数据卸出到文件mydata.exp中,则当装入mydata.exp文件时,Import重新建立每一张表,并读入数据。
Import实用程序只能装入由Export卸出的数据。
对应于Export的3种卸出方式,Import有3种装入方式:
表方式、用户方式或全数据库方式。
Import也有3种运行方法:
参数文件方法、命令行方法、交互方法。
命令行方法的运行格式同Export,如:
IMPusername/password参数1参数2……
在参数文件方法和命令行方法中都用到Import参数。
在Import实用程序中允许使用的参数如下表所示。
Import参数
关键字
缺省值
说明
USERID
未定义
指定用户和口令。
若USERID是Import命令行中的第一个参数。
BUFFER
依赖OS
指定传送数据行所用的缓冲区大小(字节)。
它决定Import所能插入的行数。
可用如下公式计算:
buffer_size=行数×最大行长
FILE
EXPDAT.DMP
要安装的卸出文件名
SHOW
N
指出是否只列出卸出文件的内容,而不装入表数据、及建立任何对象和不修改数据库。
IGNORE
N
指定应如何处理对象建立的错误。
指定IGNORE=y,使Import试图建立数据对象时返回“objectalreadyexists”。
例如,对于非表对象,如果指定IGNORE=Y,则Import不报告错误而继续执行;如果指定IGNORE=N,则在继续往下执行之前报告对象建立错误。
对于表,IGNORE=Y使行装入现存的表中,不给出信息;IGNORE=N要报告错误,并跳过已存在的表。
GRANTS
Y
指出是否装入授权。
关键字
缺省值
说明
INDEXES
Y
指出是否装入索引。
ROWS
Y
指出是否装入数据行。
TOUSER
没有
指定一个用户名表,它们是要对其装入的数据的那些用户。
使用该参数的操作者需有IMP_FULL_DATABASE角色。
为了把数据装入到其它模式,可用该参数。
如果指定多个模式,则模式名应与FROMUSER中的模式名配对。
例如:
IMPsystem./managerFROMUSER=(scott,fred)
TOUSER=(joc,ted)
其中:
scott的对象装入joe模式中,fred的对象装入ted模式中。
TABLES
没有
指定要装入的表名,可用指定“*”号来表示装入模式中的所用表。
例如:
IMPsystem./managerFROMUSER=(scott,jones)
TOUSER=(accts,emp,dept)
其中:
acct属于jones,而emp,dept属于scott。
RECORDLENGTH
依赖OS
文件记录长(字节),当把一个卸出文件传递给另一个操作系统时才需该参数。
INCTYPE
未定义
指定增量卸出类型,有效值是SYSTEM和RESTORE。
COMMIT
N
指出在每个数组插入后是否提交。
按照缺省规定,在装入每个对象后,Import提交。
如果指定CCMMIT=N,则当出现错误事件时,Import在继续装入下一个对象之前要执行回滚。
HELP
N
显示装入参数的描述。
PARFILE
没有
指定包含参数说明的文件。
LOG
没有
指定接收信息和错误信号的文件。
如果指定参数,则所有的信息除显示外,还写到指定文件中。
DESTROY
N
指明构成数据库的现有数据文件是否要重复使用。
INDEXFILE
没有
指定接收建立索引命令的文件。
如果指定该参数,则建立索引的命令被放在该文件中。
2.增量卸出/装入
下面介绍利用Export/Import实用程序对ORACLE数据库进行备份、恢复的方法:
增量卸出/装入。
增量卸出是一种常用的数据备份方法,包括3个子类:
(1)“完全”增量卸出
就是对整个ORACLE数据库进行完全卸出。
如:
$expsystem/口令inctype=completefull=yfile=today.dmp
(2)“增量型”增量卸出
即从ORACLE数据库中卸出上次卸出操作之后所有数据库的变化信息。
如:
$expsystem/口令inctype=incrementalfile=today.dmp
增量型卸出文件的大小,可能只是完全卸出文件大小的1%,具体要看“新信息或更新过的信息”的总量而定。
(3)“累积型”增量卸出
累积型卸出方式只是卸出自上次“完全”卸出之后数据库中变化了的信息。
用法如下:
$expsystem/口令inctype=cumulativefile=today.dmp
DBA可以排定一个备份日程表,用数据卸出的三个不同方式合理高效地完成数据库的备份任务。
比如DBA作如下安排:
星期一:
完全卸出(F1)
星期二:
增量卸出(I1)
星期三:
增量卸出(I2)
星期四:
累积卸出(C1)
星期五:
增量卸出(I3)
星期六:
增量卸出(I4)
如果在星期日,数据库遭到意外破坏,DBA可按以下步骤来恢复数据库:
I.用命令CREATEDATABASE重新生成你的数据库结构;
II.最近增量装入I4:
$impsystem/口令inctype=systemfull=yfile=I4
III.完全增量装入F1:
$impsystem/口令inctype=restorefull=yfile=F1
IV.累积增量装入C1:
$impsystem/口令inctype=restorefull=yfile=C1
V.对于由累积装入或完全装入尚未能装入的信息,作增量装入:
$impsystem/口令inctype=restorefull=yfile=I3
$impsystem/口令inctype=restorefull=yfile=I4
注意:
在I1和I2中的信息已包括在C1中了。
3.文本数据装入工具SQL*Loader
SQL*Loader实现了ORACLE数据库和外部文本数据的转换,为数据的输入提供了非常强大和灵活的功能。
在SQL*loader使用过程中,会遇到以下四类文件:
I.控制文件:
是由用户自己编写的文本,包括了数据装载的控制信息;
II.数据文件:
是被装入ORACLE数据库的文本数据;
III.日志文件:
是SQL*Loader开始运行过程中生成的文件,用以记录执行的状态;
IV.废弃和拒绝的记录文件:
如果数据文件中有不合法的记录,将会被SQL*Loader放入废弃和拒绝的记录文件中。
SQL*Loader运行格式为:
$sqlload用户名/口令control=控制文件名log=日志文件名
使用SQL*Loader的关键是写一个正确的控制文件。
举例如下(控制文件control1.ctl):
LOADDATA
INFILE‘datafile.dat’
INTOTABLEemp
(empnoPOSITION(01:
04)INTEGEREXTERNAL,
enamePOSITION(06:
15)CHAR,
jobPOSIT