初步理解oracle 10gR2
hopen 2012-12
1. 基本架构:
1.1. oracle数据库管理员工做内容
每个oracle数据库应该至少有一个数据库管理员(dba),对于一个小的数据库,一个dba就够了,但是对于一个大的数据库可能需要多个dba分担不同的管理职责。那么一个数据库管理员的主要工作是什么呢:
1) 安装和升级oracle 数据库建库;
2) 建表空间,表,视图,索引;
3) 制定并实施备份和恢复计划;
4) 权限管理,调优,故障排除;
5) 对于高级dba,要求能参与项目开发,会编写sql 语句、存储过程、触发器、规则、约束、包
1.2. 数据库的主要用户及其拥有的权限
权限\用户 | sysdba | sysoper |
区别 | startup | startup |
shutdown | shutdown | |
alter database open/mount/backup | alter database open/mount/backup | |
改变字符集 | none | |
create database | none | |
drop database | none | |
create spfile | 创建参数文件 | |
alter database archivelog | 归档日志 | |
alter database recovery | 只能完全恢复,不能执行不完全恢复 | |
restricted session | 拥有会话限制权限 | |
可以让用户作为sys用户连接 | 可以进行一些基本操作,但不能查看用户数据 | |
登入之后用户是sys | 登入之后用户是public |
注:
1) 这两个用户最大的区别是sysdba可以创建和删除数据库,sysoper不能;
2) 还有一个用户dba,该用户只有在启动了数据库后才能执行各种管理,故没有startup和shutdown权限
3) sys/system:以上三种用户都从属于sys/system中的角色,但是sys/system这两种类型的用户却有本质区别:所有oracle的数据字典的基表和视图都存放在sys用户中,这些基表和视图对于oracle 的运行是至关重要的,由数据库自己维护,任何用户都不能手动更改;system,用于存放次一级的内部数据,如oracle的一些特性或工具的管理信息。
4) 区别是以sys/system用户登入:sys用户必须以as sysdba或as sysoper形式登录。不能以normal方式登录数据库;system如果正常登录,它其实就是一个普通的dba用户,但是如果以as sysdba登录,其结果实际上它是作为sys用户登录的。
1.3. oracle10g目录结构:
oracle_home 目录:定义oracle的安装路径,我的默认为:
/app/oracle/product/10.2/它包含oracle软件运行有关的子目录和网络文件以及选定的组件等,该文件夹下的主要子目录有:
1) \bin——主要包含用于数据库管理的各种命令等。
2) \css——与oracle cluster synchronization服务有关的文件。
3) \dbs——存放数据库服务器端的参数文件spfile。
4) \demo——存放数据库实例模式的脚本等。
5) \install——用于存储oracle安装后的端口号,isql*plus以及enterprise manager database control启动并登录的方式等。
6) \network\admin——有关监听器listener.ora和sqlnet.ora以及tnsnames.ora
7) \sysman\config——用于与oracle enterprise management有关的端口管理
admin 目录结构:
数据库管理文件均存储在\oracle\admin\ sid\ 目录下。各个子目录的主要含义如下:
1) \bdump——后台进程跟踪文件。
2) \cdump——信息转储文件(core dump)。
3) \create——数据库创建文件。
4) \exp——数据库导出文件。
5) \pfile——初始化参数文件。
6) \udump——用户sql追踪文件。
oradata目录:
/oracle/oradata/sid/目录下,该目录主要存储数据库的控制文件、数据文件、重做日志文件。其中*.dbf文件对应数据库中每个表空间;.ctl文件为控制文件;.log文件对应重做日志文件组及其成员。
flash_recovery_area目录:
flash_recovery_area目录存储并管理与备份和恢复有关的文件。它包含系统中每个数据库的子目录。该目录可用于存储与恢复有关的文件,如控制文件、联机重做日志副本、归档日志、闪回日志以及oracle数据库恢复管理器(rman)备份等。
1.4. oracle的启动和关闭过程
启动oracle这里介绍两种方法:
sqlplus:
1) 首先我们用sql*plus来连接到oracle
2) sqlplus /nolog 是以不连接数据库的方式启动sql*plus
3) connect /as sysdba 是以dba身份连接到oracle
启动:分为 启动实例、实例+挂载数据库、实例+挂载数据库+打开数据库,分别为:
1) startup nomount (nomount模式)启动实例不加载数据库。
2) startup mount (mount模式)启动实例加载数据库但不打开数据库
3) startup (open 模式)启动实例加载并打开数据库,就是我们上面所用的命令
注:不管在那中模式可以使用命令打开或挂载数据库;
1) alter database mount
2) alter database open
nomount模式中,oracle仅为实例创建各种内存结构和服务进程,不会打开任何数据库文件,因此:
1) 创建新数据库;
2) 重建控制文件;
必须在这个模式下进行。
mount模式中,oracle只装载数据库但不打开数据库,因此:
1) 重命名数据文件
2) 添加、删除和重命名重做日子文件
3) 执行数据库完全恢复操作
4) 改变数据库的归档模式
这些操作都必须在这个模式下进行。
open模式中,可以将数据库设置为非受限状态和受限状态在受限状态下,只有dba才能访问数据库,因此:
1) 执行数据导入导出
2) 使用sql*loader提取外部数据
3) 需要暂时拒绝普通用户访问数据库:alter system enable restricted session(alter system disable restricted session)
4) 进行数据库移植或者升级操作
这4种操作都必须在这个状态下进行
关闭数据库:
1)正常关闭 shutdown
2) 立即关闭 shutdown immediate
3) 关闭事务 shutdown transactional
4) 强行关闭 shutdown abort (被迫时使用)
oem(oracle enterprise management)控制台
开启oem console
emctl start dbconsole
[oracle@ora10g ~]$ emctl start dbconsole tz set to prc oracle enterprise manager 10g database control release 10.2.0.1.0 copyright (c) 1996, 2005 oracle corporation. all rights reserved. http://ora10g.localdomain:1158/em/console/aboutapplication - an instance of oracle enterprise manager 10g database control is already running. |
在浏览器上登入http://ora10g.localdomain:1158/em/console/aboutapplication
1.5. oracle用户管理
创建用户:create user hopen identified by admin 用户名:hopen密码:admin
grant是授予权限:grant create session to hopen 授予hopen连接数据的限
系统权限:
修改用户密码:alter user system identified by admin 修改用户system密码:admin
1.6. 物理结构,数据文件、日志文件、参数文件、控制文件
数据文件:数据文件是存储数据库的数据文件,如表、索引数据等,数据文件是oracle三大文件中占磁盘空间最大的一类文件。
读取过程:系统首先从数据文
件中读取数据,并存储在内存的数据缓存区中,当用户修改数据表的某些数据时,如果请求的数据不在内存缓冲区,则从相应的数据文件中读取并存储在内存中,以便下一次读取,从而减少磁盘的i/o总数,提高性能。数据先存储在内存中然后由后台进程dbwr决定如何写入到相应的数据文件中。
数据文件信息:
dba_data_files:描述数据文件的名称、文件标示、大小、对应的表空间信息、数据文件自动扩展性等;
sql> desc dba_data_files; name null? type ----------------------------------------- -------- ---------------------------- file_name数据文件存放路径 varchar2(513) file_id number tablespace_name表空间名称 varchar2(30) bytes数据文件大小 number blocks占的数据据块数 number status varchar2(9) relative_fno number autoextensible 数据文件自动扩展性 varchar2(3) maxbytes该数据文件最大可扩展的字节数 number maxblocks该数据文件最大可扩展的块数 number increment_by number user_bytes number user_blocks number online_status varchar2(7) |
v$datafile:描述数据文件的同步信息;
sql> desc v$datafile name null? type ----------------------------------------- -------- ---------------------------- file# number creation_change# number creation_time date ts# number rfile# number status varchar2(7) enabled varchar2(10) checkpoint_change#数据文件同步号 number checkpoint_time date unrecoverable_change# number unrecoverable_time date last_change# number last_time date offline_change# number online_change# number online_time date bytes number blocks number create_bytes number block_size number name varchar2(513) plugged_in number block1_offset number aux_name varchar2(513) first_nonlogged_scn number first_nonlogged_time date
|
数据文件特点:
1) 一个数据文件只能与一个数据库相联系,只适合用于一个表空间,数据文件一旦脱离数据库,则成为无用的垃圾文件。所以数据文件不得在不同的数据库之间移动。
2) 数据文件的大小可以动态改变
3) 存储数据之前数据文件必须有足够的空间,查询数据字典:dba_free_space了解
sql> desc dba_free_space name null? type ----------------------------------------- -------- ---------------------------- tablespace_name varchar2(30) file_id number block_id number bytes number blocks number relative_fno number |
4) 修改数据文件的大小,实质上是修改数据库表空间的磁盘空间
格式:alter database datafile ‘数据文件路径’ resize 800m
5) 数据文件的自动扩展性在oracle 8i以上的版本才适用。
重做日志文件:用于记录对数据库的所有修改信息,包括用户对数据库的修改、以及数据库管理员对数据库结构的修改,所以数据库日志信息要比数据信息多。重做日志是数据库中最复杂的文件,同时也是保证数据库安全与数据库备份恢复直接关系的文件。
归档日志文件:使用归档日志可以完成数据库的恢复,系统发生日志切换后,前一组产生的日志信息会被归档进程arch写入到磁盘或磁带的归档文件中,成为归档日志。归档日志的数据字典v$archieved_log
redo log group:在oracle中日志文件是成组使用的,叫做日志文件组,每个oracle数据库至少要有两个组(oracle 10g数据库默认配置是有三个组,每个组一个成员),每个组可以有多个成员(即每个组有一个或多个日志文件),同一组中的成员是互为镜像关系。
日志工作原理:日志先产生在日志缓冲区,然后由日志写入进程lgwr写入日志文件组中,在日志切换时由日志归档进程arch写入到磁盘中成为归档日志。
日志文件的大小(即日志组成员物理文件大小),决定了归档日志的大小,和日志切换频率及数据库运行速度;当一个日志文件组中的所有成员写满数据时,系统自动转换到下一个日志文件组;日志系列号,用来标识产生的归档日志,编号从1开始最大为65534用参数maxloghistory限制。
日志数据字典:v$log
sql> desc v$log name null? type ----------------------------------------- -------- ---------------------------- group#日志文件组号 number thread#日志文件线程号单机1、双机容错2 number sequence#日志系列号,日志切换后加1 number bytes日志文件大小,默认100m number members 日志组成员个数,默认1 number archived是否采用归档 varchar2(3) status状态 varchar2(16) first_change#检验点号 number first_time 系统改变的时间 date
|
强制进行日志切换:alter system switch logfile
检验点:用checkpoint_change标示,同时存储在日志文件、数据文件、控制文件中,在日志切换或其他原因引起系统改变时,检验点的号也同时改变,是这三个文件同步的依据。检验点用来保证修改过的数据库缓冲区都被写入数据库文件(日志、控制、数据文件)
注:引起系统同步的原因主要有:日志切换、时间、日志量等(待补充)
增加删除日志文件组:(待)
增加删除日志文件组成员:(待)
参数文件:在每一个数据库中都有一个文件parameter file 简称pfile,该文件决定了数据库的总体结构,用于设置数据库的254个系统参数,包括内存中系统全局区的大小、数据库大量的默认值、数据库的限制、数据库的各种物理属性、指定控制文件路径名称、调整服务器内存、进行数据库性能优化与调整等。参数文件是一个文本文件允许重新编辑和修改。
只有在创建数据库或启动数据库时,才会从参数文件中读入参数,如果参数文件被修改,必须关闭和重新启动数据库,新参数才能生效。
直接启动实例后直接show parameter
也可以直接查看参数文件:
[oracle@ora10g dbs]$ cat spfilerman.ora � w9�/rman.__db_cache_size=192937984 rman.__java_pool_size=4194304 rman.__large_pool_size=4194304 rman.__shared_pool_size=79691776 rman.__streams_pool_size=0 *.audit_file_dest='/oracle/admin/rman/adump' *.background_dump_dest='/oracle/admin/rman/bdump' *.compatible='10.2.0.1.0' *.control_files='/oracle/oradata/rman/controlfile/o1_mf_8cjym6t0_.ctl' *.core_dump_dest='/oracle/admin/rman/cdump' *.db_block_size=8192 *.db_create_file_dest='/oracle/oradata' *.db_domain='' *.db_file_multiblock_read_count=16 *.db_name='rman' *.dispatchers='(protocol=tcp) (service=rmanxdb)' *.job_queue_processes=10 *.log_archive_dest_1='location=/oracle/archive' *.log_archive_format='%t_%s_%r.dbf' *.nls_language='simplified chinese' *.nls_territory='china' *.open_cursors=300 *.pga_aggregate_target=94371840 *.processes=150 *.remote_login_passwordfile='exclusive' *.sga_target=285212672 *.undo_management='auto' *.undo_tablespace='undotbs1' *.user_dump_dest='/oracle/admin/rman/udump' |
控制文件:是一个二进制文件用来描述数据物理结构,一个数据库只需要一个控制文件。数据库的物理结构如:数据库名db_name\dbid、数据库创建时间、数据文件和日志文件标识(全部数据文件的路径、全部日志文件路径)、数据库恢复所需要的同步信息,等都以二进制方式写入数据库控制文件中。
控制文件数据字典:v$controlfile
控制文件镜像:实际数据库中,控制文件必须进行镜像。可以在创建之前进行镜像,即将存储控制文件的物理路径和文件名写入到参数文件control_files中,这样创建数据库后控制文件镜像也就完成了,如果数据库已经创建好并且没有镜像的,可以用手工对控制文件进行镜像。
手工进行控制文件镜像:先关闭oracle实例(在实例运行时,数据库的三类文件是不能进行复制的);复制控制文件,在数据库关闭后,用操作系统的拷贝命令将控制文件从一个磁盘拷贝到另一个磁盘;修改参数文件中control_files的路径信息;从启数据库。
1.7. 逻辑结构
oracle对数据库逻辑结构的描述是通过数据字典存储完成的,如果要了解数据库的逻辑结构必须查询数据字典。
数据库的逻辑结构包括表空间(tablespace)、段(segment)、区(extend)、数据块(data block)
在新增应用时,数据库管理员只需要创建新的表空间,不必创建一个新的数据库。一个数据库中最多可以创建65536个不同类型的表空间。
表空间:数据库可以划分为一个或多个逻辑单位,该单位称为表空间,每一个表空间由一个或多个数据文件组成,一个数据文件只能与一个表空间相联系,这是逻辑与物理的统一。
查询:
表空间对应的数据文件的相关信息dba_data_file
表空间的空闲空间大小、碎片信息等从数据字典dba_free_space
修改数据文件大小,从而增加相对于表空间的大小
表空间的特点:控制数据库数据的磁盘分配;限制用户使用的磁盘空间大小(在创建用户时quota参数指定);有离线offline、在线online、只读read only、读写read write等属性,通过查询表空间数据字典:v$dba_tablespace查看;完成部分数据库备份与恢复,数据库备份时,可以只备份一个独立的表空间,表空间备份可以是在线热备份,也可以是离线冷备份;通过多个磁盘存储数据,以优化系统性能。
段:数据库中的段可以分为四类:数据段、索引段、回退段、临时段;
数据段:用于存储数据的段,每一个表都有一个数据段,表的数据存储在数据段中,用户创建表时则在用户默认的表空间中创建一个数据段,而用户默认的表空间可以用用户数据字典dba_users查询到。
sql> select username,default_tablespace from dba_users ;
username default_tablespace ------------------------------ ------------------------------ mgmt_view system sys system system system dbsnmp sysaux sysman sysaux hopen users outln system mdsys sysaux ordsys sysaux ctxsys sysaux anonymous sysaux
username default_tablespace ------------------------------ ------------------------------ exfsys sysaux dmsys sysaux wmsys sysaux xdb sysaux ordplugins sysaux si_informtn_schema sysaux olapsys sysaux mddata users dip users scott users tsmsys users
22 rows selected.
|
在一个表空间中创建多个表,该表空间就有多少个数据段,且数据段的数量是没有限制的,但是表空间的数量是有限制的,增加表中的数据会导致数据段变大,所以数据段随着用户的数据增大而逐渐变大,段的增大是通过增加区的个数而实现的,没增加一个区,每个区的大小是数据块的整数倍。
查询数据段存储在哪个表空间上,该段的数据大小信息等可以查询
数据段数据字典:user_extends
segment_name、tablespace_name、bytes、blocks
索引段:用于存储索引数据,索引信息查询数据字典:user_indexes /all_indexes ;
回退段:oracle数据库中最复杂、最难管理的段,用来存储用户数据修改前的值,因而在某些特定条件下可以回退数据。这些信息用来数据库恢复时回退未提交的事务。一个事务只能用一个回退段来存放回退信息,而一个回退段可以存放多个事务的回退信息。在oracle10g以后的版本取消了回退段的概念,而是专门用一个undo表空间来自动管理所需的undo空间,不是需要管理员来计算、调整、回退段的数量及大小。
参数文件中 undo_management 参数指定了数据库是使用回退段还是使用undo表空间来管理。show parameter undo_management
sql> show parameter undo_management
name type value ------------------------------------ ----------- ------------------------------ undo_management string auto sql>
|
临时段:用户在使用oreder by 语句进行排序、汇总时,在用户的临时表空间中会自动创建一个临时段,用户排序结束时会自动消除。oracle10g中系统默认的temp表空间用来供用户作临时表空间使用。
数据字典:dba_users 描述了用户所用的临时表空间名
sql> select username,temporary_tablespace from dba_users ;
username temporary_tablespace ------------------------------ ------------------------------ mgmt_view temp sys temp system temp dbsnmp temp sysman temp hopen temp outln temp mdsys temp ordsys temp ctxsys temp anonymous temp
username temporary_tablespace ------------------------------ ------------------------------ exfsys temp dmsys temp wmsys temp xdb temp ordplugins temp si_informtn_schema temp olapsys temp mddata temp dip temp scott temp tsmsys temp
22 rows selected. |
区:区是磁盘分配的最小单位。区存储在段中,是数据库存储空间的逻辑单位,由连续的数据块组成。段的曾大是通过增加区的个数实现的。
数据块:数据库是数据文件磁盘存储的空间单位,也是数据库i/o的最小单位,数据块大小由参数db_block_size确定。数据库的大小一般在创建数据库之前确定,数据库创建和安装后不能修改。