ORACL重点知识.docx
- 文档编号:8359112
- 上传时间:2023-01-30
- 格式:DOCX
- 页数:28
- 大小:32.04KB
ORACL重点知识.docx
《ORACL重点知识.docx》由会员分享,可在线阅读,更多相关《ORACL重点知识.docx(28页珍藏版)》请在冰豆网上搜索。
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公司的一个程序员,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ORACL 重点 知识