Oracle基础知识学习笔记自己整理的.docx
- 文档编号:12880594
- 上传时间:2023-04-22
- 格式:DOCX
- 页数:20
- 大小:86.80KB
Oracle基础知识学习笔记自己整理的.docx
《Oracle基础知识学习笔记自己整理的.docx》由会员分享,可在线阅读,更多相关《Oracle基础知识学习笔记自己整理的.docx(20页珍藏版)》请在冰豆网上搜索。
Oracle基础知识学习笔记自己整理的
基本概念:
数据:
描述事物的符号;
数据库:
数据存放的地方,数据库是由数据和数据库对象组成的;
数据库管理系统(DBMS):
用于管理数据的计算机软件,使用户能方便的定义和操纵数据,维护数据的安全性和完整性,以及进行多用户下的并发控制和数据库恢复。
关系数据库(RDB):
基于关系模型的数据库。
ORACLE数据库的体系结构是由一个实例和若干个数据库文件组成。
SQL语句分为:
数据定义语句(DDL):
create、drop、alter、truncate(不能回滚)
数据操作语句(DML):
insert、select、update、delete、merge
数据控制语句(DCL):
grant、revoke
事物控制语句:
commit、rollback、savepoint
ORACLE数据库的核心组件:
数据字典(DD)
动态性能表(DPT)
触发器
PL/SQL包
用户与角色:
角色是一些权限的集合,分为dba、connect、resource、exp_full_database、imp_full_database。
用户分为sys、system。
用户权限包括两种:
是指执行某一SQL语句或访问另一用户对象的权限。
它分为系统权限和对象权限。
(Dba_roles/dba_roles_privs/dba_sys_privs/dba_tab_privs/dba_col_privs/role_role_privs/role_sys_privs/role_tab_privs)
创建用户:
Createuserusernameidentifiedbypassword;
修改用户:
Alteruserusernameidentifiedbynewpassword;
创建角色:
Createrolerolenameidentifiedbypassword;
修改角色:
Alterrolerolenameidentifiedbynewpassword;
ORACLE数据库的物理结构:
1.数据文件:
用于存放所有的数据库数据,若干个数据文件组成表空间;它包括系统数据(数据字典)、用户数据(表、索引、簇等)、undo数据等。
当建立数据库或表空间时,数据文件是通过DATAFILE选项制定的。
一个或多个数据文件在物理上组成一个表空间。
(v$datafile、v$datafile_header)
2.控制文件:
每个数据库必须至少得有两个控制文件,以组为单位。
Oracle系统通过控制文件保持数据库的完整性以及决定恢复数据时使用哪些重做日志。
Oracle通过控制文件将实例与数据库连接在一起。
当装载数据库时(mount),Oracle根据初始化参数control_files定位控制文件;当打开数据库时,Oracle会根据控制文件记载的信息,打开所有数据文件和日志文件。
(v$controlfile)
3.重做日志文件:
用于记录数据库的活动,记录数据库的所有修改操作;
日志组:
在单实例环境中,只有一个重做线程;在RAC(realapplicationcluster)环境中,包含多个重做线程。
每个重做线程至少包含两个日志组。
(v$log、v$logfile)
4.归档日志文件:
当数据库处于archivelog状态时,Oracle将自动归档重做日志文件。
(v$archived_log)
5.参数文件:
定义启动例程的初始化参数,包含了实例和数据库配置参数列表,包括文本参数文件(PFILE)和服务器参数文件(SPFILE),PFILE的名称格式为initSID.ora,SPFILE的名称格式为spfileSID.ora,SID是例程名。
6.口令文件:
验证特权用户,特权用户是指具有sysdba或sysoper权限的特殊数据库用户。
(v$pwfile_users)
7.报警和跟踪日志文件;
8.备份文件。
ORACLE数据库的逻辑结构:
1.表空间(tablespace):
是数据库的逻辑划分,每个数据库至少有一个表空间,一个表空间只能属于一个数据库。
system表空间必须在MOUNT状态下恢复,而其它的数据表空间可以在OPEN状态下恢复,临时表空间不需要恢复。
2.段(segment):
由一组范围组成,分为数据段、索引段、回滚段和临时段。
数据段:
对于每个非聚集的表有一数据段,表的所有数据存放在该段里。
每一个聚集有一个数据段。
索引段:
每一个索引有一个索引段,存储索引数据。
回滚段:
由DBA建立,用于存储操作之前的数据影像(备份)。
查看是否有回滚段竞争:
select*fromv$waitstat;
临时段:
当一个SQL语句需要临时工作区时,由ORACLE建立。
当语句执行完毕,临时段的范围退回给系统。
3.盘区(extent):
由连续数据块组成;
4.ORACLE数据块(block):
是ORACLE管理数据文件中存储空间的最小逻辑单位。
数据块的物理结构:
块头(header):
包含块的信息,即什么类型的段数据存储在块中,什么段在块中有数据,块地址以及指向存储在其中的实际行的指针;
数据存储区(data):
是块实际存储数据的地方;
自由空间区(freespace):
保留区域,用于存储有关在块中的行即将要更新的信息。
PCTFREE和PCTUSED:
PCTFREE规定了在块中保留的用于更新操作所需的自由空间的百分比。
PCTUSED规定了最小的已使用空间的百分比。
已使用空间百分比低于PCTUSED时,块被加入到自由列表中。
自由列表中的块可以insert操作。
PCTFREE和PCTUSED是段的两个参数。
当ORACLE向数据库中写信息时,必须首先在一个段的分配区中找到一个或更多块来存储信息。
ORACLE保留了块的一个列表,这些块对每个段来说都是自由的,称为自由列表。
ORACLE使用PCTFREE和PCTUSED参数的组合确定块何时有、何时没有足够的空间接受新信息。
pctused:
如果数据块的使用率小于pctused的值,则该数据块重新加入到freelist中。
Pctfree:
如果数据块的使用率高于pctfree的值,则该数据块从freelist中移出。
方案和方案对象(schema)
方案是方案对象的集合;方案对象是直接引用数据库数据的逻辑结构,包括表、视图、索引、聚集、序列、同义词、数据库链、过程和包等。
表(table):
数据库数据存储的基本单位。
视图(view):
一个视图是由一个或者多个表中的数据的一种定制的表示,是一个查询定义,可以认为是一个存储的查询或是一个虚表。
视图可以被查询,但修改、插入或者删除时具有一定的限制,受到基表的完整性约束和触发器的限制。
索引(index):
索引是为了提高数据检索的性能而建立的,利用它可快速的确定指定的信息。
索引分为:
B-TreeIndex(最常用)、全局或局部索引、位图索引(BitmapIndex)、函数索引、反向键索引、键压缩索引、分区索引。
索引通常能提高select/update/delete的性能,会降低insert的速度。
B-TreeIndex:
B树索引是一个典型的树结构。
其包含的组件主要是:
叶子节点(Leafnode):
包含条目直接指向表里的数据行;
分支节点(Branchnode):
包含的条目指向索引里其他的分支节点或者是叶子节点;
根节点(Rootnode):
一个B树索引只有一个根节点,它实际就是位于树的最顶端的分支节点。
按照存储结构的不同可分为簇索引(clusteredindex)和非簇索引(nonclusteredindex);
簇索引:
对表的物理数据页中的数据按列排序,再重新存储在磁盘上。
簇索引查找数据很快,但占磁盘的空间也很大。
非簇索引:
将行定位器按关键字的值用一定的方式排序,与表的行在数据页的排序是不匹配的。
一个表可以建立很多非簇索引,但只能建立一个簇索引。
创建索引的语句:
create[unique][clustered|nonclustered]indexindex_nameon{table|view}(column[asc|desc])
[with
[pad_index],
[[fillfactor=fillfactor],
[ignore_dup_key],
[drop_existing],
[statistics_norecompute],
[sort_in_tempdb]][onfilegroup]
其中
Unique:
创建唯一索引,及索引的键值不重复。
Clustered:
簇索引;
Pad_index:
指定填充索引的内部节点的行数,至少应大于等于两行;
Fillfactor:
填充因子,指定创建索引时,每个索引页的数据占索引页大小的百分比;
Ignore_dup_key:
控制了当向包含于一个唯一约束中的列中插入重复数据时数据库所做的反应;
Drop_existing:
指定要删除并重新创建簇索引。
删除簇索引会导致所有的非簇索引被重建;
Statistics_norecompute:
指定分布统计不自动更新;
Sort_in_tempdb:
指定用于创建索引的分类排序结果将被存储到tempdb数据库中;
Onfilegroup:
指定存放索引的文件组。
ORACLE数据字典(DD)
数据字典的结构是基表和视图,记录了数据库的系统信息,其所有者为SYS。
它由内部RDBMS(X$)表,数据字典表($),动态性能视图(v$)和数据字典视图(all_,user_,dba_)组成。
当执行DDL语句时,数据库修改数据字典。
数据字典视图有三种:
ALL_xxx,USER_xxx,DBA_xxx。
(dba_tables、user_tables、all_tables、dba_users、dba_sys_privs(用户所具有的系统权限)、dba_tab_privs(用户所具有的对象权限)、dba_col_privs(用户所具有的列权限)、dba_role_privs(用户所具有的角色)、dba_jobs(sql执行计划))。
动态性能视图(DynamicPerformanceTables)
是一组虚表(Virtualtables),记录数据库当前的活动情况,从内存和控制文件中获取信息,所有者为SYS,以v$开头,v$fixed_table(一览表);(v$controlfile、v$database、v$datafile、v$instance、v$logfile、v$parameter、v$session、v$SGA、v$spparameter、v$tablespace、v$thread、v$version、v$db_cache_advice(buffercache命中率))
诊断IO、CPU性能状况的方法:
查询并分析v$system_event/v$session_event(dbfilesequent)/v$session_wait(p1-p3的值.file_id/block_id/blocks)可查询Oracle系统的性能(包括CPU/IO/其他性能状况);
查询并分析v$sqlarea(disk_reads或buffer_gets/executions较大的SQL)。
实例(instance)
实例是用来访问数据库文件集的存储结构以及后台进程的集合,它是存取和控制数据库的软件机制。
ORACLE实例分为单进程实例和多进程实例。
实例是由内存结构和进程结构组成的;
内存结构:
基本的内存结构有系统全局区(SGA)和程序全局区(PGA)。
系统全局区(SGA):
是系统为实例分配的一组共享缓冲存储区。
它分为:
数据高速缓存区(DatabaseBufferCache):
用来存储最近访问的数据块信息。
由DB_CACHE_SIZE决定,它的大小由数据库实例init.ora中的DB_BLOCK_BUFFERS决定,ORACLE用LRU(最近最少算法)来管理可用空间。
它分为脏列表、LRU(LeastRecentlyUsed)列表(空闲缓冲块、正在存取的缓冲块、已被修改但未被移到脏列表的缓冲块)
SQL共享池(SharePool):
存放最近执行的SQL语句和数据字典信息。
大小由SHARED_POOL_SIZE决定。
分为字典缓存区(DatabaseDictionaryBufferCache)和库缓存区(共享SQL区和PL/SQL区);sharepool的空闲量(诊断其性能):
selectinst_id,bytesfromgv$sgastat;空闲大小:
selectvaluefromv$parameterwherename=’shared_pool_size’;
重做日志缓存区(RedoLogBufferCache):
在重做项被写到重做日志前,事物先被写到重做日志缓冲区中,它的大小由init.ora中的LOG_BUFFER决定。
大池;Java池;
进程结构:
用户进程:
用于执行一个应用程序的软件代码,用户进程同服务器进程进行通信是通过程序接口完成的。
服务器进程:
ORACLE创建服务器进程来处理来自连接上的用户进程的请求。
一个服务器进程负责同用户进程的会话。
后台进程:
为了增强用户进程运行的ORACLE程序处理的功能。
几个重要的后台进程:
数据写(DBWn):
数据库书写器进程,从数据高速缓存区中将修改的数据块(脏缓冲区)写入到数据文件中,并使用LRU算法来保持缓冲区中的数据块为最近经常使用的,以减少I/O次数。
该进程在启动实例时自动启动。
日志写(LGWR):
日志书写器将重做日志写入日志文件中。
重做日志的实体是在SGA的重做日志缓冲区中生成的,LGWR将重做日志实体写入到重做日志文件中。
该进程在启动实例时自动启动。
系统监视器(SMON):
在一个失败实例进程启动的时候执行崩溃回复,将数据字典中空闲的区域连接起来变成连续的。
1.redo:
重新应用被记载到重做日志但未写入数据文件的数据。
2.undo:
取消未提交的数据。
在打开数据库之后,Oracle自动使用undo段回退未提交的数据。
进程监视器(PMON):
在用户进程失败的时候重新创建进程。
检查点(CKPT)
归档(ARCH)
ORACLE数据库的启动与关闭
启动:
1.nomount(非安装启动):
NONOUNT选项仅仅创建一个Oracle实例。
读取init.ora初始化参数文件、启动后台进程、初始化系统全局区(SGA)。
Init.ora文件定义了实例的配置,包括内存结构的大小和启动后台进程的数量和类型等。
实例名根据Oracle_SID设置,不一定要与打开的数据库名称相同。
2.mount(安装启动):
创建实例并且安装数据库,但没有打开数据库。
Oracle系统读取控制文件中关于数据文件和重作日志文件的内容,但并不打开该文件。
这种打开方式常在数据库维护操作中使用,如对数据文件的更名、改变重作日志以及打开归档方式等。
3.open(打开):
创建实例、安装实例和打开数据库的所有三个步骤。
此时数据库使数据文件和重作日志文件在线,通常还会请求一个或者是多个回滚段。
这时系统除了可以看到前面StartupMount方式下的所有提示外,还会给出一个"数据库已经打开"的提示。
此时,数据库系统处于正常工作状态,可以接受用户请求。
其他打开方式:
STARTUPRESTRICT:
数据库将被成功打开,但仅仅允许一些特权用户(具有DBA角色的用户)才可以使用数据库。
这种方式常用来对数据库进行维护,如数据的导入/导出操作时不希望有其他用户连接到数据库操作数据。
startuppfile=参数文件名:
带初始化参数文件的启动方式,先读取参数文件,再按参数文件中的设置启动数据库。
关闭:
1.shutdownnormal:
发出该命令后,任何新的连接都将再不允许连接到数据库。
在数据库关闭之前,Oracle将等待目前连接的所有用户都从数据库中退出后才开始关闭数据库。
采用这种方式关闭数据库,在下一次启动时不需要进行任何的实例恢复。
2.shutdownimmediate:
常用的一种关闭数据库的方式,想很快地关闭数据库,但又想让数据库干净的关闭,常采用这种方式。
当前正在被Oracle处理的SQL语句立即中断,系统中任何没有提交的事务全部回滚。
如果系统中存在一个很长的未提交的事务,采用这种方式关闭数据库也需要一段时间(该事务回滚时间)。
系统不等待连接到数据库的所有用户退出系统,强行回滚当前所有的活动事务,然后断开所有的连接用户。
3.shutdowntransactional:
该命令常用来计划关闭数据库,它使当前连接到系统且正在活动的事务执行完毕,运行该命令后,任何新的连接和事务都是不允许的。
在所有活动的事务完成后,数据库将和SHUTDOWNIMMEDIATE同样的方式关闭数据库。
4.shutdownabort:
关闭数据库的最后一招,也是在没有任何办法关闭数据库的情况下才不得不采用的方式,一般不要采用。
如果下列情况出现时可以考虑采用这种方式关闭数据库。
关闭方式
abort
immediate
transactional
normal
允许新的连接
×
×
×
×
等待直到当前会话终止
×
×
×
√
等待直到当前事务终止
×
×
√
√
强制checkpoint,关闭所有文件
×
√
√
√
表空间(tablespace)与数据文件(datafile):
ORACLE数据库将数据逻辑的存储在表空间里,物理的存储在数据文件里。
一个表空间只能属于一个数据库,而一个数据库能拥有多个表空间。
一个表空间由一个或多个数据文件组成,一个数据文件只能属于一个表空间。
数据文件是存储模式对象数据的容器(仓库)。
表空间在数据库中分为两种:
系统表空间和非系统表空间。
系统表空间中存有数据字典,系统表空间中还包含系统还原(回滚)段。
非系统表空间由DBA创建,非系统表空间可以存储用户的数据段、索引(index)段、还原(undo)段和临时(temp)段。
创建非系统表空间的语句:
CREATETABLESPACE表空间名
[DATAFILE子句]
[MINIMUMEXTENT正整数[K|M]]
[BLOCKSIZE正整数[K]]
[LOGGING|NOLOGGING]
[DEFAULT存储子句]
[ONLINE|OFFLINE]
[PERMANENT|TEMPORARY]
[区段管理子句]
[段管理子句]
其中
DATAFILE子句:
组成所要创建的表空间的文件说明。
MINIMUMEXTENT:
表空间中所使用的每个EXTENT都必须是该参数所指定数的整数倍。
BLOCKSIZE:
为该表空间说明非标准块的大小。
在使用这一子句之前,您必须先设置DB_CACHE_SIZE:
参数和DB_nK_CACHE_SIZE参数,而且该子句中所说明的正整数一定与DB_NK_CACHE_SIZE参数的设定相对应。
LOGGING:
说明在该表空间中所有数据的变化都将写入重做日志文件中,这也是默认方式。
NOLOGGING:
说明在该表空间中所有数据的变化不都写入重做日志文件中,NOLOGGING只影响一些DML和DDL命令。
DEFAULT存储子句:
说明所有在该表空间中所创建的对象的默认存储参数。
OFFLINE:
说明该表空间在创建后立即被置为脱机,即不能使用。
表空间的磁盘空间管理
数据字典管理表空间:
在早期是由数据字典管理表空间的,它是通过freelist表来管理表空间的。
数据字典(系统)管理表空间中所有的EXTENTS的管理都是在数据字典中进行的,而且每一个存储在同一个表空间中的段可以具有不同的存储子句。
这种管理方式可以修改存储参数,因此其存储管理较灵活,但系统的效率较低,并且有时需要合并碎片。
创建数据字典管理的表空间语句:
CREATETABLESPACETABLESPACENAMEDATAFILE‘路径’SIZEM
MINIMUMEXTENT50KEXTENTMANAGEMENTDICTIONARY
DEFAULTSTORAGE(INITIAL50KNEXT50KMAXEXTENTS100PCTINCREASE0);
其中为了防止用户在创建对象时使用的EXTENT过小而产生过多的碎片,决定最小的EXTENT为50K(MINIMUMEXTENT50K)。
当需要磁盘空间的自动分配时第一次分配为50K(INITIAL50K),第二次也为50K(NEXT50K),所分配的最大磁盘空间为100个EXTENTS(MAXEXTENTS100)。
本地管理表空间:
它的空闲EXTENTS是在表空间中管理的,使用位图(Bitmap)来记录空闲EXTENTS,位图中的每一位对应一块或一组块,而每位的值指示空闲或分配。
当一个EXTENT被分配或释放时,Oracle服务器就会修改位图中相应位的值来反映该EXTENT的新的状态。
位图存放在表空间所对应的数据文件的文件头中。
使用本地管理的表空间减少了数据字典表的竞争,而且当磁盘空间分配或收回时也不会产生回滚(还原),它也不需要合并碎片。
但是本地管理表空间无法修改存储参数,因此没有数据字典管理表空间那样灵活,但系统效率较高。
在本地管理的表空间中,表空间的管理,如磁盘空间的分配与释放等已经不在需要操作数据字典了,系统表空间的瓶颈问题得到了很好的解决。
创建本地管理的表空间:
CREATETABLESPACETABLESPACENAMEDATAFILE‘路径’SIZE多少M
EXTENTMANAGEMENTLOCAL
UNIFORMSIZE多少M;
还原表空间(undo):
自动管理还原(回滚)数据。
还原表空间是用来存储还原(回滚)段的,在还原表空间中不能包含任何其它的对象。
还原表空间中的区段(extents)是由本地管理的,而且在创建还原表空间的SQL语句中只能使用DATAFILE和EXTENTMANAGEMENT子句。
在数据库中可以存在多个undo表空间,但同一时刻只能使用一个undo表空间。
临时表空间(temporary):
作为排序操作使用的(通常是在pga或sort_area_size中完成排序的,如果不能就将在临时表空间进行(disksort))。
当用户的SQL语句中使用了诸如ORDERBY,GROUPBY子句时,Oracle服务器就需要对所选取的数据进行排序,这时如果排序的数据量很大,内存的排序区(在PGA中)可能装不下,Oracle服务器就要把一些中间的排序结果写到磁盘上,即临时表空间中。
当用户的SQL语句中经常有大规模的多重排序而内存的排序区不够时,使用临时表空间就可以改进数据库的效率。
临时表空间中的排序段是在实例启动后当有第一个排序操作时创建的,排序段在需要时可以通过分配EXTENTS来扩展并一直可以扩展到大于或等于在该实例上所运行的所有排序活动的总和。
当创建临时表空间时,必须使用标准数据块。
另外Oracle还推荐使用本地管理的表空间。
默认临时表空间:
如果在创建一个数据库时没有设定默认临时表空间,那么任何一个用户如果在创建时没有使用TEMPORARYTABLESPACE子句,就将使用SYSTEM表空间作为排序区。
这将使SYSTEM表空间碎片化,从而使数据库系统的效率下降。
如果在创建一个数据库时没有设定默认临时表空间,Oracle服务器将把SYSTEM表空间是默认临时表空间的报警信息写入报警文件。
因此说明一个数据库范围的默
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Oracle 基础知识 学习 笔记 自己 整理