oracle个人总结
2015-11-24 15:30
411 查看
转自: http://space.itpub.net/10710960/viewspace-553420
1.Oracle体系结构
oracle包含:实例(instance)和数据库(相关文件)
oracle分为:内存结构和物理结构
逻辑结构:为每个连接来的实例分配内存区域
物理结构:存放数据和相关数据库信息的文件
Insatance:包括SGA和一些后台进程
SGA:参数:sga_max_size。包含share_pool,large_pool,java_pool,db buffer cache,redo buffer cache
shared_pool:存放最近使用的SQL,PL/SQL。shared_pool_size
db buffer cache:存放一些查询结果。db_block_size * db_cache_size
redo buffer cache:存放对数据库操作的记录.
large_pool:large_pool_size
java_pool:存放一些java代码.java_pool_size
background:实例需要的进程,5个必须进程,其他为可选进程
SMON:系统监督进程
当实例崩溃,自动做实例恢复。主要做前滚(将db buffer cache中的脏数据写到数据文件中)和回滚(没提交的数据)。
PMON:进程监督进程
在没有正确退出oracle等造成的进程崩溃,PMON会做清理工作:如释放资源,释放锁,回滚事务,重启dispatcher等。
LGWR:日志写进程
工作原理:将redo buffer cache中的redo记录,顺序的 写到redo log file里
触发LGWR的条件:
1.每3秒
2.redo buffer cache里的数据,超过1MB
3.redo buffer cache里的数据超过总容量的1/3。
4.在DBWR写之前,会写
5.当事务commit时
DBWR/DBWn:数据库写进程
工作原理:将db buffer cache中的脏数据,写到数据文件中
触发DBWR的条件:
1.当发生checkpoint
2.db buffer cache中的脏数据到达规定的限度
3.超时3秒(在db buffer cache中里3秒没有找到空闲空间时)
4.truncate或delete表中数据时
5.将表空间设置为read only时
6.使用alter tablespace users begin backup进行联机备份时
7.当表空间被offline或重新修改成online时
CKPT:检验点进程
工作原理:产生校验点,保持数据的一致性。
CKPT:下面情况出发CKPT进程
A checkpoint occurs, for example, in the following situations:
1 At every log switch. --当日志切换时
2 When an instance has been shut down with the normal, transactional, or immediate option. --当一个实例正常关闭时(除了使用abort来关闭)
3 When forced by setting the initialization parameter FAST_START_MTTR_TARGET. --强制设置9i新增的FAST_START_MTTR_TARGET参数
4 When manually requested by the database administrator. --DBA手工发出请求
5 When the ALTER TABLESPACE [OFFLINE NORMAL|READ ONLY|BEGIN BACKUP] cause checkpointing on specificdata files. --对表空间做offline,只读,热备等操作时,检查点会发生在指定的数据文件上
A checkpoint can be forced using the FAST_START_MTTR_TARGET parameter.
--checkpoint可以使用FAST_START_MTTR_TARGET强制设置。
FAST_START_MTTR_TARGET is a shortcut to the deprecated parameters FAST_START_IO_TARGET and LOG_CHECKPOINT_TIMEOUT.
--FAST_START_MTTR_TARGET取代了后面2个参数。
FAST_START_MTTR_TARGET = 600 indicates that instance recovery should not take more than 600 seconds, and the database will adjust the other parameters to this goal.
--FAST_START_MTTR_TARGET指出实例恢复不能超过600秒,并且数据库将调整其他参数以达到目标。
FAST_START_IO_TARGET and LOG_CHECKPOINT_TIMEOUT must not be used if FAST_START_MTTR_TARGET is used.
--如果FAST_START_IO_TARGET被使用,则FAST_START_IO_TARGET和LOG_CHECKPOINT_TIMEOUT就不会被使用。
可选进程:
ARCH/ARCn:归档日志进程
工作原理:备份redo log file。
触发机制:当redo log file进行完switch log后,将写满的redo log file写到归档日志文件中。
数据库:数据文件,控制文件,重做日志文件
数据文件:存放业务数据和数据库系统数据的物理文件
控制文件:包含数据库文件的位置和数据库的相关参数
重做日志文件:存放redo buffer cache中的记录,即对数据库操作的记录。
oracle之外还包含3中文件:
初始化参数文件:实例在启动时,oracle会读取该文件中的参数,来配置实例。
静态参数文件(pfile):文本文件。存放启动实例时需要的参数:
1.db_name,instance_name
2.controlfile位置
3.SGA的配置
4.undo的配置
5.该实例能启动的最大进程数
6.db_block_size
7.是否允许DBA远程登录等。
动态参数文件(spfile):二进制文件。内容一样,不过该文件是oracle使用的,所以是二进制,用户不要用文本修改该文件
当pfile和spfile内容不一致时:可用命令更新。
create pfile 【file_name】 from spfile 【file_name】;
create spfile 【file_name】 from pfile 【file_name】;
oracle在启动实例时,会先寻找spfileSID.ora文件,如果没有会找initSID.ora文件,如果还没有找到会找pfile.ora文件来启动实例。
密码文件:保存数据库用户的用户名和密码。SYSDBA/SYSOPER用户。
归档日志文件:将redo log file里的内容,备份到操作系统上的指定目录下的文件。
2.数据库的启动,关闭及相应模式:
启动:startup 【nomount】【mount】【open】
nomount:非加载方式打开数据库
工作原理:
1.分配了SGA
2.打开所需的全部数据库后台进程
3.打开报警文件(alert file)和日志追踪文件(trace file)
mount:加载方式打开数据库
工作原理:
1.将db与instance关联起来
2.打开控制文件
3.读控制文件以获取数据文件和重做日志文件的名字,状态等信息,当不检查这些文件是否存在。
open:正常方式打开数据库
工作原理:
1.打开所有联机数据文件
2.打开所有联机重做日志文件
关闭:shutdown【abort】【immediate】【transactional】【normal】
abort:强制关闭数据库,要做实例恢复
immediate:立即关闭数据库,对数据库进行前滚和回滚,没提交的回滚,提交的写到数据文件中,不用做实例恢复
transactional:禁止新的session进入,对空间的session进行关闭,等待没提交的session提交事务后,才关闭数据库
normal:正常关闭数据库,如果有没提交的事务,数据库会等待所有事务提交后,才关闭。
如何查询到那些session的事务没有提交或其他造成数据库挂起状态的event?
可以查询blocking_session得到等待session的sid,通过blocking_session中的相关信息,然后再通过查询v$session里的sid,serial#得到准确的session信息,最后使用alter system kill session'sid,serial#';
限制模式:oracle以限制模式启动时,只有拥有DBA权限的用户才能连接到数据库
用途:DBA要对数据库做备份,修改等操作时。
方式:startup restrict或alter system enable restricted session;
对于已经连接到oracle的非DBA用户,可以使用alter system kill session命令,强制杀掉。
只读模式:将oracle设置为只读模式,不能做任何修改
用途:只能做查询操作,将数据文件offline或改回online。不能对表空间做offline的操作。
方式:alter database read only; 设置成只读模式
alter database read write; 设置成读写模式
3.数据字典和控制文件
数据字典分为:基表和动态视图(v$开头的)
数据字典存储信息包含:
1.数据库逻辑和物理结构。
2.所有数据库对象信息。
3.所有数据库对象的磁盘空间分配信息。
4.oracle相关信息。db_name,instance_name,参数等。
5.用户权限,角色信息。
6.完整的约束信息
7.审计信息。
8.列的默认值。
DDL语句和某些DML语句(修改了磁盘的空间等操作)会引起数据字典的修改。
数据字典:
DBA_*:包含数据库中所有对象的信息。
ALL_*:有关用户可以访问的对象的信息。
USER_*:用户拥有的对象信息。
动态性能视图:是一组虚表。存在内存中的。是不允许DML操作的。
控制文件:
内容:db_name,SID,时间戳,当前日子的序列号,日志的历史信息,归档日志文件的位置和状态,联机重做日志文件的位置,数据文件的名字和位置,表空间信息,备份的位置和信息,校验点信息等。
用途:当数据加载时,oracle会读取控制文件中的信息,如读取数据文件的准备位置和名字,联机重做日志文件的准确位置和状态,这样才能正常代开实例。
相关视图:v$controlfile,v$controlfile_record_section
查看控制文件配置:通过查询v$controlfile_record_section视图
移动控制文件:alter system set control_files '/path/file_name','/path1/file_name1' ...scope = spfile;
安全方面:控制文件对于oracle数据库是非常重要的,所以为了安全,应该复制多份,并保存到不同的磁盘上。
alter system set control_file = '/path1/file_name1','/path2/file_name2',...;
使用RMAN进行控制文件的备份:
配置成自动备份控制文件:configure controlfile autobackup on; 在做数据库备份时,会自动把控制文件备份到备份集中。
使用命令:backup current controlfile format '/path/file_name';
sqlplus下通过:alter database backup controlfile to '/path/file_name';
如果控制文件损坏要进行恢复:
recover database using backup controlfile until cancel;
alter database open resetlogs;
4.重做日志文件:
内容:记录用户在oracle数据库中的操作过程的记录。
用途:可以通过重做日志文件,进行数据库的恢复。
需要注意的问题:
1. An instance requires at least two groups of online redo log files.
一个实例至少需要两组联机重做日志文件。
2. An active or current group cannot be dropped.
active或current状态的组,不能被删除。
3. When an o 1 If the member you want to drop is the last valid member of the group, you cannot drop that member.
4. --无法删除组里最有一个有效成员。
5. If the group is current, you must force a log file switch before you can drop the member.
--要删除当前成员前,必须要先强制切换日志。
6. If the database is running in ARCHIVELOG mode and the log file group to which the member belongs is not archived, then the member cannot be dropped.
--在归档模式下,无法删除还没有归档的重做日志。
7. When an online redo log member is dropped, the operating system file is not deleted
--当成员被删除时,操作系统上的文件没有被删除。
8. clear可以删除一个没有归档的日志组,要使用unarchived关键字。
9. 使用rename命令来更改redo log file,需要将数据库以mount方式打开。
重做日志文件组:组里的每个日志文件都是完全的镜像,当其中有一个损坏时,并不影响。所以每个日志文件组最少有2个以上的日志文件成员,并发在不同磁盘。
相关视图:v$log,v$logfile
操作:
1.为日志文件添加/删除组:
alter database add logfile '/path/redologfile1','/path1/redologfile2' size n MB;
alter database drop logfile group num;
如果不指定组号,系统会自动添加。
2.为日志文件添加/删除成员:
alter database add logfile member 'file_name' to group group_num;
alter database drop logfile member 'file_name' to group group_num;
3.清空联机重做日志文件:
ALTER DATABASE [database] CLEAR [UNARCHIVED] LOGFILE
{GROUP integer|('filename'[, 'filename']...)}
[,{GROUP integer|('filename'[, 'filename']...)}]...
4.强制切换日志文件和强制生成检查点:
1.alter system switch logfile;
2.alter system checkpoint;
5.数据文件和表空间
表空间:数据库的逻辑存储
相关视图:dba_tablespaces,v$tablespace
分类:本地管理的表空间(lmt),数据字典管理的表空间(dmt)
lmt:可以避免表空间的碎片。
表空间类型:系统表空间,用户表空间,undo表空间,临时表空间。
系统表空间:保存系统信息,数据字典等信息。system,sysaux表空间
用户表空间:存放业务数据。
创建:create tablespace tbs_name
datafile '/path/data_file_name1' size n M,
'/path/data_file_name2' size n M, ...
extent management local
uniform. size n M [segment space management auto];
删除:drop tablespace tbs_name;
还原表空间:存放旧数据。oracle自动管理还原数据。
创建:create undo tbs_name
datafile '/path/undo_file_name' size n M;
修改默认undo表空间:
alter system set undo_tablespace = tbs_name scope=both;
修改undo表空间保存机制:
alter tablespace undo_tbs_name retention guarantee/noguarantee;
临时表空间:存放临时数据,大的排序过程的中间结果。
特性:
1.不能置为只读
2.不能将临时数据文件重命名。
3.临时数据文件总是置为nologging状态。
4.不能使用alter database 命令创建临时数据文件
5.以只读方式运行的数据库需要临时数据文件
6.介质恢复是不能回复临时数据文件的
7.备份是不需备份临时数据文件
创建:
create temporary tablespace tbs_name
tempfile '/path/temp_file_name' size n M,
extent management local
uniform. size n M [segment space management auto];
默认临时表空间:数据库创建后随之建立的。
相关视图:database_properties
修改默认临时表空间:
alter database default temporary tablespace tbs_name;
设置表空间为脱机:alter tablespace tbs_name offline;
注意:默认temporary,系统表空间,有活动的undo表空间不能置为只读。
改回联机状态:alter tablespace tbs_name online;
脱机目的:
1.在打开数据库的状态下,移动数据文件
2.恢复表空间或数据文件
3.使被offline的表空间无法被访问。
设置表空间为只读:alter tablespace tbs_name read only;
改回读写状态:alter tablespace tbs_name read write;
目的:不能做修改操作,可以保护数据。
注意:可以手工修改表空间的存储参数,不过从9i后,最好还是通过segment space management auto让oracle自动管理。
重新设置表空间的大小:
alter database datafile '/path/data_file_name' autoextend on next n M;
OMF自动管理表空间(9i开始引入的)
设定:DB_CREATE_FILE_DEST,然后就可以创建不带自句而创建表空间了。
alter system set db_create_file_dest = 'path';
删除表空间时可级联删除数据文件:
drop tablespace tbs_name include contents and datafiles;
数据文件:存放系统数据和业务数据的文件。
为表空间添加数据文件:
alter tablespace add datafile '/path/data_file_name' size n M;
重新设置数据文件的大小:
alter database datafile '/path/data_file_name' resize n M;
移动数据文件:要先将表空间置为脱机状态
方法一:alter tablespace方法适用于非系统表空间或没有活动的undo表空间或临时表空间
步骤:
1.将对应的表空间置为offline
2.使用os命令,将数据文件拷贝到新位置。
3.alter tablespace tbs_name rename datafile 'old_path/name' to 'new_path/name1';
4.将该表空间置为online。
方法二:alter database方法适用于系统表空间和不能置为offline的表空间的数据文件
步骤:
1.shutdown 数据库
2.使用os命令,将数据文件拷贝到新位置
3.startup mount
4.alter database db_name rename file 'old_path/name1' to 'new_path/name2';
5.alter database open;
6数据库的存储结构
段(segment):在磁盘空间中存储对象的空间。
包括:表,分区表,索引,簇,索引表,临时段,还原段,大对象段,嵌套表等。一个段可以有多个区
区(extent):一个区有多个数据块。是某个段中的一块空间。
可以指定扩展段的每个区的大小:uniform. size
使用自动段空间管理segment space manager auto
分配区:
1.当一个段被创建时
2.当一个段被扩展时
3.当一个段被改大时
回收区
1.当一个段被删除时
2.当一个段被truncate时
3.当一个段被改小时
块 (db_block):是数据库中最小的存储单元,一个数据块包含多个os块。
关键参数:DB_BLOCK_SIZE,在数据库创建时设定。
数据块头信息:
PCTFREE:为update保留的空间。
INITRANS:定义创建数据块或索引块时事务槽的初始值。
MAXTRANS:定义了创建数据块或索引块时事务槽的最大值。
7.还原段
管理方法:自动管理,手工管理
自动管理:oracle自动管理还原段的创建,分配和优化等
手工管理:手工管理还原的创建,分配和优化等
引入目的:
1.事务回滚:将还原段中的原始数据回写到原来的数据行中。
2.事务恢复:还原所有没提交的数据。
3.读一致性:
undo类型:
系统还原段:
非系统还原段:
私有还原段:只为一个instance服务
公有还原段: 为任何一个instance服务
重要参数:
undo_mangement:设置手动还是自动管理还原段(静态参数)
undo_retention:设置还原段中的旧数据的保留时间。
注意:加大undo_retention参数是
undo_tablespace:默认undo表空间。
undo_supperss_errors:在还原数据管理的自动模式中试图执行手动操作时,将不显示错误信息
alter system set 参数=value;修改动态参数。
相关命令:
创建:
create undo tablespace tbs_name
datafile 'path' size n M;
删除:
drop tablespace
注意:不能删除当前活动的undo表空间,必须改变默认undo表空间,等所有事务都完成了,再删除。
alter system set undo_tablespace = ‘new undo tablespace path’;
相关数据字典:
v$undostat,v$rollname,v$rollstat,v$session,v$transaction,dba_roolback_segs
8.表
管理方式:逻辑存储数据。
表的分类:普通表,分区表,簇,索引组织表,外部表,临时表。。。
相关操作:
创建:
create table tb_name (col type,col2 type…)
tablespace tbs_name;
截断表:
truncate table tb_name;
删除:
drop table tb_name [purge][cascade constraints];
修改字段名:
alter table tb_name rename old_name to new_name;
修改字段类型:
alter table tb_name modify(col newtype,….);
添加字段:
alter table tb_name add(col type,….);
添加时注意:
将某一列置为无效:
alter table tb_name set unused col_name cascade constraints;
删除字段:
alter table tb_name drop col_name cascade constraints checkpoint 行数;
删除时注意:
1. 使用alter table一次只能删除一个字段。
2. 表中至少还存在一列
3. 删除的列无法恢复
4. 所删除的列可包含也可不包含数据
5. 8i以上才能使用此命令
移动表:
alter table tb_name move tablespace tbs_name;
分析表:
analyze table table_name compute statistics;
收缩表:
alter table tb_name shrink
9.索引
引入目的:为了调高效率,按索引关键字的顺序存放记录。在索引记录中存有的索引关键字和指向表中真正的数据的指针,利用算法迅速找出所需记录,并根据指针找到数据。
内部原理:一种允许直接访问表中某一数据行的树状结构。
优点:提高查询效率
管理方式:
1. 平衡查询和DML的需要。在DML操作较多的表或字段上,尽量少加索引。因为索引会导致查询快,但DML操作效率会降低。
2. 将数据库中的索引放入到单独的表空间中,降低段的I/O竞争。
3. 使用统一的extent尺寸,这样是为了减少系统的转换空间。
4. 对大索引可考虑nologging方式,这样可以减少redo操作,提高系统效率。
类型:
按逻辑分类:
单列索引:基于一列的索引。
多列索引:基于多列的索引。最多32列
唯一索引:保证表中任何数据行上的索引都不能重复。
非唯一索引:表中数据行的索引列的值可以相同。
函数索引:利用表中字段的一列或多列使用函数或表达式创建的索引。
按物理分类:
b-tree索引:
bitmap索引:
分区或非分区索引:
相关操作:
创建:
create [unique|bitmap] index ind_name on tb_name(col,…);
删除:
drop index ind_name;
回收索引段的没用的空间:
alter index tb_name deallocate unused;
重建索引:
alter index ind_name rebuild;
开启对索引的监督:
alter index ind_name monitoring usage;
关闭对索引的监督:
alter index ind_name nomonitoring usage;
10.视图
引入原理:
管理方式:
分类:普通视图和物化视图。
相关操作:
创建:
create or replace view view_name
删除:
drop view view_name;
11.序列和同义词
12. 用户和模式
用户:连接数据库,并可以操作数据库的对象。
模式:
用户的相关操作:
创建:
create user user_name identified by password
default tablespace tbs_name
default profile;
删除:
drop user user_name [cascade];
13.角色
定义:角色是一个权限的集合,它可以授予用户或其它角色。
引入目的:更加方面的管理权限。并可以根据不同的用户通过自定义的角色,进行权限的分配。
相关操作:
创建:
create role role_name
删除:
14.权限
定义:执行某些特定SQL的权利。
引入目的:保护数据库。限制不同连接人员可使用的范围。
分类:
系统权限:访问数据库的全力,使用户在数据库中能执行一些特定的操作。
对象权限:维护数据库中的对象的权力,使用户能访问和维护某一特定的对象。
相关操作:
授权:
grant privs_name to user_name [with admin option];
grant role_name to user_name [with admin option];
回收:
revoke privs_name from user_name;
grant role_name from user_name;
15.数据的完整性和一致性
维护数据的完整性的方法:
1.oracle的完整性约束
2.数据库的触发器
3.应用代码
oracle中的约束:
1.非空约束 not null:所定义的列不能为空。
2.唯一约束 unique:所定义的列不能有重复数据。
3.主键约束 primary key:指明一列或多列的组合为该表的主键,且唯一非空。
4.外键约束 foreign key:
5.条件约束 check:
oracle约束的4中状态:
1.disable novalidate 禁止而无效:
2.disable validate 禁止而有效:
3.enable novalidate 激活而无效:
4.enable validate 激活而有效:
1.Oracle体系结构
oracle包含:实例(instance)和数据库(相关文件)
oracle分为:内存结构和物理结构
逻辑结构:为每个连接来的实例分配内存区域
物理结构:存放数据和相关数据库信息的文件
Insatance:包括SGA和一些后台进程
SGA:参数:sga_max_size。包含share_pool,large_pool,java_pool,db buffer cache,redo buffer cache
shared_pool:存放最近使用的SQL,PL/SQL。shared_pool_size
db buffer cache:存放一些查询结果。db_block_size * db_cache_size
redo buffer cache:存放对数据库操作的记录.
large_pool:large_pool_size
java_pool:存放一些java代码.java_pool_size
background:实例需要的进程,5个必须进程,其他为可选进程
SMON:系统监督进程
当实例崩溃,自动做实例恢复。主要做前滚(将db buffer cache中的脏数据写到数据文件中)和回滚(没提交的数据)。
PMON:进程监督进程
在没有正确退出oracle等造成的进程崩溃,PMON会做清理工作:如释放资源,释放锁,回滚事务,重启dispatcher等。
LGWR:日志写进程
工作原理:将redo buffer cache中的redo记录,顺序的 写到redo log file里
触发LGWR的条件:
1.每3秒
2.redo buffer cache里的数据,超过1MB
3.redo buffer cache里的数据超过总容量的1/3。
4.在DBWR写之前,会写
5.当事务commit时
DBWR/DBWn:数据库写进程
工作原理:将db buffer cache中的脏数据,写到数据文件中
触发DBWR的条件:
1.当发生checkpoint
2.db buffer cache中的脏数据到达规定的限度
3.超时3秒(在db buffer cache中里3秒没有找到空闲空间时)
4.truncate或delete表中数据时
5.将表空间设置为read only时
6.使用alter tablespace users begin backup进行联机备份时
7.当表空间被offline或重新修改成online时
CKPT:检验点进程
工作原理:产生校验点,保持数据的一致性。
CKPT:下面情况出发CKPT进程
A checkpoint occurs, for example, in the following situations:
1 At every log switch. --当日志切换时
2 When an instance has been shut down with the normal, transactional, or immediate option. --当一个实例正常关闭时(除了使用abort来关闭)
3 When forced by setting the initialization parameter FAST_START_MTTR_TARGET. --强制设置9i新增的FAST_START_MTTR_TARGET参数
4 When manually requested by the database administrator. --DBA手工发出请求
5 When the ALTER TABLESPACE [OFFLINE NORMAL|READ ONLY|BEGIN BACKUP] cause checkpointing on specificdata files. --对表空间做offline,只读,热备等操作时,检查点会发生在指定的数据文件上
A checkpoint can be forced using the FAST_START_MTTR_TARGET parameter.
--checkpoint可以使用FAST_START_MTTR_TARGET强制设置。
FAST_START_MTTR_TARGET is a shortcut to the deprecated parameters FAST_START_IO_TARGET and LOG_CHECKPOINT_TIMEOUT.
--FAST_START_MTTR_TARGET取代了后面2个参数。
FAST_START_MTTR_TARGET = 600 indicates that instance recovery should not take more than 600 seconds, and the database will adjust the other parameters to this goal.
--FAST_START_MTTR_TARGET指出实例恢复不能超过600秒,并且数据库将调整其他参数以达到目标。
FAST_START_IO_TARGET and LOG_CHECKPOINT_TIMEOUT must not be used if FAST_START_MTTR_TARGET is used.
--如果FAST_START_IO_TARGET被使用,则FAST_START_IO_TARGET和LOG_CHECKPOINT_TIMEOUT就不会被使用。
可选进程:
ARCH/ARCn:归档日志进程
工作原理:备份redo log file。
触发机制:当redo log file进行完switch log后,将写满的redo log file写到归档日志文件中。
数据库:数据文件,控制文件,重做日志文件
数据文件:存放业务数据和数据库系统数据的物理文件
控制文件:包含数据库文件的位置和数据库的相关参数
重做日志文件:存放redo buffer cache中的记录,即对数据库操作的记录。
oracle之外还包含3中文件:
初始化参数文件:实例在启动时,oracle会读取该文件中的参数,来配置实例。
静态参数文件(pfile):文本文件。存放启动实例时需要的参数:
1.db_name,instance_name
2.controlfile位置
3.SGA的配置
4.undo的配置
5.该实例能启动的最大进程数
6.db_block_size
7.是否允许DBA远程登录等。
动态参数文件(spfile):二进制文件。内容一样,不过该文件是oracle使用的,所以是二进制,用户不要用文本修改该文件
当pfile和spfile内容不一致时:可用命令更新。
create pfile 【file_name】 from spfile 【file_name】;
create spfile 【file_name】 from pfile 【file_name】;
oracle在启动实例时,会先寻找spfileSID.ora文件,如果没有会找initSID.ora文件,如果还没有找到会找pfile.ora文件来启动实例。
密码文件:保存数据库用户的用户名和密码。SYSDBA/SYSOPER用户。
归档日志文件:将redo log file里的内容,备份到操作系统上的指定目录下的文件。
2.数据库的启动,关闭及相应模式:
启动:startup 【nomount】【mount】【open】
nomount:非加载方式打开数据库
工作原理:
1.分配了SGA
2.打开所需的全部数据库后台进程
3.打开报警文件(alert file)和日志追踪文件(trace file)
mount:加载方式打开数据库
工作原理:
1.将db与instance关联起来
2.打开控制文件
3.读控制文件以获取数据文件和重做日志文件的名字,状态等信息,当不检查这些文件是否存在。
open:正常方式打开数据库
工作原理:
1.打开所有联机数据文件
2.打开所有联机重做日志文件
关闭:shutdown【abort】【immediate】【transactional】【normal】
abort:强制关闭数据库,要做实例恢复
immediate:立即关闭数据库,对数据库进行前滚和回滚,没提交的回滚,提交的写到数据文件中,不用做实例恢复
transactional:禁止新的session进入,对空间的session进行关闭,等待没提交的session提交事务后,才关闭数据库
normal:正常关闭数据库,如果有没提交的事务,数据库会等待所有事务提交后,才关闭。
如何查询到那些session的事务没有提交或其他造成数据库挂起状态的event?
可以查询blocking_session得到等待session的sid,通过blocking_session中的相关信息,然后再通过查询v$session里的sid,serial#得到准确的session信息,最后使用alter system kill session'sid,serial#';
限制模式:oracle以限制模式启动时,只有拥有DBA权限的用户才能连接到数据库
用途:DBA要对数据库做备份,修改等操作时。
方式:startup restrict或alter system enable restricted session;
对于已经连接到oracle的非DBA用户,可以使用alter system kill session命令,强制杀掉。
只读模式:将oracle设置为只读模式,不能做任何修改
用途:只能做查询操作,将数据文件offline或改回online。不能对表空间做offline的操作。
方式:alter database read only; 设置成只读模式
alter database read write; 设置成读写模式
3.数据字典和控制文件
数据字典分为:基表和动态视图(v$开头的)
数据字典存储信息包含:
1.数据库逻辑和物理结构。
2.所有数据库对象信息。
3.所有数据库对象的磁盘空间分配信息。
4.oracle相关信息。db_name,instance_name,参数等。
5.用户权限,角色信息。
6.完整的约束信息
7.审计信息。
8.列的默认值。
DDL语句和某些DML语句(修改了磁盘的空间等操作)会引起数据字典的修改。
数据字典:
DBA_*:包含数据库中所有对象的信息。
ALL_*:有关用户可以访问的对象的信息。
USER_*:用户拥有的对象信息。
动态性能视图:是一组虚表。存在内存中的。是不允许DML操作的。
控制文件:
内容:db_name,SID,时间戳,当前日子的序列号,日志的历史信息,归档日志文件的位置和状态,联机重做日志文件的位置,数据文件的名字和位置,表空间信息,备份的位置和信息,校验点信息等。
用途:当数据加载时,oracle会读取控制文件中的信息,如读取数据文件的准备位置和名字,联机重做日志文件的准确位置和状态,这样才能正常代开实例。
相关视图:v$controlfile,v$controlfile_record_section
查看控制文件配置:通过查询v$controlfile_record_section视图
移动控制文件:alter system set control_files '/path/file_name','/path1/file_name1' ...scope = spfile;
安全方面:控制文件对于oracle数据库是非常重要的,所以为了安全,应该复制多份,并保存到不同的磁盘上。
alter system set control_file = '/path1/file_name1','/path2/file_name2',...;
使用RMAN进行控制文件的备份:
配置成自动备份控制文件:configure controlfile autobackup on; 在做数据库备份时,会自动把控制文件备份到备份集中。
使用命令:backup current controlfile format '/path/file_name';
sqlplus下通过:alter database backup controlfile to '/path/file_name';
如果控制文件损坏要进行恢复:
recover database using backup controlfile until cancel;
alter database open resetlogs;
4.重做日志文件:
内容:记录用户在oracle数据库中的操作过程的记录。
用途:可以通过重做日志文件,进行数据库的恢复。
需要注意的问题:
1. An instance requires at least two groups of online redo log files.
一个实例至少需要两组联机重做日志文件。
2. An active or current group cannot be dropped.
active或current状态的组,不能被删除。
3. When an o 1 If the member you want to drop is the last valid member of the group, you cannot drop that member.
4. --无法删除组里最有一个有效成员。
5. If the group is current, you must force a log file switch before you can drop the member.
--要删除当前成员前,必须要先强制切换日志。
6. If the database is running in ARCHIVELOG mode and the log file group to which the member belongs is not archived, then the member cannot be dropped.
--在归档模式下,无法删除还没有归档的重做日志。
7. When an online redo log member is dropped, the operating system file is not deleted
--当成员被删除时,操作系统上的文件没有被删除。
8. clear可以删除一个没有归档的日志组,要使用unarchived关键字。
9. 使用rename命令来更改redo log file,需要将数据库以mount方式打开。
重做日志文件组:组里的每个日志文件都是完全的镜像,当其中有一个损坏时,并不影响。所以每个日志文件组最少有2个以上的日志文件成员,并发在不同磁盘。
相关视图:v$log,v$logfile
操作:
1.为日志文件添加/删除组:
alter database add logfile '/path/redologfile1','/path1/redologfile2' size n MB;
alter database drop logfile group num;
如果不指定组号,系统会自动添加。
2.为日志文件添加/删除成员:
alter database add logfile member 'file_name' to group group_num;
alter database drop logfile member 'file_name' to group group_num;
3.清空联机重做日志文件:
ALTER DATABASE [database] CLEAR [UNARCHIVED] LOGFILE
{GROUP integer|('filename'[, 'filename']...)}
[,{GROUP integer|('filename'[, 'filename']...)}]...
4.强制切换日志文件和强制生成检查点:
1.alter system switch logfile;
2.alter system checkpoint;
5.数据文件和表空间
表空间:数据库的逻辑存储
相关视图:dba_tablespaces,v$tablespace
分类:本地管理的表空间(lmt),数据字典管理的表空间(dmt)
lmt:可以避免表空间的碎片。
表空间类型:系统表空间,用户表空间,undo表空间,临时表空间。
系统表空间:保存系统信息,数据字典等信息。system,sysaux表空间
用户表空间:存放业务数据。
创建:create tablespace tbs_name
datafile '/path/data_file_name1' size n M,
'/path/data_file_name2' size n M, ...
extent management local
uniform. size n M [segment space management auto];
删除:drop tablespace tbs_name;
还原表空间:存放旧数据。oracle自动管理还原数据。
创建:create undo tbs_name
datafile '/path/undo_file_name' size n M;
修改默认undo表空间:
alter system set undo_tablespace = tbs_name scope=both;
修改undo表空间保存机制:
alter tablespace undo_tbs_name retention guarantee/noguarantee;
临时表空间:存放临时数据,大的排序过程的中间结果。
特性:
1.不能置为只读
2.不能将临时数据文件重命名。
3.临时数据文件总是置为nologging状态。
4.不能使用alter database 命令创建临时数据文件
5.以只读方式运行的数据库需要临时数据文件
6.介质恢复是不能回复临时数据文件的
7.备份是不需备份临时数据文件
创建:
create temporary tablespace tbs_name
tempfile '/path/temp_file_name' size n M,
extent management local
uniform. size n M [segment space management auto];
默认临时表空间:数据库创建后随之建立的。
相关视图:database_properties
修改默认临时表空间:
alter database default temporary tablespace tbs_name;
设置表空间为脱机:alter tablespace tbs_name offline;
注意:默认temporary,系统表空间,有活动的undo表空间不能置为只读。
改回联机状态:alter tablespace tbs_name online;
脱机目的:
1.在打开数据库的状态下,移动数据文件
2.恢复表空间或数据文件
3.使被offline的表空间无法被访问。
设置表空间为只读:alter tablespace tbs_name read only;
改回读写状态:alter tablespace tbs_name read write;
目的:不能做修改操作,可以保护数据。
注意:可以手工修改表空间的存储参数,不过从9i后,最好还是通过segment space management auto让oracle自动管理。
重新设置表空间的大小:
alter database datafile '/path/data_file_name' autoextend on next n M;
OMF自动管理表空间(9i开始引入的)
设定:DB_CREATE_FILE_DEST,然后就可以创建不带自句而创建表空间了。
alter system set db_create_file_dest = 'path';
删除表空间时可级联删除数据文件:
drop tablespace tbs_name include contents and datafiles;
数据文件:存放系统数据和业务数据的文件。
为表空间添加数据文件:
alter tablespace add datafile '/path/data_file_name' size n M;
重新设置数据文件的大小:
alter database datafile '/path/data_file_name' resize n M;
移动数据文件:要先将表空间置为脱机状态
方法一:alter tablespace方法适用于非系统表空间或没有活动的undo表空间或临时表空间
步骤:
1.将对应的表空间置为offline
2.使用os命令,将数据文件拷贝到新位置。
3.alter tablespace tbs_name rename datafile 'old_path/name' to 'new_path/name1';
4.将该表空间置为online。
方法二:alter database方法适用于系统表空间和不能置为offline的表空间的数据文件
步骤:
1.shutdown 数据库
2.使用os命令,将数据文件拷贝到新位置
3.startup mount
4.alter database db_name rename file 'old_path/name1' to 'new_path/name2';
5.alter database open;
6数据库的存储结构
段(segment):在磁盘空间中存储对象的空间。
包括:表,分区表,索引,簇,索引表,临时段,还原段,大对象段,嵌套表等。一个段可以有多个区
区(extent):一个区有多个数据块。是某个段中的一块空间。
可以指定扩展段的每个区的大小:uniform. size
使用自动段空间管理segment space manager auto
分配区:
1.当一个段被创建时
2.当一个段被扩展时
3.当一个段被改大时
回收区
1.当一个段被删除时
2.当一个段被truncate时
3.当一个段被改小时
块 (db_block):是数据库中最小的存储单元,一个数据块包含多个os块。
关键参数:DB_BLOCK_SIZE,在数据库创建时设定。
数据块头信息:
PCTFREE:为update保留的空间。
INITRANS:定义创建数据块或索引块时事务槽的初始值。
MAXTRANS:定义了创建数据块或索引块时事务槽的最大值。
7.还原段
管理方法:自动管理,手工管理
自动管理:oracle自动管理还原段的创建,分配和优化等
手工管理:手工管理还原的创建,分配和优化等
引入目的:
1.事务回滚:将还原段中的原始数据回写到原来的数据行中。
2.事务恢复:还原所有没提交的数据。
3.读一致性:
undo类型:
系统还原段:
非系统还原段:
私有还原段:只为一个instance服务
公有还原段: 为任何一个instance服务
重要参数:
undo_mangement:设置手动还是自动管理还原段(静态参数)
undo_retention:设置还原段中的旧数据的保留时间。
注意:加大undo_retention参数是
undo_tablespace:默认undo表空间。
undo_supperss_errors:在还原数据管理的自动模式中试图执行手动操作时,将不显示错误信息
alter system set 参数=value;修改动态参数。
相关命令:
创建:
create undo tablespace tbs_name
datafile 'path' size n M;
删除:
drop tablespace
注意:不能删除当前活动的undo表空间,必须改变默认undo表空间,等所有事务都完成了,再删除。
alter system set undo_tablespace = ‘new undo tablespace path’;
相关数据字典:
v$undostat,v$rollname,v$rollstat,v$session,v$transaction,dba_roolback_segs
8.表
管理方式:逻辑存储数据。
表的分类:普通表,分区表,簇,索引组织表,外部表,临时表。。。
相关操作:
创建:
create table tb_name (col type,col2 type…)
tablespace tbs_name;
截断表:
truncate table tb_name;
删除:
drop table tb_name [purge][cascade constraints];
修改字段名:
alter table tb_name rename old_name to new_name;
修改字段类型:
alter table tb_name modify(col newtype,….);
添加字段:
alter table tb_name add(col type,….);
添加时注意:
将某一列置为无效:
alter table tb_name set unused col_name cascade constraints;
删除字段:
alter table tb_name drop col_name cascade constraints checkpoint 行数;
删除时注意:
1. 使用alter table一次只能删除一个字段。
2. 表中至少还存在一列
3. 删除的列无法恢复
4. 所删除的列可包含也可不包含数据
5. 8i以上才能使用此命令
移动表:
alter table tb_name move tablespace tbs_name;
分析表:
analyze table table_name compute statistics;
收缩表:
alter table tb_name shrink
9.索引
引入目的:为了调高效率,按索引关键字的顺序存放记录。在索引记录中存有的索引关键字和指向表中真正的数据的指针,利用算法迅速找出所需记录,并根据指针找到数据。
内部原理:一种允许直接访问表中某一数据行的树状结构。
优点:提高查询效率
管理方式:
1. 平衡查询和DML的需要。在DML操作较多的表或字段上,尽量少加索引。因为索引会导致查询快,但DML操作效率会降低。
2. 将数据库中的索引放入到单独的表空间中,降低段的I/O竞争。
3. 使用统一的extent尺寸,这样是为了减少系统的转换空间。
4. 对大索引可考虑nologging方式,这样可以减少redo操作,提高系统效率。
类型:
按逻辑分类:
单列索引:基于一列的索引。
多列索引:基于多列的索引。最多32列
唯一索引:保证表中任何数据行上的索引都不能重复。
非唯一索引:表中数据行的索引列的值可以相同。
函数索引:利用表中字段的一列或多列使用函数或表达式创建的索引。
按物理分类:
b-tree索引:
bitmap索引:
分区或非分区索引:
相关操作:
创建:
create [unique|bitmap] index ind_name on tb_name(col,…);
删除:
drop index ind_name;
回收索引段的没用的空间:
alter index tb_name deallocate unused;
重建索引:
alter index ind_name rebuild;
开启对索引的监督:
alter index ind_name monitoring usage;
关闭对索引的监督:
alter index ind_name nomonitoring usage;
10.视图
引入原理:
管理方式:
分类:普通视图和物化视图。
相关操作:
创建:
create or replace view view_name
删除:
drop view view_name;
11.序列和同义词
12. 用户和模式
用户:连接数据库,并可以操作数据库的对象。
模式:
用户的相关操作:
创建:
create user user_name identified by password
default tablespace tbs_name
default profile;
删除:
drop user user_name [cascade];
13.角色
定义:角色是一个权限的集合,它可以授予用户或其它角色。
引入目的:更加方面的管理权限。并可以根据不同的用户通过自定义的角色,进行权限的分配。
相关操作:
创建:
create role role_name
删除:
14.权限
定义:执行某些特定SQL的权利。
引入目的:保护数据库。限制不同连接人员可使用的范围。
分类:
系统权限:访问数据库的全力,使用户在数据库中能执行一些特定的操作。
对象权限:维护数据库中的对象的权力,使用户能访问和维护某一特定的对象。
相关操作:
授权:
grant privs_name to user_name [with admin option];
grant role_name to user_name [with admin option];
回收:
revoke privs_name from user_name;
grant role_name from user_name;
15.数据的完整性和一致性
维护数据的完整性的方法:
1.oracle的完整性约束
2.数据库的触发器
3.应用代码
oracle中的约束:
1.非空约束 not null:所定义的列不能为空。
2.唯一约束 unique:所定义的列不能有重复数据。
3.主键约束 primary key:指明一列或多列的组合为该表的主键,且唯一非空。
4.外键约束 foreign key:
5.条件约束 check:
oracle约束的4中状态:
1.disable novalidate 禁止而无效:
2.disable validate 禁止而有效:
3.enable novalidate 激活而无效:
4.enable validate 激活而有效:
相关文章推荐
- Oracle trunc()函数的用法
- ORACLE SQL性能优化系列 (二)
- ORACLE SQL性能优化系列 (三)
- ORACLE SQL性能优化系列 (一)
- Oracle nvl(),nvl2()函数介绍
- ORACLE中SQL查询优化研究
- 更改oracle字符集
- Oracle 300问
- Oracle之常用FAQ--SQL
- Oracle之常用FAQ--性能调整
- oracle查询表空间的空间占用情况
- Oracle之常用FAQ--备份与恢复
- Oracle之常用FAQ--Oracle 构架体系
- Oracle中临时表的深入研究
- Oracle视图和用户管理
- Oracle TYPE OBJECT 用法
- 如何把oracle服务加到linux启动项
- Oracle数据库RMAN备份与灾难恢复在寒区旱区特色数据库的应用
- ORACLE10G AWR使用和分析
- oracle表分区详解