分享

Oracle基础知识

 思奇剑 2006-11-10
 

Oracle基础知识

一、oracle的体系结构

1、物理结构(由控制文件、数据文件、重做日志文件、参数文件、归档文件、口令文件组成)

  一个数据库中的数据存储在磁盘上物理文件,被使用时,调入内存。

其中控制文件、数据文件、重做日志文件、跟踪文件及警告日志(trace files,alert files)属于数据库文件;

参数文件(parameter file)口令文件(password file)是非数据库文件

1.1数据文件:存储数据的文件.数据文件典型地代表了根据他们使用的磁盘空间和数量所决定的一个Oracle数据库的容积。

  由于性能原因,每一种类型的数据放在相应的一个或一系列文件中,将这些文件放在不同的磁盘中。
  types:
  .data dictionary .data
  .redo data .index
  .temporary data 等等

1.2控制文件:包含维护和验证数据库完整性的必要信息、例如,控制文件用于识别数据文件和重做日志文件,一个数据库至少需要一个控制文件.

控制文件内容

  。数据库名

  。表空间信息

  。所有数据文件的名字和位置

  。所有redo日志文件的名字和位置

  。当前的日志序列号

  。检查点信息

  。关于redo日志和归档的当前状态信息

  控制文件的使用过程

  控制文件把Oracle引导到数据库文件的其它部分。启动一个实例时,Oracle 从参数文件中读取控制文件的名字和位置。安装数据库时,Oracle 打开控制文件。最终打开数据库时,Oracle 从控制文件中读取数据文件的列表并打开其中的每个文件。

  1.3重做日志文件

  含对数据库所做的更改记录,这样万一出现故障可以启用数据恢复。一个数据库至少需要两个重做日志文件.

  1.4 跟踪文件及警告日志(Trace Files and Alert Files)

  在instance 中运行的每一个后台进程都有一个跟踪文件(trace file)与之相连。Trace file 记载后台进程所遇到的重大事件的信息。

  警告日志( Alert Log)是一种特殊的跟踪文件,每个数据库都有一个跟踪文件,同步记载数据库的消息和错误.

  1.5参数文件:包括大量影响Oracle数据库实例功能的设定,如以下设定:

  。数据库控制文件的定位

  。Oracle用来缓存从磁盘上读取的数据的内存数量

。默认的优化程序的选择.

 和数据库文件相关,执行两个重要的功能

  1〉为数据库指出控制文件

  2〉为数据库指出归档日志的目标

  1.6归档文件:是重做日志文件的脱机副本,这些副本可能对于从介质失败中进行恢复很必要。
  1.7口令文件:认证哪些用户有权限启动和关闭Oracle例程.

2、逻辑结构(表空间、段、区、块)

  表空间:是数据库中的基本逻辑结构,一系列数据文件的集合。

  段:是对象在数据库中占用的空间.

  区:是为数据一次性预留的一个较大的存储空间.

  块:ORACLE最基本的存储单位,在建立数据库的时候指定.

3、内存分配(SGAPGA

  SGA:是用于存储数据库信息的内存区,该信息为数据库进程所共享。它包含Oracle 服务器的数据和控制信息,它是在Oracle服务器所驻留的计算机的实际内存中得以分配,如果实际内存不够再往虚拟内存中写。

  PGA:包含单个服务器进程或单个后台进程的数据和控制信息,与几个进程共享的SGA 正相反,PGA 是只被一个进程使用的区域,PGA 在创建进程时分配,在终止进程时回收.

4、后台进程

  包括数据写进程(Database Writer,DBWR)、日志写进程(Log Writer,LGWR)、系统监控(System Monitor,SMON)、进程监控(Process Monitor,PMON)、检查点进程(Checkpoint Process,CKPT)、归档进程、服务进程、用户进程)

