ORACL重点知识.docx

上传人:b****6 文档编号:8359112 上传时间:2023-01-30 格式:DOCX 页数:28 大小:32.04KB
下载 相关 举报
ORACL重点知识.docx_第1页
第1页 / 共28页
ORACL重点知识.docx_第2页
第2页 / 共28页
ORACL重点知识.docx_第3页
第3页 / 共28页
ORACL重点知识.docx_第4页
第4页 / 共28页
ORACL重点知识.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

ORACL重点知识.docx

《ORACL重点知识.docx》由会员分享,可在线阅读,更多相关《ORACL重点知识.docx(28页珍藏版)》请在冰豆网上搜索。

ORACL重点知识.docx

ORACL重点知识

关系数据库的语言可以分为四大类:

DQL(数据查询语言:

select)

DDL(数据定义语言:

create、drop、alter)

DML(数据操纵语言:

增删改)

DCL(数据控制语言:

grant、revoke)

下边命令,老师操作的内容,我们跟着学习(敲)一遍

8、命令,老师操作的内容

createtablestudent

(snovarchar2(8),

snamevarchar2(8),

sagenumber(3)

);//创建学生表

descstudent;//查看表结构

insertintostudentvalues('001','yan',20);//往student表中插入数据

select*fromstudent;//查看student表中数据

9、查询表相关数据字典

数据库字典表可分为三类:

DBA_XXX(查询数据库里系统表的所有信息)、ALL_XXX(查询数据库里的系统表里账号有权限的对象所有相关信息)、USER_XXX(只能查询数据库的系统表里账号本身所拥有的对象的相关信息),更具体可参阅P139、P189相关内容

selecttable_namefromuser_tables;//列出当前用户所拥有的表

selectDISTINCTobject_typefromuser_objects;//列出当前用户所有的对象

select*fromuser_catalog;//列出当前用户拥有的所有表、视图、同义词和序列

descuser_tables;//查看表的结构,描述表(一般性描述哦,不特定)

备注:

Oracle中desc在两个地方用(显示表结构、降序排列),例如:

descuser_tables;//显示表结构

selecttable_namefromuser_tablesorderbytable_namedesc;//降序排列

10、

selecttable_name

fromuser_tables

wheretable_name="STUDENT";//student表在数据字典中大写存在,这个语句暂时出错,以后再试试吧~

11、修改表

altertablestudent

addssexvarchar2

(2);//增加一列性别ssex

select*fromstudent;//查看一下是否成功了

altertablestudentdropssex;//出错了

ed//修改一下“dropcolumnssex”,保存,退出。

如果是sys用户的表则无法删除列

descstudent//查看一下表结构

altertablestudent

altersnonumber(8)

ed//"modifysnonumber(8)",

小备注:

要更改数据类型,则要修改的列必须为空,如果有数据,还是不行

deletefromstudent;//删除所有的数据

select*fromstudent;//发现果然没有数据了

altertablestudentmodifysnonumber(10);//这次就可以修改其数据类型了

12、改名字

altertablestudentrenametostudent1;//改表名

altertablestudent1renamecolumnsnotosno1;//改列名

13、删除表

droptablestudent1;//删除表

14、创建表,带有约束条件的表

createtablestudent

snovarchar2(8),

snamevarchar2(8)notnullunique,

sagenumber(3)default20,//列级约束,不能修改

constraintpk_snoprimarykey(sno)//表级约束,可以修改

);

altertablestudentdropconstraintpk_sno;//表级删除约束

altertablestudentaddconstraintpk_snoprimarykey(sno);//增加约束

Over~

3、归档日志文件:

ArchiveLogFile。

//在线日志文件又叫做非归档文件吗?

好像是滴!

archiveloglist;//查看数据库在线重做日志文件的归档方式,得有权限

select*fromv$LOG;//查看日志组

select*fromv$LOGFILE;//查看日志组成员

1、TableSpace表空间、段、区、数据块

Oracle是DBMS,DBMS要依靠操作系统进行读写管理。

一个表空间至少要有一个数据文件,可以有多个。

一个数据文件只能放在一个表空间中。

2、表空间

表空间有三种类型:

永久性表空间(PermanentTablespace)、临时表空间(TemporaryTablespace)、还原表空间(UndoTablespace)又叫撤销表空间。

状态:

读写、只读、脱机(用于备份)。

3、创建表空间,其中的文件格式为“.dbf”

OEM图形界面会生成sql语句,例如:

CREATESMALLFILETABLESPACE"MYTABLESPACE"DATAFILE'D:

\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\MyFile.dbf'SIZE10MLOGGINGEXTENTMANAGEMENTLOCALSEGMENTSPACEMANAGEMENTAUTO

