Oracle讲稿Word格式文档下载.docx
《Oracle讲稿Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《Oracle讲稿Word格式文档下载.docx(27页珍藏版)》请在冰豆网上搜索。
从中得到必需的启动配置数据。
1.2、控制文件
控制文件是数据库实例启动之后需要经常访问的内部二进制文件。
Oracle一般有两个或者更多的控制文件,名称依次为control01.ctl、control02.ctl、…每个控制文件的内容完全相同,如果一个文件损坏,Oralce会自动使用另外一个控制文件。
如果控制文件全部损坏,Oracle将不能工作。
如果Oracle发现一个控制文件已经在Oracle系统之外被修改过,它会认为该控制文件已经损坏。
因此绝对不能手工对控制文件进行编辑。
1.3、重做日志文件
重做日志文件用于记录数据库中被改变的数据信息,以供将来可能的数据恢复操作时使用。
Oracle一般有两个或者更多的重做日志文件,名称依次为redo01.log、redo02.log、…同控制文件一样,重做日志文件也不能进行手工编辑。
1.4、数据文件
数据文件是Oracle中最主要的外存文件。
用于存放Oracle系统中绝大部分的数据信息。
Oracle中全部的用户、表、视图和索引等数据库实体都存储在数据文件上。
同数据文件密切相关的还有一个表空间的概念,表空间是一个逻辑上的外存空间,一个表空间可以由一个或多个数据文件组成。
而一个数据文件只能属于一个表空间。
有了表空间这一逻辑概念,在创建数据库实体时就不需要具体指定其物理存储位置(数据文件),只需要指定一个表空间就可以了。
事实上,Oracle也不允许用户在创建实体时指定具体的数据文件,只能指定表空间。
Oracle中的表空间主要有三类:
系统表空间、用户表空间和临时表空间。
系统表空间和临时表空间是Oracle安装之后自动创建好的。
其中系统表空间用来存放Oracle系统的数据字典,临时表空间用来存放日常工作时产生的临时数据。
在通常情况下,系统表空间名称为SYSTEM,由数据文件system01.dbf组成;
临时表空间名称为TEMP,由数据文件temp01.dbf组成。
用户表空间用于存放用户自己的数据,由用户负责创建。
名称可以在满足Oracle命名规则的前提下任意选取。
虽然系统表空间中也可以存放用户自己的数据,但建议用户数据最好全部存放在用户表空间上,以便与系统数据字典分开,减少冲突的可能性。
2、数据字典
数据字典是Oracle系统的重要组成部分。
它存放了Oracle数据库需要用到的绝大部分信息。
数据字典实质上是一些表和视图的集合,这些表和视图都存放在系统表空间SYSTEM上,用户只能以只读的方式访问,不能对其进行修改。
数据字典中主要包括了以下重要内容:
◆数据库中全部数据库实体(表、视图等)的相关信息
◆数据库当前空间使用情况
◆各类完整性约束的信息
◆数据库中用户、角色的相关信息
3、数据库实例
数据库实例是Oracle系统用来管理数据库各类处理的一组进程和内存结构的集合。
在更多的情况下,数据库实例也被叫做Oracle服务(OracleService)。
在Oracle服务没有被启动之前,用户是无法访问数据库的。
Oracle服务成功启动之后,在操作系统的后台就有一组进程在活动,同时在内存中也申请了一块特定结构的空间。
Oracle服务中最重要的后台支持进程有以下五个:
◆数据库复写器(DBWR)
DBWR负责把数据库缓冲区中发生改变的数据(脏数据)写回外存数据文件中。
是唯一一个把数据写入数据库的进程。
◆进程监控器(PMON)
PMON负责当用户会话异常结束并且用户自己没有清除会话时,执行清除工作。
失败的会话所占用的系统资源会被PMON清理并释放出来。
◆系统监控器(SMON)
SMON在Oracle服务启动时检查和修复所有的数据库文件,保证其正确和一致。
在Oracle服务正常工作时,SMON负责定时检查整个系统,找出并修复错误。
◆日志复写器(LGWR)
LGWR负责数据库文件中重做日志文件的管理,保证重做日志能够可靠高效的进行。
◆校验点(CKPT)
CKPT负责监测所有的数据库文件,保证数据库文件中保存的信息的一致性,确保数据库文件之间的同步。
常用的数据字典:
v$bgprocess查看全部的后台进程
select*fromv$bgprocesswherepaddr<
>
‘00’;
查看当前正在工作的后台进程
可以查看当前库是否异常比如如果pmon正在工作,说明存在异常的会话。
v$session查看当前全部的会话(库连接)
内存区:
SGA区(SystemGlobalArea系统全局区):
库实例启动时Oracle向操作系统申请的一块基本内存区域。
PGA区(ProgramGlobalArea进程全局区):
一个Oracle进程启动时Oracle为其分配的内存区域。
SGA区的组成:
1、共享池(SharedPool)
用于缓存最近执行过的SQL语句和PL/SQL代码段
用于缓存最近使用过的数据字典数据
由两部分组成
库缓存(LibraryCache)用于缓存语句和代码段
数据字典缓存(DataDictionaryCache)用于数据字典数据
两者的大小比例由Oracle自行管理,无法人工指定,共享池分配的合适可以加快语句执行时的速度,从而提高性能。
2、库高速缓存(DatabaseBufferCache)
缓存最近使用过的数据文件中的数据块。
库高速缓存分配的合适可以降低物理I/O的发生次数,提高数据存取的速度,从而提高性能。
3、重做日志缓存(RedoLogBuffer)
缓存库高速缓存中数据发生改变了的数据块,即脏数据。
主要用于事务回滚(Rollback)时。
分配一定的重做日志缓存可以加快事务回滚时的速度,但不需要很大,一般为CPU数目乘以128K,但最好不要低于512K。
4、大池(LargePool)
大池是一块机动内存区域,当库比较繁忙,其他内存区域不足时,可以从大池中划取内存块来使用。
大池不是SGA区的必要组成部分,但使用大池可以降低某块特定内存区域不足的出现概率,特别适合于库的使用情况不定,繁忙和空闲交替出现的场合。
5、Java池(JavaPool)
专为Java应用分配的内存区域,9i中默认值为24MB。
因为Open3000中没有使用Java应用,因此Java池使用系统默认值即可。
PGA区:
当一个会话服务进程或者一个Oracle后台进程启动时,Oracle为其分配的内存区域。
当该进程终止时,Oracle收回这部分内存区域。
一个进程的PGA区只能由该进程使用。
v$sql查看最近执行过的SQL语句
v$sgastat查看SGA区的当前状态
showparametersga
三、启动和关闭数据库
在UNIX环境下,启动和关闭数据库一般采用Oracle的Sql*plus工具。
在OPEN2000系统中,因为客户机一般不安装Oracle的客户端。
因此启动数据库的方式主要是客户机远程登录到服务器,在服务器上运行Sql*plus来启动数据库。
下面以一个实例来说明启动和关闭数据库的过程:
前提条件:
数据库名称为o2000e,数据库中存在一个用户test,密码为test000。
Test用户具有能够启动和关闭数据库的sysdba的权限,数据库处于关闭状态。
1、启动一个终端窗口,键入以下命令:
sqlplus/nolog
来启动Sql*plus。
此时会出现提示符SQL>
2、在SQL>
提示符下键入:
connecttest/test000@o2000eassysdba
连接o2000e数据库,连接成功之后,屏幕上显示Connected。
3、在SQL>
startup
启动o2000e数据库,启动数据库一般需要十几秒的时间,启动成功之后,屏幕上会显示o2000e数据库的一些空间分配信息,此时数据库就可以正常使用了。
一些说明:
第1步的/nolog参数表示只启动Sql*plus,不进行连接。
如果不加这个参数的话,就需要依次输入用户名,密码,数据库名和连接身份。
不如在第2步中用connect命令一次全部输入来得方便。
第2步的assysdba参数表示test用户的连接身份为数据库管理员,该参数必须要加,否则第3步的startup命令就会因为权限不足而无法启动数据库。
除了通过终端窗口启动数据库之外,利用Oracle的Sql*plus工具和DBAStudio工具也可以进行启动数据库的操作。
其中Sql*plus同终端窗口一样采用命令行方式。
步骤也相同。
而DBAStudio采用图形界面,操作比较简单直观,但速度较慢。
要关闭数据库,需要用到shutdown命令。
接着上面的例子,在SQL>
shutdownimmediate
关闭o2000e数据库,关闭数据库也需要十几秒的时间,关闭成功之后,屏幕上显示相关提示信息,此时数据库被正常关闭。
Shutdown命令具有四种参数
Normal:
等待所有已连接的会话session主动退出之后再关闭数据库。
Immediate:
等待所有已连接的会话执行完当前的SQL语句之后关闭数据库。
Transaction:
等待所有已连接会话执行完当前事务之后关闭数据库。
Abort:
不做任何等待,立刻关闭数据库。
其中Normal参数一般不用,因为需要等待其他用户主动退出,因此何时关闭数据库是无法预料的。
一般经常使用的是immediate和transaction参数。
对OPEN2000系统来说,因为没什么用户自定义的处理,因此使用immediate参数来关闭数据库就可以了。
需要特别提醒的是,轻易不要用abort参数来关闭数据库,使用abort参数时,因为数据库被立刻关闭,如果此时有用户正进行数据更新操作,数据库中的内容将无法预料。
只用当数据库已经崩溃,无法正常关闭时,才使用abort参数来强制关闭数据库,就像电脑上只用死机时才按reset键一样。
同样,利用Oracle的Sql*plus工具和oemappconsole工具也可以进行关闭数据库的操作。
最后总结一下启动和关闭数据库需要注意的3个地方。
1、连接数据库时必须加assysdba参数,否则无法启动数据库。
2、关闭数据库时使用immediate或transaction参数,切勿使用abort参数。
3、在关闭服务器之前,如果数据库还未关闭,一定要先关闭数据库,再关闭服务器。
否则可能导致数据库中数据无法预料。
四、SQL语言入门
1SQL的概念
结构化查询语言(StructureQueryLanguage)是目前主流数据库(Oracle,Sybase,SQLServer等)使用的一种命令式语言。
每种数据库支持的SQL语言都有各自的变化,这里介绍Oracle支持的SQL语言。
SQL语言的作用是
a、查询、添加、修改和删除数据库中的各类数据;
b、创建、修改和删除各类数据库对象;
(对象是Oracle中的一个术语,对象是数据库中能够存放数据的事物,比如表和视图就是两种最常见的对象,索引、过程、函数和触发器等也是对象)
c、进行各类访问数据库数据和系统的操作。
比如上面启动和关闭数据库的操作就属于这一类。
Connect、startup和shutdown实际上都是SQL命令。
Exitshowusershowparameter
SQL语言是外部程序或操作人员同Oracle数据库的唯一联系方法,虽然目前很多图形用户界面常常使用户无法看到SQL的命令,但实际上在界面底下,外部程序还是使用SQL语言同Oracle打交道的。
2SQL的类型
SQL语言主要分两大类:
DDL(数据定义语言)和DML(数据操纵语言)。
i.DDL语言
DDL语言用来创建、修改和删除各类数据库对象自身,最常见的DDL语言中的命令是Create(创建)、Alter(修改)和Drop(删除)命令,TRUCATE截去整表。
不可撤销
ii.DML语言
DML语言用来查询、添加、修改和删除数据库中各类对象中存放的数据,最常见的DML语言中的命令是Select(查询)、Insert(添加)、Update(修改)和Delete(删除)。
回滚rollback和提交commit
3SQL语言支持的常用数据类型和定义格式
每种数据库的SQL语言所支持的数据类型格式都不一样,这里只介绍Oracle中的数据类型和定义格式。
Oracle中的数据格式不区分大小写。
i.定长字符串
定义格式:
char(n)n为字符串长度n<
=2000
说明:
定长字符串的最大支持长度为2000,如果字符长度小于定义的长度,自动在末尾添加空格;
如果不指定长度,默认为1。
实例:
namechar(5)定义了一个最多能够存储5个字符的对象name。
如果要利用其存储四个字符的字符串”hawk”,那么name中实际存储的是”hawk“加一个空格。
仍然占用5个字符的存储空间。
ii.变长字符串
varchar2(n)n为字符串最大的长度n<
=4000
变长字符串的最大支持长度为4000,没有默认值,必须指定长度。
namevarchar2(5)定义了一个最多能够存储5个字符的对象name。
同定长字符串不同的是,利用name存储字符串”hawk”只会占用4个字符的存储空间。
定长串费空间,查询快变长串省空间,查询慢
iii.数字型数据
number(p,s)p-s为数据的整数部分最大长度,s为数据的小数部分最大长度,如果不指定p或s,则由Oracle根据要存储的数据自动确定。
0<
p<
=380<
=s<
=12p>
=s
Oracle统一使用关键字number来定义一切可能的数字型数据,这导致了number的使用方法很灵活。
anumber(7,2)a对象中可以存储的数字最多具有5(7–2=5)位整数位,2位小数位。
12345.67可以精确的存储在a中;
12345.678在a中被存为12345.68;
123456因为有6个整数位,无法存储在a中。
-99999.99+99999.99
补充:
因为number的使用方法过于灵活,容易出错,在实际使用时通常比照一些常用的数字型类型定义来确定p和s的值。
而不是随便指定。
下面是一些常用的数字类型同number类型的对照关系表
NUMBER(3)
Unsignedchar
1BYTE整数,-999-999
NUMBER(5)
Short短整型
2BYTES整数,-99999-99999
NUMBER(10)
int
4BYTES整数
NUMBER(22,6)
float
单精浮点数
NUMBER(38,12)
double
双精浮点数
我们在定义number型数据时,p和s的值按照上表来取,就不容易出错了。
iv.日期型数据
date
日期型数据的定义很简单,访问日期型数据则需要用到SQL语言的系统函数to_date。
birthdaydate定义了一个日期型的对象birthday。
如果要将”2003-8-1912:
00:
00”这个时间存储在birthday中,要用到to_date函数:
birthday=to_date(‘03-8-1914:
00’,‘yy-mm-ddhh24:
mi:
ss’)
Oracle中yyyy表示年,mm表示月,dd表示日,hh24表示小时,mi表示分钟,ss表示秒。
‘yyyy-mm-ddhh24:
ss’为格式匹配字符串,Oracle按照格式匹配字符串中的格式去得到‘2003-8-1912:
00’中存储的时间数据。
4SQL语言中常用的操作符
操作符中的英文不区分大小写。
i.算术操作符
加减乘除+-*/
ii.比较操作符
等于=不等于!
=或<
或^=小于<
大于>
小于等于<
=大于等于>
=
在A和B之间betweenAandB双闭区间不在A和B之间notbetweenAandB
iii.集合操作符
属于in不属于notin存在exists不存在notexists类似like
(说明:
这里like操作符支持两种通配符%和_,%*可匹配0到多个长度的字符串,_?
匹配单个字符。
比如:
”ha%”可以与”ha”、”haw”或”hawk”匹配,而”ha_”只能匹配”haw”。
)
iv.逻辑操作符
与AND或OR取反NOT是否为空IS[NOT]NULL
优先级:
算术>
比较>
集合>
逻辑可以用()来改变优先级顺序
空值同任何数字进行任何运算,结果均为false或0
5常用DDL命令的使用
DDL命令中的英文不区分大小写
i.建表语句
建表语句的作用是在数据库中新建一张关系表。
建表语句语法:
Createtable表名(
第一个域的定义语句,
[第二个域的定义语句,
……………………
第N个域的定义语句])
中括号[]中的内容为可选项,创建新表时,至少应包含一个域。
可以为该表显式指定表空间,也可以使用当前的默认表空间。
域定义语句语法:
域名数据类型[DEFAULT缺省值][[NOT]NULL][域上的约束]
(
约束是Oracle中的术语。
简单说来,在某些域上建立约束,就是在这些域上建立了一种存储数据时的限制规则。
比如,我们有一张职员信息表,上面有”职员ID”和”职员性别”两个表域。
显然,不能有两个相同的职员ID,职员性别也只能在”男女”中选一个。
为了能在职员信息表中反映出这两种限制,就要在职员ID和职员性别这两个表域上建立约束。
Oracle支持的约束有四类:
i、主键约束(PrimaryKey)
主键约束所在的域中存储的数据必须具有唯一的非空值。
在上面的例子中,因为每个职员必须有自己的ID,而且不能与其他人相同。
这样就可以在”职员ID”域上建立主键约束来反映这种限制规则。
一张表只能有一个主键约束。
ii、唯一约束(Unique)
唯一约束也要求所在域中存储的数据必须具有唯一性。
它同主键约束的区别是:
唯一约束不要求数据必须为非空值。
比如,在职员信息表中还有一个表域”职员电话”。
不一定要求每个职员都有电话,但有电话的职员之间的电话号码一定不能相同。
这样就可以在””职员电话”域上建立唯一约束来反映这种限制规则。
iii、范围约束(Check)
范围约束要求所在域中存储的数据必须在某一范围内。
比如,在正常情况下,”职员性别”域中的数据只能是”男女”中的一个,这样就可以在”职员性别”域中建立范围约束来反映这种限制规则。
iv、外键约束(ForeignKey)
外键约束用来反映两张表之间的限制规则。
比如我们另外有一张职员薪资表,上面也有一个”职员ID”域。
显然,在职员薪资表的”职员ID”域中存储的职员ID必须是在职员信息表中已经有的职员ID。
否则就说明有人在冒领工资了。
这样就可以在职员薪资表的”职员ID”域和职员信息表的”职员ID”域之间建立外键约束来反映这种限制规则。
可以在多个域上建立一个约束。
还是以上面的例子来说明,在职员信息表中还有一个”职员部门”域。
假如公司有这样的规定:
不同部门之间的职员,ID号可以重复。
只要同一部门的职员ID不同就可以了。
这时,就需要在”职员部门”和”职员ID”两个域上建立主键约束来反映这种限制规则。
下面是一个综合的实例:
CreatetableT(
PK_TESTnumber(10),
UNK_TEST1varchar2(10)notnull,
UNK_TEST2varchar2(10),
CK_TESTnumber(3)default100,
FOR_DELnumber(3),
ConstraintPK_TTTPRIMARYKEY(PK_TEST),
ConstraintUNK_TTTUNIQUE(UNK_TEST1,UNK_TEST2),
ConstraintCK_TTTCHECK(99<
=CK_TEST)
)
表T具有五个表域,一个主键约束PK_TTT,一个唯一约束UNK_TTT,一个范围约束CK_TTT。
表域UNK_TEST1为非空域,表域CK_TEST具有缺省值100。
ii.修改表语句
表的修改需要用到Alter命令。
1.增加新的表域
使用Altertable命令中的ADD关键字向表中添加一个新域
AltertableTADD(FK_TESTnumber(10)notnull);
上面的语句为表T添加了一个新的非空域FK_TEST。
2.修改域的属性
使用A