数据写进程:负责将更改的数据从数据库缓冲区高速缓存写入数据文件

  日志写进程:将重做日志缓冲区中的更改写入在线重做日志文件

  系统监控:检查数据库的一致性如有必要还会在数据库打开时启动数据库的恢复

  进程监控:负责在一个Oracle 进程失败时清理资源

  检查点进程:负责在每当缓冲区高速缓存中的更改永久地记录在数据库中时,更新控制文件和数据文件中的数据库状态信息。该进程在检查点出现时,对全部数据文件的标题进行修改,指示该检查点。在通常的情况下,该任务由LGWR执行。然而,如果检查点明显地降低系统性能时,可使CKPT进程运行,将原来由LGWR进程执行的检查点的工作分离出来,由CKPT进程实现。对于许多应用情况,CKPT进程是不必要的。只有当数据库有许多数据文件,LGWR在检查点时明显地降低性能才使CKPT运行。CKPT进程不将块写入磁盘,该工作是由DBWR完成的。 init.ora文件中 CHECKPOINT_PROCESS 参数控制CKPT进程的使能或使不能。缺省时为FALSE,即为使不能。

  归档进程:在每次日志切换时把已满的日志组进行备份或归档

  服务进程:用户进程服务。

  用户进程:在客户端,负责将用户的SQL语句传递给服务进程,并从服务器段拿回查询数据。

5SCN(System ChangeNumber)

  系统改变号,一个由系统内部维护的序列号。当系统需要更新的时候自动增加,他是系统中维持数据的一致性和顺序恢复的重要标志。

小结:

1.一个表空间只能属于一个数据库。

2.每个数据库最少有一个控制文件(建议3个,分别放在不同的磁盘上)。  3.每个数据库最少有一个表空间(SYSTEM表空间)。

4.建立SYSTEM表空间的目的是尽量将目的相同的表存放在一起,以提高使用效率,只应存放数据字典。

5.每个数据库最少有两个联机日志组,每组最少一个联机日志文件。

6.一个数据文件只能属于一个表空间。

7.一个数据文件一旦被加入到一个表空间中,就不能再从这个表空间中移走,也不能再加入到其他表空间中。

8.建立新的表空间需要建立新的数据文件。

9.数据文件被ORACLE格式化为ORACLE块,Oracle9i以前版本中,ORACLE块的大小是在第一次创建数据库时设定的。

10.并且以后不能改变,要想改变,只能重建数据库。

11.一个段segment只能属于一个表空间,但可以属于多个数据文件。

12.一个区extent只能属于一个数据文件,即区间(extent)不能跨越数据文件。

13.PCTFREEPCTUSED总和不能大于等于100

14.单独一个事务不能跨越多个回滚段。

15.索引表不含ROWID值。

16.拥有不同大小的回滚段没有任何益处。

17.COMMIT后,数据不一定立即写盘(数据文件)。

18.一个事务即使不被提交,也会被写入到重做日志中。

19.Oracle 8.0.4中,在初始安装时建立的缺省数据库,实例名为ORCL

20.一个块的最大长度为16KB(2K4K8K16K)。  每个数据库最大文件数(按块大小)

 2K块        20000个文件
  4K块        40000个文件
  8K块或以上     65536个文件

21.oracle server可以同时启动多个数据库

22.一套操作系统上可以安装多个版本的ORACLE数据库系统(UNIX可以,NT不可以)。

23.一套ORACLE数据库系统中可以有多个ORACLE数据库及其相对应的实例

24.每个ORACLE数据库拥有一个数据库实例(INSTANCE)(OPS除外)。25.所以,一套操作系统上同时可以有多个oracle数据库实例启动。

二、ORACLE性能调优原则

任何事情都有它的源头,要解决问题,也得从源头开始,影响ORACLE性能的源头非常多,主要包括如下方面:

