第一章:ORACLE的结构
一、ORACLE的SERVER
1、SERVER=DATABASE+INSTANCE(内存结构)
2、ORACLOE的连接方式:
A、直接登录:UNIX主机,客户端通过串口,TCP/IP直接登陆到主机,使用ORACLE
B、C/S方式:客户端通过TCP/IP+NET8,做数据的存储,调用,查询。端口活动少,速度加快
C、三层结构:在C和S之间加一个应用服务器,C通过TCP/IP,PPP,RS232连到应用服务器上,调用业务程序,通过业务程序从应用服务器以TCP/IP+NET8访问S端。适合大型业务。
二、如何连接数据库
1、USER PROCESS:通过C端的应用程序(SQLPLUS,DEVELOPE 2000。。。),产生,运行C端,用于发出USER的请求。
2、SERVER PROCESS:响应一个特定的USERPROCESS,随着USER PROCESS的请求,作相应的处理。SP 和UP数量相等,当UP终止,SP也会终止。同时SP所占用的资源释放,(内存)。一个SP占用内存约18M-50M。内存:PGA
3、SESSION:会话,连接,从C到S的连接链路,从用户登陆到数据库开始,到用户退出登陆终止。
三、ORACLE的INSTANCE;
1、INSTANCE:实例,内存结构,定义了ORACLE数据库在启动和工作过程中所使用的内存的大小,及分配方式。分配方法由INIT《SID》。ORA(参数文件)
2、INSTANCE的组成:
A、SGA区,共享内存区
B、后台进程:
1、DBWR:定期将CACHE中的数据写回硬盘
2、LGWR:记录所有已提交数据的修改动作。
3、SMON:监控数据库状态,释放临时段,做数据一致性的恢复。
4、PMON:监控ORACLE进程的运行状态。
2、SGA的组成
A、 SHARE POOL:LIB CACHE,存储编译后的执行代码
DICTIONARY CACHE:数据字典 CACHE
SELECT * FROM EMP,只有数据字典可以将对象信息转为ORACLE自己看的懂的信息 。
共享池的大小:SHARED_POOL_SIZE
B、DATABASE BUFFER CACHE 存储ORACLE常用数据大小=DB_BLOCK_SIZE*DB_BLOCK_BUFFERS
C、PGA的概念,独占内存区,只给一个特定SERVERPROCESS使用。当SP终止后,内存释放。
D、REDO LOG BUFFER:回滚实现所使用。
四、ORACLE DATABASE的组成:
1、DATABASE:DATAFILE,REDOLOG,控制文件。
2、附加文件:参数文件(INIT), PASSWORD文件,备份的日志文件。
第二章:如何管理ORACLE的INSTANCE(INTANCE的启动与终止)
一、ORACLE的启动过程
1、START AN INSTANCE:完成内存的初始化
2、MOUNT AN DATABASE:挂起数据库,读控制文件,仍然不允许普通用户访问数据库,但数据库管理员可以在这一级对库的维护,RECOVERY,调整。
3、OPEN数据库:允许正常访问,对库做数据操作。
二、ORACLE的终止:
1、CLOSE DATABASE
2、DISMOUNT DATABASE
3、RELEASE INSTANCE
三、ORACLE的数据库管理员:
1、数据库完成安装后,有两个自动生成的数据库管理员,SYSTEM,SYS,都有DBA的权限
2、SYS:CHANGE_ON_INSTALL(password),SYS是数据字典的所有者。
3、SYSTEM:MANAGER(PASSWORD)是工具表的所有者(OEM管理器)
四、INIT文件
1、INIT文件:主要定义了INSTANCE的启动的参数,所有对INIT参数的修改最终会影响到整个数据库,所有的修改只对下一次数据库的启动生效。
2、参数=值(系统根据你的环境优化的结果)
3、所有的参数都可以修改,除了db_block_size:
4、在ORACLE的企业版中,参数文件的命名格式:init.ora,
ifile=......../init.ora
ifile表示连接文件,将参数的配置文件指定到另一个目录下的文件中。
《SID》/PFILE/INIT.ORA
5、所有的文本编辑命令均可用于修改INIT文件
五、ORACLE的每一步启动的过程
1、INSTANCE的启动
A、读INIT文件,
B、根据INIT的参数分配内存(INSTANCE)
C、开始做跟踪,审记
D、后台进程启动
2、MOUNT DATABASE
A、对数据库中的控制文件操作
B、为数据文件定位。
C、控制文件的位置,数量由INIT文件定义
D、用于,数据恢复,维护,数据文件的重定位
3、OPEN DATABASE
A、允许用户正常访问
B、所有的在线数据文件,处于打开状态
C、SMON,作一个一致性检测
4、CLOSE DATABASE
A、回写CACHE中的数据(DBWR)
B、关闭数据库的数据文件
C、CONTROL文件还可以使用,INSTANCE没有释放。
5、DISMOUNT DATABASE
A、关闭控制文件
B、INSTANCE可以使用
6、RELEASE INSTANCE
六、数据库启动的命令
1 STARTUP [NOMOUNT|MOUNT|OPEN] [PFILE=。。。。][RESTRICT]
A、STARTUP NOMOUNT:将数据库启动到INSTANCE启动,但 不涉及数据文件
B、STARTUP MOUNT:启动MOUNT状态,控制文件打开
C、STARTUP OPEN(STARTUP): 将数据库完全打开,允许用户访问
D、STARTUP RESTRICT: 将数据库完全打开,允许有RESTRICT权限的用户访问。用于需要在OPEN状态下作数据库维护,而又不希望普通用户登陆的时候。
E、STARTUP PFILE=当你希望数据库启动时,使用你新定义的INIT文件时。
七、数据库的终止命令
1、SHUTDOWN [NORMAL|IMMEDIATE|ABORT|TRANSCATIONAL]
A I T N
允许新连接: N N N N
等待用户退出: N N N Y
等待事物的结束: N N Y Y
关闭文件: N Y Y Y
八、动态视图:
在ORACLE 里提供大量的动态视图包括,内存,磁盘的信息,连续反映数据库的变化,所有的这类视图,以v$开头。V$INSTANCE.数据库启动每到一步的时候,相应的视图会打开。STARTUP NOMOUNT,与内存
相关的视图打开。
九、如何显示参数的配置
1 SVRMGRL-->CONNECT INTERNAL-->SHOW PARAEMTER 参数名称
2 v$parameter
十、如何终止一个SESSION
1、找到相关SESSION的信息
SELECT SID, SERIAL# FROM V$SESSION WHERE USERNAME='SCOTT'
2、终止该进程:
ALTER SYSTEM KILL SESSION '7,15'
3、所有以上操作不会影响数据库的一致性, A、释放资源
B、释放锁
C、回退当前会话。
第三章:建立数据库
一、建立数据库的准备
1、足够权限的用户
对于操作系统而言,是一个ADMIN
对于数据库而言,DBA的权限
2、你的系统是否有足够的内存,64M
3、有没有硬盘空间:操作系统空间+数据库系统空间+应用数据空间
二、如何规划你的数据库
1、至少在你的数据库上有两个控制文件。
2、尽量保证日志组内部的成员数》2,且同一组内的成员间,处于不同硬盘。
3、对于同一表空间内的多个数据文件放在不同的硬盘上。主要是为了保证数据安全和I/O并发。
4、对于不同用处的数据,放在不同的表空间上。
SYSTEM表空间
TEMP 表空间
USER 表空间
OEM 表空间
INDEX 表空间
V$TABLESPACE
三、如何手工建库:
1、在数据库安装的过程中,当安装完成时,已经有一个库,自动生成的。库名称,对应的INSTANCE的名称(SID)在安装过程中由用户指定。实际上指定义了数据库生成的最基本信息,其他选项按默认值配置。
2、手工生成数据库
A、设置环境变量和核心参数(UNIX)
B、复制一个INIT文件。
使用一个OS的COPY命令
举例:DB_NAME=OLM
SID_NAME=OLM
MAX_FILES=100
使用写字板改:DB_NAME
SID_NAME
以及其他可选项:
MAX_FILES=100
SHARED_POOL_SIZE=10000
C、启动数据库到NOMOUNT:
因为有了INIT文件,所以系统可以根据INIT的参数配置,初始化内存。'
SVRMGRL--》CONNECT INTERNAL--》STARTUP NOMOUNT PFILE=C:/WIN95/INITOLM.ORA
D、下命令手工建库
CREATE DATABASE OLM
[ MAXLOGFILES 5]这个数据库最大的日志成员组的数量
[MAXLOGMEMBERS 4]定义了每组中成员的数量
[MAXDATAFILES 100]定义了最大的数据文件的数量 LOGFILE
GROUP 1 ('C:/WIN95/REDO1.LOG') SIZE 1M,
GROUP 2 ('C:/WIN95/REDO2.LOG') SIZE 1M
DATAFILE
'C:/ORACLE/ORADATA/SYSTEM01.DBF' SIZE 100M;
四、关于其他操作
1、数据字典视图没有生成
SVRMGRL》@CATALOG。SQL
@CATPROC。SQL
2、创建其他表空间,比如说排序表空间 ,ROLLBACK,TEMP
3、所有的数据文件可以不存在,但所有的路径必须存在。
4、如果是选用自动建库,四的步骤自动完成。
五、信息获取
1、V$DATABASE
2 V$INSTANCE
3 V$TABLESPACE
六、ALTER DATABASE命令
1、启动到NOMOUNT,STARTUP NOMOUNT
2、从NOMOUNT 启动到MOUNT: ALTER DATABASE MOUNT
3、从MOUNT到OPEN : ALTER DATABASE OPEN
第四章:数据字典
一、数据字典的使用:
1、数据字典提供了:逻辑和物理上的数据库结构信息:提供有多少个表空间提供了有多少个数据文件及位置
2、提供硬盘的分配信息
3、提供用户信息,权限
二、组成
1、ORACLE在完成建库已经建立了数据库的基表。
A,编码形式的,不可读
B,是数据字典视图的信息来源。
2、数据字典视图,通过运行CATALOG。SQL,CATPROC。SQL产生的,可读,专为用户提供信息的视图。视图是基表的上层,来源于基表。
3、数据字典视图的分类:
DBA_XXX: dba_tables 数据库管理员使用
all_xxx: all_tables 所有有权访问这个对象的用户
user_xxx:user_tables 该对象的属主
第五章、控制文件的管理
一、控制文件的内容
1、数据库名称和SID名称
2、所有的数据文件的分布
3、TABLESPACE的名称
4、日志段的段号
二、如何可以获取控制文件的信息
1、V$CONTROLFILE
SELECT * FROM V$CONTROLFILE
2 V$PARAMETER
3 INIT文件中定义
三、控制文件的管理
1、ORACLE中,控制文件数量不少于2为好。当拥有两个以上的控制文件时,控制文件之间是镜像关系,当任意损坏一个的时候系统不至于崩溃。
2、如何维护:
A、SHUTDOWN 数据库
B、用OS的COPY命令,将控制文件复制一个。
C、修改INIT文件中关于CONTROLFILE的选项。
D、STARTUP 数据库
E、通过V$CONTROLFILE 查看信息
3、控制文件的内容,大小不可改
4、当修改数据库以下参数时可能会改变控制文件大小
MAXLOGFILES
MAXLOGMEMBERS
MAXDATAFILES
5、SELECT * FROM V$CONTROLFILE
NAME
/DISK1/CONTROL1.DBF
/DISK2/CONTROL2.DBF
第六章:日志的管理
一、日志的组和成员
1、ORACLE中,记录不同数据库操作的称为日志组
2、ORACLE中,同一日志组内的不同日志文件称为日志成员。
二、归档模式和非归档模式
1、非归档模式:日志文件的内容不经过备份直接被覆盖
2、归档模式:日志文件的内容经过备份,再被覆盖
3、如何知道:归档方式
A、ARCHIVE LOG LIST《SVRMGRL》
B、V$DATABASE
C V$INSTANCE
4、如何知道有几个组,日志段的段号
V$THREAD
V$LOG ********
几个组,每组几个成员,大小,状态
5、如何知道有多少个日志文件,位置,属于哪个组。 v$logfile
三、如何修改(增加)日志组
ALTER DATABASE ADD LOGFILE
('C:/WIN95/REDO11.LOG','C:/WIN95/REDO12.LOG') SIZE 1M;
四、如何加一个日志成员:
ALTER DATABASE ADD LOGFILE MEMBER
'C:/REDO13.LOG' TO GROUP 1,
'C:/REDO14.LOG' TO GROUP 2;
五、如何重定位日志文件
1、SHUTDOWN
2、COPY 一个到新目录下
3、STARTUP MOUNT;
A、修改文件位置最终记录到 CONTROLFILE
B、如果到OPEN下,可以做,但是不一定好用,用户可以访问,一旦对库操作,日志改变,内容会不一致。
4、ALTER DATABASE RENAME
DATAFILE 'C:/REDO13.LOG' TO 'E:/ORACLE/REDO13.LOG' ;
5、ALTER DATABASE OPEN
六、删除日志组:
ALTER DATABASE DROP LOGFILE GROUP 组号;
1、CURRENT状态不能DROP
2、ACTIVITY不可以DROP
七、删除日志成员:
1、ALTER DATABASE DROP LOGFILE MEMBER 'C:/REDO12.LOG'
八、日志的设置:
1、组的数量不少于2组,4组够了。
2、每一个成员的大小:1M-2M,也可以多一些,如10M,成员最好两个以上
3、日志组数量增多,日志成员空间大,可以有效的提升运行速度但是一旦系统不正常关机,下次重启动时,速度很慢。
九、错误
1、非当前日志组,一个成员损坏,系统正常运行
2、当非当前日志组所有成员损坏,系统自动DOWN机
3、当前组所有成员损坏,数据库崩溃,做全库恢复
第七章:表空间和数据文件的管理
一、ORACLE的逻辑结构
1、DATABASE--》TABLESPACE(表空间)--》SEGMENT(段)--》EXTENT(区)--》DB BLOCK
二、逻辑结构
1、TABLESPACE:
A、一个表空间只属于一个数据库
B、一个表空间中含有多个数据文件
C、表空间作用提供:用户数据的存储空间,空间大小=所包含的数据文件的大小的总和。
2、段(SEGMENT)
A、段是存储在表空间中的具有不同特性的存储结构
B、段在物理上,只属于一个表空间
C、组成是由一些EXTENT组成的
D、当一个表空间有多个数据文件时,段可以跨越多个数据文件。
3、区(EXTENT)
A、EXTENT是由一些连续的DB BLOCK 组成的,
B、EXTENT是段的组成单位,一个段可以包含一个或多个EXTENT
4、DB BLOCK:是ORACLE空间分配和建库是的最小分配单位
三、表空间分类:
1、SYSTEM 表空间:
A、建库自动创建的,只包含数据字典,和系统回滚段
B、SYSTEM表空间是ORACLE的库的所有操作所必须访问的,因为操作最终都要通过数据字典进行翻译或更新数据字典。
C、SYSTEM表空间只包含系统数据,但用户也可以将自己的应用数据建在SYSTEM表空间中,但ORACLE 不建议这样做。
2、用户数据表空间(非系统表空间)
A、由用户自己建的表空间,保存用户数据的。
B、在结构上与SYSTEM表空间,一致。
C、表空间中可以放:TABLE,INDEX,临时,回滚
四、如何建立表空间
1、命令
CREATE TABLESPACE 表空间名称
DATAFILE 'C:/WIN95/ZT.DBF' SIZE 1OM DEFAULT STORAGE (INITIAL 100K NEXT 100K MAXEXTENTS 1000 PCTINCREASE 0);
2、DEFAULT STORAGE的参数
A、MINEXTENTS
B、单位可以是:[K|M]
五、如何建立临时表空间:
CREATE TABLESPACE 表空间名称
DATAFILE 'C:/WIN95/OLM.DBF' SIZE 1OM DEFAULT STORAGE (INITIAL 100K NEXT 100K MAXEXTENTS 1000 PCTINCREASE 0) TEMPORARY;
六、如何加一个数据文件给一个表空间
1、空间不够
2、ALTER TABLESPACE 表空间名称 ADD DATAFILE 'C/WIN95/123.DBF' SIZE 100M;
3、路径必须存在,路径下没有同名文件。
七、自动增长
ALTER TABLESPACE 名字 ADD DATAFILE
'C:/WIN95/222.DBF' SIZE 10M AUTOEXTEND ON NEXT 10M MAXSIZE 100M;
八、如何修改DEFAULT STORAGE 参数
ALTER TABLESPACE 名字 DEFAULT STORAGE (INITIAL 12OK NEXT 120K MAXEXTENTS 1200);
九、OFFLINE状态
1、对数据的存取,仅限于ONLINE状态的表空间所含数据。
2、当表空间为OFFLINE时、数据不可用,用户不可访问
3、在表空间重定位,需要将表空间设成OFFLINE。
4、ALTER TABLESPACE 名称 [OFFLINE|ONLINE]
5、SYSTEM表空间不可OFFLINE
十、移动数据文件
1、当因为硬盘过旧,不安全,空间不够,需要移动到更大的硬盘时,需要移动数据文件
2、执行过程
A、先改为OFFLINE,
B、OS 的COPY ,将数据文件复制到新的硬盘上
C、ALTER TABLESPACE 名称 RENAME DATAFILE '。。。。。' TO '。。。。'
D、ALTER TABLESPACE 名称 ONLINE;
3、执行过程(2)
A、SHUTDOWN DATABASE
B、STARTUP MOUNT
C、OS 的COPY ,将数据文件复制到新的硬盘上
D、ALTER DATABASE RENAME FILE '老路径+文件名' TO '新路径+文件名'
E、ALTER DATABASE OPEN;
十一、如何让一个TABLESPACE 只读
1、命令:
ALTER TABLESPACE 名称 READ ONLY
变为可读可写:
ALTER TABLESPACE 名称 READ WRITE
2、表空间必须ONLINE
3、没有访问
4、没有激活状态的回滚段
5、只读只需要备份一次就够了。
十二、DROP 表空间
1、命令:DROP TABLESPACE 名称:
适合于新的表空间,在这个表空间中没有任何用户数据。
[INCLUDING CONTENTS]
数据文件中包含了用户表和索引的 表空间必须加参数
2、注意事项
A、SYSTEM表空间不能DROP
B、DROP命令在ORACLE中,只是在逻辑上解除了数据文件和数据库间的关系,文件本身仍然存在于硬盘上,DOS的DEL删实际的数据文件
十三、如何获取信息:
1、V$DATAFILE:显示所有的数据文件名,路径,状态,及所属表空间号,只读与否
2、V$TABLESPACE: TS#,NAME
做组合查询 :TS#
SELET D.NAME,T.NAME FROM V$DATAFILE D, V$TABLESPAE T
WHERE T.TS#=D.TS#;
3 DBA_DATA_FILES;
显示文件名,表空间名,大小,是否自动扩展,
4、DBA_TABLESPACES
tablespace_name,以及建立该表空间时的所有的参数
第八章:临时表空间
一、临时表空间的使用:
1、临时表空间是用于排序命令:在这个表空间内部不能存放任何永久性的段,不能放TABLE,INDEX,
ROLLBACK,只能放临时段。
2、临时表空间的使用方法:
A、排序的时候,首先用到内存,内存的排序空间的大小:SORT_AREA_SIZE
B、当内存空间不足以排序时,用到临时表空间
C、哪些命令可能引起排序:
SELECT .... FROM EMP ORDER BY
SELECT .....FROM EMP GROUP BY
SELECT .....DISTINCT
CREATE INDEX
D、临时段最好设在临时表空间中,如果建用户时没有特别指定,将用 SYSTEM 表空间排序。这类现象应该避免
E、临时段在排序时产生空间分配, SHUTDOWN空间回收,SMON进程负责
二、信息的获取:
1 V$SORT_SEGMENT
TABLESPACE,SIZE,STATUS
2 V$SORT_USAGE
第九章:回滚段
一、回滚段的作用
1、用于回退事物:保留旧值,在提交之前,一旦事物放弃提交,旧值恢复回来。
2、保持数据的一致性,在提交之前,将访问所修改数据的用户,引导到旧值的存放地。
3、事物的恢复
二、回滚段的类型
1、SYSTEM
2、非系统回滚段(用户自己建的回滚段,用于自己的业务)
三、回滚段的增长
1、从本章开始,所有的对象的创建,不会再有SIZE的定义。只有EXTENT的数量定义。
2、回滚段有激活的和非激活的之分,对于那些含有既没有提交,又没有回退的事物的信息
的EXTENT成为激活状态。反之则为非激活状态。
3、回滚段的EXTENT的分配和使用:是循环的自动的。
4、增加的时候,最大数量由MAXEXTENTS来决定。
5、ROLLBACK,可以自动回收空间,回收到多少可以由OPTIMAL指定,回收以EXTENT为单位,在EXTENT切换时开始回收,停止:=OPTIMAL值,遇到ACT的EXTENT止。
四、ORACLE的回滚段的设置:
1、OLTP:(在线事物处理系统)事物量很大,但是每个事物对数据改动很小。火车定票,设回滚段的时候:数量多(1RBS/4TRAN),但每个回滚不需要太大。
2、 BATCH:(批处理)事物少,每个事物改动量大, 工资代发
RBS:少
SIZE: 大
五、如何建立一个回滚段:
1、命令:
A、在作之前,先建立一个RBS的专用表空间
B、CREATE ROLLBACK SEGMENT 回滚段名称 TABLESPACE 专用表空间名称
STORAGE (INITIAL 100K NEXT 100K MINEXTENTS 20 MAXEXTENTS 100 OPTIMAL 4M);
MINEXETENTS 》=2
MAXEXTENTS 不要设为 UNLIMITE
六、如何将ROLLBACK设为ONLINE
1、手工设置:
ALTER ROLLBACK SEGMENT 名称 ONLINE;
2、修改INIT文件:
ROLLBACK_SEGMENTS=(名字)
最多可以设多少个ONLINE的回滚段:MAX_ROOLBACK_SEGMENTS
七、修改ROLLBACK的STORAGE参数
ALTER ROLLBACK SEGMENT 名称 STORAGE(MAXEXTENTS 200);
八、手工回收空间
ALTER ROLLBACK SEGMENT 名称 SHRINK TO 4M[4K]
1、手工回收,也是遇到ACT的停止
2、ALTER ROLLBACK SEGMENT 名称 SHRINK ,没有指定值,回收到OPTIMAL值,
3、当你的指定值比实际值大的时候,整个语句不执行。
九、设为OFFLINE:
ALTER ROLLBACK SEGMENT 名称 OFFLINE
十、DROP ROLLBACK
DROP ROLLBACK SEGMENT 名称
DROP之前,必须先OFFLINE
十一、信息的获取:
1、DBA_ROLLBACK_SEGS
SEGMENT_NAME,OWNER,STATUS,TABLESAPCE_NAME
2、查OPTIMAL值
A、V$ROLLNAME
B V$ROLLSTAT(OPTSIZE)
连接字段,USN
十二、错误分析:
1、ORA-01628:ROLLBACK的增长已经达到MAXEXTENTS的值,修改MAXEXTENTS的值,
2、ORA-01562+ORA-01560:是TABLESPACE的空间不够了,加数据文件,
3、ORA-01555:数据一致性被破坏,ROLLBACK太小,加大MAXEXTENTS 加大EXTENT的大小 OPTIMAL加大