基本操作:
启动 startup force 忽略已存在的instance直接重起
startup mount 开启controlfile,用于改变日志模式、rename file、database recovery等操作,完成了DB的装载但database尚未打开,用户资料不能被读取
startup nomount 启动instance,可用于创建database和control file,但无法读取数据库的结构信息
startup open
startup restrics 只有具有restriced 权限的用户才能够登陆
关闭 shutdown immediate
shutdown abort
创建表格 create table 表格名 (可采用自查询as select * from ;)
对表格内容操作 update 表格名 set 操作内容
执行操作 commit
文件状态:
以 V$ 开头的文件都是动态视图
动态视图用单数,静态视图用复数
inactive 模式下表示没有用户在访问它
current 模式表示当前正在被使用
unused 状态表示从没有被使用过
stale 系统的过渡状态,对系统本身没有影响
invalid 出错
Triggers
control file:
控制文件一定要备份,保存在不同的分区之中。
只有close状态时文件才能拷贝。
redo log file:
LOG FILE:
select * from v$logfile 查看所有redo log文件
select * from v$log 查看所有Group
select * from v$tablespace 查看表空间
select * from v$datafile 查看数据文件
alter system switch logfile 切换系统当前日志文件
alert switch log file 切换当前使用的log文件
ALTER DATABASE DROP LOGFILE MEMBER '文件路径'; 删除 logfile
ALTER DATABASE ADD LOGFILE MEMBER '文件路径' TO GROUP #; 添加 logfile
ALTER DATABASE CLEAR LOGFILE '文件路径'; 清除 logfile (清除文件的内容)
CheckPoint最主要的功能就是同步control files和data files
CKPT 发生的时候将修改 control files 和 data files
CKPT发生在:
在发生log switch 之后
当search buffer达到了一定块的时候 用LOG_CHECKPOINT_INTERVAL设定
CKPT定义了一个时间,如果该时间达到了就强制性执行。用LOG_CHECKPOINT_TIMEOUT 设定
数据库恢复的基本原理:
归档模式下:
Archived redo log 记录了用户的操作
当数据发生损坏的时候,首先是将最新的备份文件拷回来,然后逐个执行归档日志文件,可以恢复全部数据。
在非归档模式下,只能恢复到最后备份的数据。
Redo Log Configuration
每个Member应该有一个备份
每个Group的Member应该大小一致
各个Disk上的Group应该交叉备份
如何重定位或重命名Redo文件:
1.拷贝redo log 文件到新的位置
2.执行 ALTER DATABASE RENAME FILE ‘原文件全路径’ to ‘目标文件全路径’ (一般是在monk状态下)
redo log 可能出现的错误:
1.一个组中的某些member无效
2.下一个组的所有member都无效
3.当前组的所有member都无效
查看 redo log 文件的内容:
使用 LogMiner 工具 (需要安装SP4)
1 定义初始化参数文件 UTL_FILE_DIR=文件路径
2 重起数据库使参数生效
3 使用脚本创建字典文件
EXECUTE DBMS_LOGMNR_D.BUILD('文件名','文件路径');
4 将归档日志文件添加到字典文件之中
EXECUTE DBMS_LOGMNR.ADD_LOGFILE('文件路径',DBMS_LOGMNR.NEW);
EXECUTE DBMS_LOGMNR.ADD_LOGFILE('文件路径',DBMS_LOGMNR.ADDFILE);
5 开始分析
EXECUTE DBMS_LOGMNR.START_LOGMNR(DICTFILENAME=>'文件路径');
6 查看结果
SELECT timestamp,username,sql_redo FROM v$logmnr_contents;
SQL_REDO文件保存了用户的操作 SQL_UNDO用于撤销用户的操作(如经过多次改动,其undo作用可能失效)
分析成功之后还有一些结果保存于下列视图中。
v$LOGMNR_DICTIONARY
v$LOGMNR_PARAMETERS
v$LOGMNR_CONTENTS
表空间和数据文件的操作(managing tablespaces and data files):
Database
|
/|
Tablespace ------< Data file
| | |
/| | |
Segment | |
Logical | | | Physical
/| | |
Extent >------------- |
| |
/| /|
Oracle block ----< OS block
tablespace :一个逻辑对象分离了Data file 和Segment,由一个或多个对象组成,可以突破操作系统块大小的限制
Segment :一些可增长的对象如 table index
Extent :每一次空间分配称为一个Extent
创建时是在表空间下按照一定的分配策略来进行。
建表的时候初始化分配一定的空间,如果空间不够则继续扩展
每一次的都是按照一定的大小来扩展的。
Extent 不能够跨空间,且只能属于一个数据文件。
Oracle block简称为 DB block ,由操作系统块(OS block)组成,必须是其整数倍。其大小由初始化参数DBblockset来决定,此参数一旦设定在数据库创建的过程中就无法更改
系统和非系统表空间
系统表空间主要存储的是系统数据
非系统表空间主要存储用户数据
创建Tablespaces
CREATE TABLESPACE 表空间名
DATAFILE '文件名.dbf' SIZE 空间大小
MINIMUM EXTENT 空间大小
DEFAULT STORAGE ( INITIAL 空间大小
NEXT 空间大小
MAXEXTENTS 数目
PCTINCEREASE 0);
Tablespaces 的空间管理
数据字典管理表空间
本地管理表空间
CREATE TABLESPACE 表空间名
DATAFILE '文件路径.dbf'
SIZE 文件大小
EXTENT MANAGEMENT LOCAL
UNIFORM SIZE 空间大小
优点:
不产生递归的空间管理(会导致请求响应很慢)
减少与数据字典表的联系
不产生回滚段(rollback 执行DML语句时就会产生)
不需要愈合(coalescing)
临时表空间(Temporary Tablespace 不推荐使用,会产生大量碎片)
CREATE TEMPORARY TABLESPACE 表空间名
TEMPFILE '文件路径.dbf'
SIZE 文件大小
EXTENT MANAGEMENT LOCAL
UNIFORM SIZE 空间大小
用于排序操作
UNIFORM SIZE = SORT_AREA_SIZE * n
推荐使用本地管理表空间,可以减少碎片
可以动态地增长
如果磁盘空间较大可以不使用临时表空间,现在已经很少使用了。
修改存储区设置
ALTER TABLESPACE 表空间名 ..
将表空间设为 Offline 状态(此时表空间不可使用,在做备份的时候应设置为此状态)
ALTER TABLESPACE 表空间名 OFFLINE;
ALTER TABLESPACE 表空间名 ONLINE;
系统表空间和带有活动回滚段的表空间不能被 Offline
使表空间只读
ALTER TABLESPACE 表空间名 READ ONLY;
表空间内的对象仍然可以被 Drop 掉(DROP时系统之修改了数据字典而不会修改表空间)
要求:
此表空间必须为 online 状态
不能包含有活动回滚段
表空间不能够卷入当前的备份
删除表空间
DROP TABLESPACE 表空间名 INCLUDING CONTENTS;
表空间的定义从数据字典中删除,表空间中的对象也被删除
但是操作系统的文件仍然存在
改变表空间的大小
自动和手动操作
可以给表空间添加数据文件
可以通过增加文件大小和增加文件数量来增加表空间的大小
ALTER TABLESPACE 表空间名
ADD DATAFILE '文件名'
SIZE 文件大小
AUTOEXTEND ON
NEXT 每次扩展的空间大小
MAXSIZE 最大可扩展空间大小
ALTER DATABASE
DATAFILE '文件名'
RESIZE 改变后文件的大小
表空间管理原则:
尽可能使用多个表空间,将表空间的数据区分开
定义缺省的参数
创建表空间的时候一定要带路径
限制用户对空间的占用,使用 quotas 命令
使用 MINIMUM EXTENTS,可尽可能的减少碎片
尽可能使用本地管理的表空间,不推荐使用临时管理表空间
表空间的数据文件不能大于1023个
第九章 数据库的逻辑结构
Segments:统称可增长的对象为Segments
例如Table ,cluster ,Table partion ,Index,index-organized table,index partion,Rollback segment,Temporary segment,LOB segment,LOB index,Nested table ,Bootstrap segment
Extent空间的分配和释放
分配:
当segment被
Created
Extended
Altered
时分配
当segment被
Dropped
Altered
Truncated (删除某个表中所有数据并重新初始化)
Automatically resized(rollback segment only)
时释放
DB block:
最小I/O单位
由OS blocks组成
通过 DB_BLOCK_SIZE 设置
在数据库建立的时候设置
Block 空间的使用
每个block在其头部开辟空间记录了司务号,每个空间成为司务槽。
每个事物访问需要先申请一个司务槽。
由 INITRANS 和 MAXTRANS 设定
PCTFREE = 20 意味着DB block中留有 20% 空间作以后update用
PCTUSED = 40 意味着DB block中如果使用的空间小于40%,系统就将此DB block链接到Segment头部的中的Freelist列表中去,表示这个块以后可以供用户插入数据(随机选取)
MIN_EXTENTS = 20 表示系统在创建Segments时,在初始化时,连续扩充19次,生成20个EXTENTS,避免了在使用过程中动态扩充。
DBA_EXTENTS
FILE_ID 绝对文件号。系统对数据库中所有的文件都进行了编号
BLOCK_ID 相对文件号。根据每个表空间来编号
第十章 回滚段的管理
一旦执行commit命令,回滚段的空间即被释放。
回滚段的作用:
1.保证读一次性 Read consistency
2.事物的回滚 Transaction rollback
3.事物的恢复 Transaction recovery
系统回滚段: 创建数据库的时候创建的,由系统使用。
非系统回滚段:系统管理员创建,供所有用户使用。
还分为私有和公有
第十二章 索引的管理
逻辑索引和物理索引
反键索引(将其ID号反置)可扩大其索引范围
位图索引(bitmap index):为每一个候选词建立一个位图,索引时只需利用相应的位图作或与运算即可。
Bitmap与B-tree索引相比较:
适合候选值种类较少时使用
特别适合或与运算
做update时系统代价非常昂贵
第十三章 约束
数据库中的约束状态:
针对新的数据是否进行有效性的检查 Disabled Enabled
是否对以前的数据进行完整性检查 novalidate validata
有四种状态组合:
Disabled novalidate
Disabled validata
Enabled novalidata
Enabled validate
约束延时:
先插入所有的语句,然后在执行Commit时才检查所有的延时约束,如果其中有一个语句不符合要求,Commit失效,所有的语句将被回退。
发出一个DML语句之后,系统先检查非延时的约束
然后在执行Commit时检查延时约束
定义语句的延时:
此语句在定义约束的时候和在当前的SESSION里都被设定为可以延时,此语句才能被延时。
ALTER SESSION SET CONSTRAINT[S] = {IMMEDIATE|DEFERRED|DEFAULT};
在建立 Primary Key 时必须要建立索引,有系统自动建立,但是可以指定其存储空间。
当约束为延时时只能创建非唯一性索引
子表和父表可以在不同的表空间,但是不能在不同的数据库中。
对子表执行DML操作的时候必须保证父表处于online状态。
在建立表时定义约束
CREATE TABLE 表名{
id NUMBER(#)
CONSTRAINT 约束名 PRIMARY KEY
DEFERRABLE //是否可延时
USING INDEX //把索引指向另一个表空间
STORAGE(INITIAL 大小 NEXT 大小)
TABLESPACE indx,
last_name VARCHAR2(#)
CONSTRAINT 约束名 NOT NULL,
dept_id NUMBER(#)}
TABLESPACE data;
索引加载的原则:
Primary和unique约束:
索引和数据应放在不同的表空间
如果进行大量数据加载,最好使用非唯一性的索引。
自引用的外键约束:
在初始化加载后再建立外键
定义延时的约束检查
第十四章 加载数据
使用SQL*Loader工具
直接路径加载
INSERT /*+APPEND*/ INTO 文件名.emp
NOLOGGING //不写入redo logfile,无法恢复
SELECT * FROM 原有文件名.emp
如果加上APPEND参数,数据将被加到高水点之后,由于其后空间连续,可加快插入速度。
并行插入(依赖于CPU的数量):
ALTER SESSION ENABLE PAALLEL DML; //修改当前环境,使其允许并 行操作,具体还要与硬件是否支持有关。
INSERT /*+PARALLEL(文件名,#)*/ //开启#个并行度
INTO 文件名.emp
NOLOGGING
SELECT * FROM 原有文件名.old_emp
普通路径的加载
将数据文件中的数据在内存中直接构建为数组加载到表中去的。
将数据重组,产生INSERT语句,必须使用COMMIT才能生效。
总是产生 redo
涉及到所有约束
INSERT 触发 trigger
支持cluster
其他用户可以修改
直接路径加载
使用Extent管理的方式,将数据文件中的数据直接在内存中重组,然后写入表的高水点之后,速度很快,但是如果出错就很难修复。
采用Data save技术,只有当在Extent扩充的时候才产生redo
只涉及到primare key,unique,NOT NULL约束
INSERT 不触发 trigger
不支持cluster
其他用户无法修改,不能对其作DML操作
SQL*Loader 注意事项:
使用参数文件来记载操作
如果数据量很小且只加载一次可以直接将数据放在控制文件中
分配足够的空间,避免动态扩充
加载大量数据到索引中时,可以先排序再加载
对于并行的加载可以定义不同的temporary segments
常见错误:
空间分配不够
加载的时候insrance失败(需要查看log文件)
使用了SORTED INDEXES 参数后,有一些数据没有排好序
在直接加载时重复定义了unique index,unique或primary key
BINDSIZE 定义过小,一般可以不定义
出错超过一定的限度
第十五章 重组数据
Export和Import的使用
执行逻辑备份
操作步骤:
IMP
username
import file
注意事项:
尽可能的使用其参数文件 pfiles
只有在输出的是一个小的文件才使用 CONSISTENT=Y,否则会占用大量的回滚段
如果有许多被删掉的行,不要使用COMPRESS=Y(将把原表的多个Extent进行叠加)
可以分配更大的buffer
可以使用直接路径的导出
可传输表空间(可以将一个表空间从一个数据库传到另一个数据库):
只能由系统管理员导出
具体步骤:
使此表空间只读
导出原数据
复制数据文件到指定的系统
传输export file(表空间的定义文件)
将定义文件输入到指定的系统
如必须,将表空间切换为读写状态
作用和限制:
可以移动整个表空间的数据
着吃媒体的恢复
必须是相同的操作系统
必须是8i以上
要有相同的block大小
使用相同的字符集(character set)
表空间中的对象必须是自包含的
第十六章 密码安全管理
使用配置文件
强制执行,始终有效。
|