数据库的硬件配置:CPU、内存、网络条件

  1. CPU:在任何机器中CPU的数据处理能力往往是衡量计算机性能的一个标志,并且ORACLE是一个提供并行能力的数据库系统,在CPU方面的要求就更高了,如果运行队列数目超过了CPU处理的数目,性能就会下降,我们要解决的问题就是要适当增加CPU的数量了,当然我们还可以将需要许多资源的进程KILL掉;

  2. 内存:衡量机器性能的另外一个指标就是内存的多少了,在ORACLE中内存和我们在建数据库中的交换区进行数据的交换,读数据时,磁盘I/O必须等待物理I/O操作完成,在出现ORACLE的内存瓶颈时,我们第一个要考虑的是增加内存,由于I/O的响应时间是影响ORACLE性能的主要参数,我将在这方面进行详细的讲解

  3. 网络条件:NET*SQL负责数据在网络上的来往,大量的SQL会令网络速度变慢。比如10M的网卡和100的网卡就对NET*SQL有非常明显的影响,还有交换机、集线器等等网络设备的性能对网络的影响很明显,建议在任何网络中不要试图用3个集线器来将网段互联。

  OS参数的设置

  下表给出了OS的参数设置及说明,DBA可以根据实际需要对这些参数进行设置

内核参数名

说明

bufpages

buffer空间不按静态分配,采用动态分配,使bufpages值随nbuf一起对buffer空间进行动态分配。

create_fastlinks

HFS文件系统允许快速符号链接

dbc_max_pct

加大最大动态buffer空间所占物理内存的百分比,以满足应用系统的读写命中率的需要。

dbc_min_pct

设置最小动态buffer空间所占物理内存的百分比

desfree

提高开始交换操作的最低空闲内存下限,保障系统的稳定性,防止出现不可预见的系统崩溃(Crash)。

fs_async

允许进行磁盘异步操作,提高CPU和磁盘的利用率

lotsfree

提高系统解除换页操作的空闲内存的上限值,保证应用程序有足够的可用内存空间。

maxdsiz

针对系统数据量大的特点,加大最大数据段的大小,保证应用的需要。(32位)

maxdsiz_64bit

maximum process data segment size for 64_bit

Maxssiz

加大最大堆栈段的大小。(32_bit

maxssiz_64bit

加大最大堆栈段的大小。(64_bit

Maxtsiz

提高最大代码段大小,满足应用要求

maxtsiz_64bit

原值过大,应调小

Minfree

提高停止交换操作的自由内存的上限

Shmem

允许进行内存共享,以提高内存的利用率

Shmmax

设置最大共享内存段的大小,完全满足目前的需要

Timeslice

由于系统的瓶颈主要反映在磁盘I/O上,因此 降低时间片的大小,一方面可避免因磁盘I/O不畅造成CPU的等待,从而提高了CPU的综合利用率。另一方面减少了进程的阻塞量。

unlockable_mem

提高了不可锁内存的大小,使可用于换页和交换的内存空间扩大,用以满足系统对内存管理的要求。

用户SQL质量

  以上讲的都是硬件方面的东西,在条件有限的条件下,我们可以调整应用程序的SQL质量:

  1. 不要进行全表扫描(Full Table Scan):全表扫描导致大量的I/O

  2. 尽量建好和使用好索引:建索引也是有讲究的,在建索引时,也不是索引越多越好,当一个表的索引达到4个以上时,ORACLE的性能可能还是改善不了,因为OLTP系统每表超过5个索引即会降低性能,而且在一个sql 中, Oracle 从不能使用超过 5个索引;当我们用到GROUP BYORDER BY,ORACLE就会自动对数据进行排序,ORACLEINIT.ORA中决定了sort_area_size区的大小,当排序不能在我们给定的排序区完成时,ORACLE就会在磁盘中进行排序,也就是我们讲的临时表空间中排序, 过多的磁盘排序将会令 free buffer waits 的值变高,而这个区间并不只是用于排序的,对于开发人员我提出如下忠告:

  1)select,update,delete 语句中的子查询应当有规律地查找少于20%的表行.如果一个语句查找的行数超过总行数的20%,它将不能通过使用索引获得性能上的提高.   

  2)、索引可能产生碎片,因为记录从表中删除时,相应也从表的索引中删除.表释放的空间可以再用,而索引释放的空间却不能再用.频繁进行删除操作的被索引的表,应当阶段性地重建索引,以避免在索引中造成空间碎片,影响性能.在许可的条件下,也可以阶段性地truncate,truncate命令删除表中所有记录,也删除索引碎片.

  3)、在使用索引时一定要按索引对应字段的顺序进行引用。

  4)、用(+)比用NOT IN更有效率。

  降低ORACLE的竞争

  先讲几个ORACLE的几个参数,这几个参数关系到ORACLE的竞争:

  1)、freelists freelist 组:他们负责ORACLE的处理表和索引的空间管理;

  2)、pctfree pctused:该参数决定了freelists freelist 组的行为,pctfree pctused 参数的唯一目的就是为了控制块如何在 freelists 中进出

  设置好pctfree pctused对块在freelists的移走和读取很重要。

  其他参数的设置

  1)、包括SGA区(系统全局区):系统全局区(SGA)是一个分配给Oracle 的包含一个 Oracle 实例的数据库的控制信息内存段。

  主要包括数据库高速缓存(the database buffer cache)

  重演日志缓存(the redo log buffer),

  共享池(the shared pool),

  数据字典缓存(the data dictionary cache)以及其它各方面的信息

  2)、db_block_buffers(数据高速缓冲区)访问过的数据都放在这一片内存区域,该参数越大,Oracle在内存中找到相同数据的可能性就越大,也即加快了查询速度。

  3)、share_pool_size SQL共享缓冲池):该参数是库高速缓存和数据字典的高速缓存。

  4)、Log_buffer (重演日志缓冲区)

  5)、sort_area_size(排序区)

  6)、processes (同时连接的进程数)

  7)、db_block_size (数据库块大小):Oracle默认块为2KB,太小了,因为如果我们有一个8KB的数据,则2KB块的数据库要读4次盘,才能读完,而8KB块的数据库只要1次就读完了,大大减少了I/O操作。数据库安装完成后,就不能再改变db_block_size的值了,只能重新建立数据库并且建库时,要选择手工安装数据库。

  8)、open_links (同时打开的链接数)

  9)、dml_locks

  10)、open_cursors (打开光标数)

  11)、dbwr_io_slaves (后台写进程数)