(创建表空间,并且在里边建立了数据文件。

4、进入那个啥(图形管理界面OEM),步骤:

http:

//127.0.0.1:

1158/em

system

oracle//打开企业管理器。

可视化的管理、网络管理

5、云计算趋向于用mysql小数据库。

表空间对应于数据文件。

6、查看表空间信息参数:

dba_tablespaces

cmdsqlplussystem/oracle然后查询,比如:

select*fromdba_tablespaces;

7、段(segment)是指特定逻辑所需的结构(换句话说,并非所有的逻辑结构都需要段),而逻辑结构又称为对象,需要存储空间存放的对象(逻辑结构)所占用的空间便称为段。

8、段类型:

数据段(DataSegment)、索引段、Undo段、临时段。

9、段的注意事项:

每个段都是有一个或多个区组成的、每个需要存储空间的对象都会对应到一个段、段所属的对象(object)不能跨越一个表空间。

通过dba_segments数据字典表查看。

cmd…

10、区(extent),区是由块组成的。

区是Oracle空间分配的最小单位。

区是Oracle用一组数据文件来管理的磁盘空间,以代表Oracle可用磁盘上的空间。

一组连续的数据块称为一个区;一组区则称为段。

11、数据块,是由一个或数个操作系统块组成,是Oracle存取数据的最小单位,也是数据库里最小的逻辑单元,数据块是由一个或多个操作系统块所组成的,也就是说,Oracle对I/O最小的单位是数据块。

即是说:

区是Oracle空间分配的最小单位,数据块是Oracle对I/O的最小单位。

数据块的组成结构:

Header、FreeSpace、Data

12、一些命令:

showparameter显示参数、db_block_size数据块大小

于是便有了这个sql语句,如下

showparameterdb_block_size;

2、Instance是个内存结构,从不同的角度来分析Oracle。

与Oracle相关的内存结构有两个区,Oracle一运行就吃掉了好多内存:

系统全局区(SGAsystemglobalarea,在例程启动时分配)、程序全局区(PGA)

3、Oracle实例

Oracle实例是一组操作系统进程和内存区域的集合。

是一种访问Oracle数据库的方式。

始终打开一个,并且只打开一个数据库。

4、DynamicSGA随机动态共享内存

showparameter显示参数、SGA_MAX_SIZE(SGA的一个参数),如下:

showparameterSGA_MAX_SIZE;//查看SGA最大上限参数值

小备注:

关于常用参数的含义,详见P44,上面说的很清楚,不必再网查了。

当然还有两个常用的,如下:

showsga;

select*fromv$sga;//这两个显示结果很像

5、系统全局区包含数个重要的区域:

数据缓冲区(DatabaseBufferCache)、日志缓冲区(RedoLogBuffer)、共享池(SharedPool)、其他,如大型池(LargePool)与Java池(JavaPool)等。

6、SHARED_POOL_SIZE(共享池参数)

showparameterSHARED_POOL_SIZE;//查看共享池大小

可以修改共享池的大小:

altersystemsetSHARED_POOL_SIZE=64m;//然后再show一下看效果即可。

7、数据缓冲区:

因为计算机I/O太慢了,所以出现了数据缓冲区。

它好像是使用的最近最少使用算法(LRU)。

快取命中CacheHit可以减少硬盘上的I/O次数,如果不在数据缓冲区中,称为CacheMiss。

数据缓冲区的种类:

DirtyBuffer、FreeBuffer、PinnedBuffer

8、重做日志缓冲区:

主要用来追踪记录最近修改过的数据记录,所谓修改是指:

Insert、Update、Delete、Create、Alter、Drop,尽量减少I/O操作,用于恢复。

LGWR日志读写进程。

LOG_BUFFER(重做日志缓冲区是由参数LOG_BUFFER设定的)

showparameterLOG_BUFFER;//查看重做日志缓冲区大小

9、LargePool(大型池),通常用来存放大量需求的缓冲区,RMAN常需用它(RMAN主要是用来备份恢复用的。

LARGER_POOL_SIZE(参数)

showparameterLARGER_POOL_SIZE;//查看largerpool大小

10、JavaPool(Java池),当用户使用Java时,必须要开启JavaPool,默认值是30M

JAVA_POOL_SIZE(参数)

showparameterJAVA_POOL_SIZE;//查看java_pool大小

11、排版命令:

descscott.emp;//查看表结构

select*fromscott.emp;//查询scott用户(模式)下的emp表

排版(针对数字9999,针对字符串a+数字)

colempnoformat9999;

colenameformata8;

setpagesize100;设置页的大小,一页占100行。

备注:

“/”代表运行(run),执行上一条sql语句。

dos下两个虚线之间代表的是一页吗?

好像是滴!

12、针对用户或应用程序的连接,Oracle提供了两种方式——独占模式(Dedicate)和共享模式(Multi-ThreadedServer,MTS)。

1、进程结构:

用户进程、服务器进程、后台进程。

赛扬、奔腾、老油条啊!

什么是老油条?

OracleInstance只包括共享内存与后台进程,此外的都称为其他进程(OtherProcess),如用户进程和服务器进程。

2、后台进程

必备的后台进程:

写数据(DBWR0~DBWR9)、写日志(LGWR)、检查点(CKPT)、系统监视(SMON)、进程监视(PMON)。

可选的后台进程:

ARCn(Archiver),Oracle数据库有两种ARCn——NOARCHIVELOG、ARCHIVELOG。

4、DBWRn进程,主要工作是将数据缓冲区中被改过的数据写回到数据文件里。

最多有10个进程(DBWR0~DBWR9)。

DBWRn将DirtyBuffer从数据缓冲区取出并写回到硬盘,有两种主要的机制:

日志写优先、LRU(LeastRecentlyUsed最近最少使用)。

DBWRn(数据库写进程)动作的触发点(即什么时候启动)有:

太多DirtyBuffer、太少FreeBuffer、每隔3秒钟、当Checkpoint发生时。

5、LGWR(日志写进程),对应Redologbuffer(重做日志缓冲区),主要工作是将RedoLogBuffer里的记录写到在线重做日志文件中。

LGWR触发点有:

用户下了commit指令、每隔3s检查重做日志缓冲区的目前使用量,不足2/3时,会把redoentity写回在线重做日志文件、每隔3s检查重做日志缓冲区,有1M以上没有写回时、在DBWRn动作之前,遵循日志写优先机制。

6、SMON(systemmonitor)系统监控进程,功能执行InstanceRecovery、收集空间(例行性工作)。

InstanceRecovery:

当数据库异常中断后再开启时,SMON会自动执行InstanceRecovery,也就是将在线重做日志里面的数据写回到数据文件里。

收集空间:

将表空间里相邻的空间进行合并,但表空间必须是数据库字典管理模式。

小备注:

表空间管理模式有两种:

本地管理模式、数据库字典管理模式

7、PMON(processmonitor),过程(进程)监控进程会监视数据库的用户进程。

PMON主要有4个工作:

当前端的程序当掉时,恢复未commit的数据、释放不当中断连接而被锁定的所有对象、释放不当中断连接而被占用的资源(如内存)、重启死掉的共享模式的连接。

8、CKPT(checkpoint),主要负责更新数据库的最新状态,对象是数据文件和控制文件。

实际上,它的动作简单,只是要求数据缓冲区里的DirtyBuffer回写到数据库而已,因为真正做动作的是DBWRn,动作完成之后,CKPT会在控制文件中做记录。

CKPT的功能就是告知DBWR进行此动作,同时,CKPT当Checkpoint完成时,会更新控制文件和数据文件的文件头,万一需要Instance恢复,也不需要Checkpoint之前的数据,即可缩短启动时间。

小备注:

每隔一段固定的时间,DBWRn会把已经修改过的数据缓冲区里的DirtyBuffer回写到数据库,这个时间点即为Checkpoint。

另外,注意下Checkpoint的时机点,P94

9、ARCn(Archiver),Oracle数据库有两种ARCn——NOARCHIVELOG、ARCHIVELOG。

当Oracle数据库设定为ARCHIVELOGMode时,ARCn会在LogSwitch时自动将RedoLogFile复制一份到指定的目录下,因此,在线重做日志文件的副本即称为归档日志文件(Archivedredologs)

10、注意下Session与Connection的差别:

Connection是指UserProcess与OracleInstance之间沟通的途径。

而Session则是一个特定的Connection,Session是当被OracleServer认定你可以连到OracleServer开始直到结束(注销账号或是不正常离线)。

也即,UserProcess的开始是当你验证时,验证成功才能建立session。

之所以是有沟通途径是代表你有Connection,但必须认证通过才可以Communication,而要可以Communication才算是有Session。

1、showuser//显示用户

setsqlprompttieyasha>//设置提示符为“tieyasha>”

conn(nect)sys/oracleassysdba;//切换用户,扮演sysdba的角色

2、等值连接(依靠外键)//不一定非得是外键吧,查查书(数据库原理及应用)

select*

fromscott.dept,scott.emp

wherescott.dept.deptno=scott.emp.deptno;

3、出错了之后编辑缓冲文件:

ed(it)//调缓冲文件,里边包含最新的命令,编辑好之后,保存退出即可

4、

当机//要有sysdba或sysoper权限才能做,两者相比sysdba角色更加的牛叉

shutdown//在所有的用户进程关闭之后才当掉,超级的慢,而且有可能关不掉哦~

shtdownimmediate;//如果权限不够的话不行,执行下面命令

connsys/oracleassysdba;//sysdba身份

shutdownimmediate;//立即当机

关闭过程:

将数据库关闭、将实例与数据库连接中断、实例关闭、所有操作停止状态

5、startup//启动命令,默认的状态为OPEN

开启过程:

所有操作停止状态、实例启动、控制文件打开、所有文件打开

1、Rowid对应于书中108页左右,Oracle基本对象表下边的东西

selectrowid,deptno,dname,locfromscott.dept;//引导例子

2、Rowid是个虚拟的字段,代表一笔数据行独特的位置。

只能在SQL语法中被使用者存取。

3、关于Rowid

Rowid是个虚拟的字段,每一笔数据行都有自己独特的(独一无二的)Rowid。

Rowid的作用是让使用者很快的找到所需的数据。

Rowid不存在特定的表里,而是动态产生的。

Rowid提供使用者最快速的查询速度,索引后面跟着是Rowid,因此,如果跳过索引直接查询Rowid最快。

Rowid存储在索引里边。

另外,Rowid用18个字符表示,占了10个字节(6dataobjectnumber、3relativefilenumber、6blocknumber、3rownumber),更加详细见P109

4、管理表(数据链接篇)

数据链接两种类型:

行迁移、行链接

a、行迁移,Pctfree预留太小,修改数据后,一笔数据行太大了,一个数据块放不下,叫做行链接。

放不下数据可以搬家,行迁移,但是rowid会改变,索引也改变,影响太大。

Oracle使用了一种影响最小的方式,就是把Rowheader留下来,加上一个指标(point)。

最后...就是rowid不变,数据位置改变的意思。

b、行链接,一笔数据行太大了,一个数据块放不下,于是放在几个数据块里,叫做行链接

解决a、b的方法大致如下:

将pctfree加大,此法只能对将来的数据生效。

使用搬移表空间命令,消除已存在的行迁移。

利用Export方式备份表,删除(drop)原来的表,使用新的pctfree参数重建表,将数据import到重建后的表。

5、表管理(高水位线篇)

高水位线(High-waterMark)是Oracle里的一个相当重要的机制,其上的数据块从未使用过。

Freelist只包含高水位线以下的数据块,一个表就是一个段,高水位线会在我们的Segmentheader里边,删除数据后,不会降低高水位线,当Oracle做全表扫描(FullTableScan)时,就会去读取高水位线以下的所有数据块。

只有截断表(Truncatetable)才能把空间的高水位线重现设定,由此可知,如果要把一个表里的数据全部删掉,截断(truncate)命令会比删除命令更加适当。

下边是用来确认高水位线的吗?

好像是滴!

setserveroutputon;//设置服务输出打开

declare//声明

v_charvarchar2(10):

='aaa';//PL/SQL,扩展版

begin

dbms_output.put_lien(v_char);//执行体,调函数,输出,

end;

///这个好像只是语法模型,不是完整的语句,所以结果悲催了

小备注:

java的包,微软的库(公司不同叫法不一样,实际上没有太大的区别)

6、修改表存储参数

可以用sql语句,也可以用OEM进行,由于存储参数很多,个人感觉还是用OEM的好。

7、截断表

createtablestudent

snovarchar2(12)

);

insertintostudentvalues('1');

insertintostudentvalues('2');

insertintostudentvalues('3');

insertintostudentvalues('4');

select*fromstudent;

truncatetablestudent;//表被截断

select*fromstudent;

descstudent;//表结构还在,数据已经没了

备注:

“truncatetablestudent;”近似等价于“deletefromstudent;”,但是两者有很大区别,默认truncate表后表所占的区数会变为表MAXEXTENT参数指定的区数,高水位线也会降低到第一个数据块。

turncate有两种方式(default、reuse),reuse会保留原来的空间,两者高水位线都会降低。

truncate效率比delete高(delete一行一行的删),truncate之后,无法rollback恢复。

truncatetablestudentreuse;//悲了,老师要再思考一下先

insertintostudentvalues('1');

8、如果要删除的表与别的表有主键(PrimaryKey)和外部键(ForeignKey)的关系,则必须加上CASCADECONSTRAINTS,加上CASCADECONSTRAINTS会删除一个以上的表,因此,当要删除某一个对象时,最好事先不要加上CASCADECONSTRAINTS,如果不行,请确认是否有ForeignKey。

9、在线重新定义表(OnlineTableRedefinition)的功能可以让数据库管理员在管理表时,使用者仍然可以新增、修改于删除表作业。

要有一定的权限才行。

p129-p133

流程:

第1步

setserveroutputon;

execdbms_redefinition.can_redef_table('SYSTEM','STUDENT',1)//悲了

showuser;

connsystem/oracle//切换用户,连接到system用户

execdbms_redefinition.can_redef_table('SYSTEM','STUDENT',1)//悲了

alteruserscottaccountunlock;//解锁用户

showuser;

connscott/tiger//scott是Oracle公司的一个程序员,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 工学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1