三、oracle的备份与恢复

Oracle数据库有三种标准的备份方法,它们分别是导出/导入(EXP/IMP)、热备份和冷备份。导出备件是一种逻辑备份,冷备份和热备份是物理备份。

 导出/导入(ExportImport

  利用Export可将数据从数据库中提取出来,利用Import则可崛〕隼吹氖菟突氐絆racle数据库中去。

  1、 简单导出数据(Export)和导入数据(Import

  Oracle支持三种方式类型的输出:

  (1)、表方式(T方式),将指定表的数据导出。
  (2)、用户方式(U方式),将指定用户的所有对象及数据导出。
  (3)、全库方式(Full方式),瘵数据库中的所有对象导出。

  数据导入(Import)的过程是数据导出(Export)的逆过程,分别将数据文件导入数据库和将数据库数据导出到数据文件。

  2、 增量导出/导入

  增量导出是一种常用的数据备份方法,它只能对整个数据库来实施,并且必须作为SYSTEM来导出。在进行此种导出时,系统不要求回答任何问题。导出文件名缺省为export.dmp,如果不希望自己的输出文件定名为export.dmp,必须在命令行中指出要用的文件名。

  增量导出包括三种类型:

  (1)、完全增量导出(Complete
  即备份三个数据库,比如:
  exp system/manager inctype=complete file=040731.dmp
  (2)、增量型增量导出
  备份上一次备份后改变的数据,比如:
  exp system/manager inctype=incremental file=040731.dmp
  (3)、累积型增量导出
  累计型导出方式是导出自上次完全导出之后数据库中变化了的信息。比如:
  exp system/manager inctype=cumulative file=040731.dmp
  数据库管理员可以排定一个备份日程表,用数据导出的三个不同方式合理高效的完成。
  比如数据库的被封任务可以做如下安排:

  星期一:完全备份(A
  星期二:增量导出(B
  星期三:增量导出(C
  星期四:增量导出(D
  星期五:累计导出(E
  星期六:增量导出(F
  星期日:增量导出(G

四、常用命令

1.启动Oracle Server.
  
  Startup[nomount|mount|open][force][pfile=filename]

  参数说明:

  nomount:只启动实例

  mount:启动实例,并装载数据库

  open:启动实例,装载并打开数据库。

  Force:终止实例,并重新启动数据库。(默认选项)

  Pfile:指定非默认参数文件名。

  2.停止Oracle Server

  Shutdown [normal|transactional|immediate|abort]

  参数说明:

  normal:等待用户断开已存在连接,系统发出检查点,然后在同步数据文件、控制文

  和重做日志文件之后关闭(默认选项)

  transactional:等待客户端结束事务之后,自动断开用户连接,然后再执行normal
  
  Immediate:取消当前所有SQL语句,回退所有未完成事务,然后自动断开,再执行normal

  Abort:终止所有SQL语句,立即终止实例。不会发出检查点,所以也就不会去同步数据文件、控制文件和重做日志文件。

  3. 总结和相关的一些脚本

  A 修改数据文件名、执行完全恢复、执行不完全恢复、改变日志操作模式时系统必须在启动实例并安装数据库的情况下startup mount;)
  
  B 创建数据库或创建控制文件时系统只处于启动实例状态(startup nomount;)

  C 显示SGA尺寸(show sgaselect * from v$sga)

  D.显示当前正在运行的后台进程(select name from v$bgprocess where paddr != ‘00’)

  E 显示Oracle Server状态(select status from v$instance)

  F 显示初始化参数信息(select * from v$parameter);

  G.显示物理文件(select * from v$controfile; select * from v$datafile; select * from v$logfile);

H 部分数据字典试图:

  all_objects, user_objects, dba_objects, user_source, user_segments,

  user_tab_columns, user_constraints, all_users

  I.为了客户应用可以访问Oracle Server,在服务器端需要配置listener.ora文件,在客户端需配置tnsnames.ora文件

  第三章 控制文件

  1.控制文件主要记载的信息:

  数据库名称;数据库文件名称和位置;重做日志文件名称和位置;表空间名称;

  当前日志序列号; 检查点信息; 日志历史信息。

  2 多元化控制文件

  1 关闭数据库

  sqlplus/nolog;

  connect system/admin@lgtest as sysdba;

  shutdown immediate;

  2 复制控制文件
  
  copy source controlfile to dest controlfile

  例如:copy E:\oracle\oradata\lgtest\CONTROL01.CTL f:\controltest.ctl

  3 修改初始化参数control_files
  
  control_files= E:\oracle\oradata\lgtest\CONTROL01.CTL, f:\controltest.ctl
  
  4 启动数据库
  
  startup pfile= E:\oracle\admin\lgtest\pfile\ init.ora.108200317263

  其作用:多元化控制文件后,只要有一个控制文件没有被损坏,把其它损坏的控制文件从初始化参数文件中去掉重启之后系统可以继续运行。

3 重建控制文件的方法

  1 nomount方式启动实例

  sqlplus/nolog;

  connect system/admin@lgtest as sysdba;

  shutdown normal;

  startup nomount pfile=%racle_home%\database\init.ora;

  2 建立控制文件

  create controlfile reuse database lgtest resetlogs

  logfile
  
  group 1 ‘E:\oracle\oradata\lgtest\ REDO01.LOG’ size 20M,
  
  group 2 ‘E:\oracle\oradata\lgtest\ REDO02.LOG’ size 20M
  
  datafile
  
  ‘E:\oracle\oradata\lgtest\ SYSTEM01.DBF’,
  
  ‘E:\oracle\oradata\lgtest\ UNDOTBS01.DBF’
  
  character set ZHS16GBK;
  
  3 打开数据库
  
  alter database open resetlogs;
  
  4 增加临时文件

  a lter tablespace temp add tempfile ‘E:\oracle\oradata\lgtest\TEMP01.DBF’ reuse;

  起作用:当控制文件都被损坏后,只要有全部的数据文件和重做日志文件,那么通过重建控制文件可以使系统继续运行。

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多