一、oracle基础
所有的关系型数据库,都是在磁盘中的文件集合。
oracle实例和数据库:数据库启动后分配的内存和建立的后台进程,数据库关闭后,物理上的文件还存在,但实例不存在。
实例就是一组进程和内存,进程可操作数据库,任何时刻一个数据库只有一个实例对其进行操作
。
1.1 oracle四类文件
- 参数文件:设定数据库的限制、用户或者进程的限制、数据库资源的限制、调整系统的性能。
- 控制文件:一个控制文件只能属于一个数据库。包含数据文件、在线日志文件、归档文件的信息,这些信息用于数据库open时的文件验证;数据库的架构改变时,比如增减,删除文件时,会更新控制文件。包含了数据库恢复时候需要的一些信息,用于数据库的恢复。
- 数据文件:存放实际的数据;损坏时:通过备份数据恢复或者用redo信息恢复。
- 日志文件:核心作用是保护数据的安全和恢复数据。 附加作用:数据同步和分析。
1.2 oracle目录
- admin:Oracle实例的配置,运行日志等文件;每个实例一个目录。SID:System IDentifier,是
数据库实例
的唯一标记;由于任何时刻一个数据库只有一个实例对其进行操作
,如果安装多个数据库,就会jianchadian有多个实例,就需要通过SID来区分实例。通常也会使用SID(数据库实例
的唯一标记)作为库的名字。 - cfgtoollog:存放运行dbca,emca,netca等图形化配置程序的log。
- checkpoints:存放检查点文件。
- diag:无论是asm、crs还是rdbms,所有组件需要被用来诊断的log都放在本目录下,是oracle 11g的先目录。
- flash_recovery_area:闪回区,分配一个特定的目录,存放一些特定的恢复文件,用于集中和简化管理数据库恢复工作。闪回区可存储完全的数据文件备份,增量备份、数据文件副本、当前的控制文件、备份的控制文件、spfile文件、快照控制文件、联机日志文件、归档日志、块跟踪文件、闪回日志。
- product :软件安装目录。
- oradata:存放数据文件。
CONTROL01.CTL:数据库的控制文件。
EXAMPLE01.DBF:数据库的表空间文件。
REDO01.LOG:数据库的重做日志文件。
SYSAUX01.DBF:11g新增的表空间,存储数据字典外的其他数据对象,有系统内部自动维护。
SYSTEM01.DBF:存放系统内部表和数据字典的数据。比如表名、列名。
TEMP01.DBF:临时表空间文件。
UNDOTBS01.DBF:撤销表空间文件,用来保存回滚数据。
USERS01.DBF:用户表空间。
1.3 表空间和数据文件
管理表空间的任务一般是由DBA来管理。
Oracle数据库的数据存放在表空间中,表空间是一个逻辑的概念,它是由数据文件组成,表空间大小由数据文件的数量和大小决定。
表空间有三种:Permanent Tablespaces(永久表空间)、Temporary Tablespaces(临时表空间)、Undo Tablespaces(回滚表空间),Oracle在创建数据库实例的时候,默认会创建三个永久表空间(SYSTEM、SYSAUX、USERS),一个临时表空间(TEMP),一个回滚表空间(UNDOTBS1)。
#1、SYSTEM表空间
SYSTEM表空间主要用于存放Oracle数据库内部的数据字典,它是Oracle数据库最重要的表空间,在创建数据库实例时被最先创建,包含了数据库的元数据,对于数据库来说生死攸关。
#2、SYSAUX表空间
SYSAUX表空间是SYSTEM表空间的辅助表空间,主要用于存储数据字典以外的其他数据对象,它在一定程度上降低了SYSTEM表空间的负荷。
#3、UNDOTBS1表空间
UNDO是回滚表空间,主要有四方面的用途,分别是:事物回滚、数据库恢复、读一致性、闪回查询。
1)事物回滚:当事物执行失败或用户执行回滚操作(rollback)时,Oracle会利用保存在回退段中的信息将数据恢复到原来的值。
2)数据库恢复:当数据库实例出现了意外,在重启恢复时,Oracle先利用重做日志文件的信息对数据库进行恢复,再利用回滚段中的信息回滚未提交的事务。
3)读一致性:当一个用户对数据进行修改时,会预先将其原始值保存到回退段中,这时,如果有其它用户访问该数据,则访问回退段中的信息,使当前用户未提交的修改其他用户无法看到,保证了数据的一致性。
4)闪回查询:通过保留在回退段中的信息,用户可以查询某个数据在过去某个时刻的状态。
#4、TEMP表空间
临时表空间用来管理数据库排序以及用于存储临时表和索引、中间结果等临时对象。当Oracle的内存不够时,会把数据放在临时表空间中,当操作完成后,系统会自动清理临时表空间中的临时对象,自动释放空间。这里的释放只是标记为空闲、可以重用,占用的磁盘空间并没有真正释放。这也是临时表空间有时会不断增大却不见减少的原因。
#5、USERS表空间
USERS表空间用于存放普通用户的表和索引,一般情况下,它是用户的缺省表空间。
#6、查看表空间
用DBA登录数据库,执行以下SQL可以查看数据库全部的表空间。
select * from v$tablespace;
表空间的查询:
1.查看当前用户的缺省表空间
select username,default_tablespace from user_users;
2.查看数据文件
数据文件存放在数据字典DBA_DATA_FILES中,用DBA权限执行以下SQL查询。
select file_name,file_id,tablespace_name,bytes,status,autoextensible,maxbytes,user_bytes,online_status
from DBA_DATA_FILES order by tablespace_name,file_name;
3.查看表空间使用情况;从数据字典DBA_FREE_SPACE和DBA_DATA_FILES中可以查询表空间使用情况
select a.tablespace_name "表空间名",total "表空间大小",
(total - free) "已使用大小",free "表空间剩余大小",
round(total/(1024*1024)) "表空间大小(M)",
round((total-free)/(1024*1024)) "已使用大小(M)",
round(free/(1024*1024)) "表空间剩余大小(M)",
round((total-free)/total,4)*100 "使用率%"
from
(select tablespace_name,sum(bytes) free from DBA_FREE_SPACE group by tablespace_name) a,
(select tablespace_name,sum(bytes) total from DBA_DATA_FILES group by tablespace_name) b
where a.tablespace_name = b.tablespace_name;
1.4 oracle系统用户
sysdba、sysoper和normal是对数据库实例连结的校验与数据库无关。数据库实例连接上数据库后,数据库权限connect、resource和dba的才生效!
- sys:超级管理账户,完成数据所有的管理任务。登录数据库只能以
sysdba、sysoper
登录。 - system:通常用来创建一些用户查看管理信息的表和视图;不建议使用system用户来创建与管理无关的表和视图。登录数据库可以直接登陆
normal
。 - scott:实例用户,提供一些学习数据库操作的示例表。
1.5 配置链接信息
我们知道数据库的connect角色最基本的用户权限,拥有connect权限的用户只可以登录Oracle。进一步来看,Oracle将自己的一些链接信息保存到它的配置文件当中,以便于客户端链接Oracle时,可以从配置文件当中获取信息,从而建立与Oracle的连接。
其文件位置在
Oracle根目录\product\11.2.0\dbhome_1\NETWORK\ADMIN
链接信息保存在:
- sqlnet.ora:通过这个文件来查找客户端与数据库连接的标识解析。
- tnsnames.ora:用于Oracle客户端,用户配置服务器别名参数,就像系统中的hosts文件一样。
- listener.ora:用于Oracle server端(服务器端),配置Oracle的监听端口。
1.6 常见服务
oracle服务按产品分类主要有七大块,这七个服务的含义分别为:
- Oracle ORCL VSS Writer Service:Oracle卷映射拷贝写入服务,VSS(Volume Shadow Copy Service)能够让存储基础设备(比如磁盘,阵列等)创建高保真的时间点映像,即映射拷贝(shadow copy)。它可以在多卷或者单个卷上创建映射拷贝,同时不会影响到系统的系统能。(非必须启动)
- OracleDBConsoleorcl:Oracle数据库控制台服务,orcl是Oracle的实例标识,默认的实例为orcl。(非必须启动)
在运行Enterprise Manager(企业管理器OEM)的时候,需要启动这个服务。(非必须启动) - OracleJobSchedulerORCL:Oracle作业调度(定时器)服务,ORCL是Oracle实例标识。(非必须启动)
- OracleMTSRecoveryService:服务端控制服务。
该服务允许数据库充当一个微软事务服务器MTS、COM/COM+对象和分布式环境下的事务的资源管理器。(非必须启动) - OracleOraDb11g_home1ClrAgent:Oracle数据库.NET扩展服务的一部分。 (非必须启动)
- OracleOraDb11g_home1TNSListener:监听器服务,服务只有在数据库需要远程访问的时候才需要。
- OracleServiceORCL:数据库服务(数据库实例),是Oracle核心服务该服务,是数据库启动的基础, 只有该服务启动,Oracle数据库才能正常启动。(必须启动)
二、oracle的体系结构
Oracle的体系结构是数据库的组成、工作过程,以及数据库中数据的组织和管理机制,包含一系列组件(软件)、用户进程(User process)、服务进程(Server process、PGA)、SGA(共享池、数据缓存、日志缓冲区)、后台进程(SMON、DBWn、PMON、CKPT、LGWR、其它进程)、参数文件(Parameter file)、密码文件(Password)、数据文件(Data files)、控制文件(Control files)、在线重做日志文件(Redo log files)、归档日志文件(Archived log files)。
体系结构
2.1 用户进程和服务进程
用户进程(User process),是指用户通过客户端,比如SQL Plus、PL/SQL Developer、SQL Load、应用程序等工具连接上Oracle数据库而产生的进程。用户进程处理用户输入并与服务器进程通信。用户进程还负责表现用户请求的信息,必要时可以将信息处置成更可用的形式。
服务进程(Server Process),当客户端发起连接时,Oracle创建一个用户进程来处理这个连接。
用户进程启动后,Oracle还会创建一个服务进程来处理连接到实例的用户进程提交的请求。用户进程连接到数据库并创建一个会话时,Oracle服务器进程会分配专门用于当前用户会话的内存区,即PGA区,该区域是私有的,当进程创建时分配,进程结束后被释放,只能被一个服务进程使用。
2.2 系统全局区SGA
系统全局区SGA(System Global Area),是Oracle实例的重要组成部分,在实例启动时分配,是一组包含Oracle数据和控制信息的共享内存。一个SGA只属于一个实例,也就是说,当一个服务器上有多个实例运行时,每个实例都有一个自己的SGA,实例之间不能相互访问。SGA包括共享池(Share pool)、数据缓存(Data buffer cache)和重做日志缓冲区(Redo log buffer),其中共享池又包括Library cache(库缓存)和Data dict cache(数据字典缓存)。
2.3 后台进程
Oracle后台进程是一组运行于Oracle服务器端的后台程序,也是Oracle实例的重要组成部分。这些后台进程分别完成不同的功能。其中SMON、PMON、DBWR、LGWR和CKPT这5个后台进程必须正常启动,否则数据库实例无法工作。此外,还有很多辅助进程,用于实现辅助的功能,如果这些辅助进程发生问题,只会使某些功能受到影响,数据库实例仍是可用的。
- 数据写入进程(DBWR):数据写入进程的主要任务是负责将内存中的“脏”数据块回写到数据文件中。“脏”数据块是指高速数据缓冲区中的被修改过的数据块,这些数据块的内容与数据文件的数据块内容不一致。但DBWR并不是随时将所有的“脏”数据块都写入数据文件,只有满足一定的条件时,DBWR进程才开始成批量的将“脏”数据块写入数据文件Oracle这样做的目的是为了尽量减少I/O操作,提高Oracle服务器性能。
- 检查点进程(CKPT):检查点进程可以看作一个事件,当检查点事件发生时,CKPT会要求DBWR将某些“脏”数据块回写到数据文件。当用户进程发出数据请求时,Oracle系统从数据文件中读取需要的数据并存放到高速数据缓冲区中,用户对数据的操作时在缓冲区中进行的。当用户操作数据时,就会产生大量的日志信息并存储在重做日志缓冲区,当Oracle系统满足一定条件时,日志写入进程(LGWR)会将日志信息写入到重做日志文件组中,当发生日志切换时(写入操作正要从一个日志文件组切换到另一组时),就会启动检查点进程。
另外,DBA还可以通过修改初始化参数文件SPFILE中的CHECKPOINT_PROCESS参数为TRUE来启动检查点进程。 - 日志写入进程(LGWR):日志写入进程用于将重做日志缓冲区中的数据写入重做日志文件。Oracle系统将用户所做的修改日志信息写入日志文件,然后将修改结果写入数据文件。
Oracle实例在运行中会产生大量日志信息,这些日志信息首先被记录在SGA的重做日志缓冲区中,当发生提交命令、或者重做日志缓冲区的信息满1/3、或者日志信息存放超过3秒钟时,LGWR进程就将日志信息从重做日志缓冲区中读出并写入日志文件组中序号较小的文件中,一个日志组写满后接着写另外一组。当LGWR进程将所有?日志文件都写过一遍后,它将再次转向第一个日志文件组重新覆盖。 - 归档进程(ARCH):归档进程是一个可选择的进程,只有当Oracle数据库处于归档模式时,该进程才可能起到作用。若Oracle数据库处于归档模式,当各个日志文件组都被写满即将被覆盖之前,先由归档进程(ARCH)把即将覆盖的日志文件中的日志信息读出,然后再把这些“读出的日志信息”写入到归档日志文件中。
当系统比较繁忙而导致LGWR进程处于等待ARCH进程时,可通过修改LOG_ARCHIVE_MAX_PROCESSES参数启动多个归档进程,从而提高归档写磁盘的速度。 - 系统监控进程(SMON):系统监控进程是在数据库启动时执行恢复工作的强制性进程。比如,在并行服务器模式下,SMON可以恢复另一个处于失败的数据库,使系统切换到另外一台正常的服务器上。
- 进程监控进程(PMON):进程监控进程用于监控其他进程的状态,当有进程启动失败时,PMON会清除失败的用户进程,用于数据不一致时进行恢复工作。
- 锁定进程(LCKN):这是一个可选进程,并行服务器模式下可以出现多个锁定进程以利于数据库通信。
- 恢复进程(RECO):这是在分布式数据库模式下使用的一个可选进程,用于数据不一致时进行恢复工作。
- 调度进程(DNNN): 这是一个可选进程,在共享服务器模式下使用,可以启动多个调度进程。
- 快照进程(SNPN):快照进程用于处理数据库快照的自动刷新,并通过DBMS_JOB包运行预定的数据库存储过程。
2.4 存储结构
Oracle分为逻辑存储结构和物理存储结构,逻辑存储结构用来描述Oracle内部组织和管理数据的方式,是一种层次结构,是面向用户的;物理存储结构是实际的数据存储单元,就是数据库存放在操作系统上的文件。
存储结构三、oracle应用
3.1 数据字典
Oracle通过数据字典来管理和展现数据库信息,数据字典储存数据库的元数据,是数据库的“数据库”。
数据字典由4部分组成:内部RDBMS(X$)
表、数据字典表、动态性能视图(V$)
和(静态)数据字典视图。
- 内部RDBMS
(X$)
表
X$
(表示Oracle数据库的核心部分,这些表用于跟踪数据库内部信息,维持数据库的正常运行。X$
表是加密命名的,而且Oracle不做文档说明,也不允许sysdba以外的用户直接访问,显示授权不被允许。X$
表是Oracle数据库的运行基础,在数据库启动时由Oracle应用程序动态创建。 - 动态性能视图
动态性能视图记录了数据库运行时信息和统计数据,大部分动态性能视图被实时更新以及反映数据库当前状态。在数据库启动时,Oracle动态创建X$
表,在此基础上,Oracle创建了GV$
和V$
视图,GV$
即Global V$
,除了一些特例外,每个V$
都对应一个GV$
。GV$
产生是为了OPS/RAC环境的需要,每个V$
都是基于GV$
的,只是GV$
多了INST_ID列来显示实例ID。
v$database数据库信息
v$datafile数据文件信息
v$controlfile控制文件信息
v$logfile重做日志信息
v$instance数据库实例信息
v$log日志组信息
v$loghist日志历史信息
v$sga数据库SGA信息
v$parameter初始化参数信息
v$process数据库服务器进程信息
v$bgprocess数据库后台进程信息
v$controlfile_record_section控制文件记载的各部分信
v$thread线程信息
v$datafile_header数据文件头所记载的信息
v$archived_log归档日志信
v$archive_dest归档日志的设置信息
v$logmnr_contents归档日志分析的DMLDDL结果信息
v$logmnr_dictionary日志分析的字典文件信息
v$logmnr_logs日志分析的日志列表信息
v$tablespace表空间信息
v$tempfile临时文件信息
v$filestat数据文件的I/O统计信息
v$undostatUndo数据信息
v$rollname在线回滚段信息
v$session会话信息
v$transaction事务信息
v$rollstat回滚段统计信息
v$pwfile_users特权用户信息
v$sqlarea当前查询过的sql语句访问过的资源及相关的信息
v$sql与v$sqlarea基本相同的相关信息
v$sysstat数据库系统状态信息
- 数据字典表(Data dictionary table)
用以存储表、索引、约束以及其它数据库结构的信息,这些对象通常以“$”
结尾(例如:TAB$
、OBJ$
、TS$
等),在创建数据库的时候通过运行$ORACLE_HOME/rdbms/admin/sql.bsq
脚本来创建。 - 静态数据字典视图
由于X$
表和数据字典表通常不能直接被用户访问,Oracle创建了静态数据字典视图来提供用户对于数据字典信息的访问,由于这些信息通常相对稳定,不能直接修改,所以又被称为静态数据字典视图。静态数据字典视图在创建数据库时由$ORACLE_HOME/rdbms/admin/catagory.sql
脚本创建。静态数据字典视图按照前缀的不同通常分成三类,在本质上是为了实现权限控制。在Oracle数据库中,每个用户与方案(Schema)是对应的,Schema是用户所拥有的对象的集合!数据库通过Schema将不同用户的对象隔离开来,用户可以自由的访问自己的对象,但是要访问其他Schema对象就需要相关的授权。
1、USER_*(用户所拥有的相关对象信息)
user_objects用户对象信息
user_source数据库用户的所有资源对象信息
user_segments用户的表段信息
user_tables用户的表对象信息
user_tab_columns用户的表列信息
user_constraints用户的对象约束信息
user_sys_privs当前用户的系统权限信息
user_tab_privs当前用户的对象权限信息
user_col_privs当前用户的表列权限信息
user_role_privs当前用户的角色权限信息
user_indexes用户的索引信息
user_ind_columns用户的索引对应的表列信息
user_cons_columns用户的约束对应的表列信息
user_clusters用户的所有簇信息
user_clu_columns用户的簇所包含的内容信息
user_cluster_hash_expressions散列簇的信息
2、ALL_*(用于有权限访问的所有对象的信息)
all_users数据库所有用户的信息
all_objects数据库所有的对象的信息
all_def_audit_opts所有默认的审计设置信息
all_tables所有的表对象信息
all_indexes所有的数据库对象索引的信息
3、DBA_(数据库所有相关对象的信息)
dba_users数据库用户信息
dba_segments表段信息
dba_extents数据区信息
dba_objects数据库对象信息
dba_tablespaces数据库表空间信息
dba_data_files数据文件设置信息
dba_temp_files临时数据文件信息
dba_rollback_segs回滚段信息
dba_ts_quotas用户表空间配额信息
dba_free_space数据库空闲空间信息
dba_profiles数据库用户资源限制信息
dba_sys_privs用户的系统权限信息
dba_tab_privs用户具有的对象权限信息
dba_col_privs用户具有的列对象权限信息
dba_role_privs用户具有的角色信息
dba_audit_trail审计跟踪记录信息
dba_stmt_audit_opts审计设置信息
dba_audit_object对象审计结果信息
dba_audit_session会话审计结果信息
dba_indexes用户模式的索引信息
3.2 用户与权限
Oracle中没有其他数据库系统中的数据库的概念,对象都是创建在用户下。
3.2.1 用户管理
用户权限:使用角色管理,权限分为:系统权限和对象权限(Schema是用户所拥有的对象的集合)。
# 1.创建用户
create user 用户名 identified by 密码
[default tablespace 表空间名]
[temporary tablespace 表空间名]
[quota 大小 on 表空间名]
[profile 用户配置文件];
#创建用户时,如果不指定default tablespace/ temporary tablespace选项,则使用系统缺省的永久/临时表空间, 用以下SQL可以查看系统缺省的永久/临时表空间。
select property_value from DATABASE_PROPERTIES where property_name in ('DEFAULT_PERMANENT_TABLESPACE','DEFAULT_TEMP_TABLESPACE');
#2.修改密码 普通用户只能修改自已的密码,DBA可以修改其它用户的密码。
alter user 用户名 identified by 新密码;
#3.锁定/解锁用户 锁定/解锁用户需要DBA权限。
alter user 用户名 account lock;
alter user 用户名 account unlock;
#4.修改用户表空间配额 修改用户表空间配额需要DBA权限。
alter user 用户名 quota 大小 on 表空间;
#5.删除用户 删除用户需要DBA权限。
#drop user 只有在用户下没有任何数据库对象的时候才能删除用户,否则会提示错误。
#采用cascade选项删除用户以及用户下全部的数据库对象,包括表、视图、函数、同义词、过程等。
drop user 用户名 [cascade];
3.2.2 权限管理
权限管理 #######1、系统权限
系统权限针对的是系统安全性,执行数据库操作,如登录、创建表、创建函数等,通过查询SYSTEM_PRIVILEGE_MAP数据字典可以看到Oracle的两百多种系统权限。
select * from SYSTEM_PRIVILEGE_MAP;
以下是几种常用的系统权限:
create session 创建会话。
create/drop user 创建/删除用户。
create/drop sequence 创建/删除序列。
create/drop synonym 创建/删除同名对象。
create/drop table 创建/删除表。
create/drop view 创建/删除视图。
#######2、对象权限
对象权限针对的是数据安全性,对某一特定对象(如表,视图、序列、存储过程等)执行的特定操作,对象的权限分类如下:。
1)select权限 对表而言,允许对表执行select语句;对序列而言,允许对序列获取下一个值(nextval)和当前值(currnvl)。
2)insert权限 允许向表和视图中插入记录。
3)update权限 允许在表或视图中执行update语句,update权限必须随同select权限授予,否则被授权用户不能够选择行。
4)delete权限 允许在表或视图中执行delete语句,delete权限必须随同select权限授予,否则被授权用户不能够选择行。
5)alter权限 对表而言,允许对表执行alter table语句;对序列而言,允许对序列alter sequence语句。
6)execute权限 执行存储过程、函数和包的权限。
7)index权限 允许在表上创建索引。
8)reference权限允许在表上创建完整性约束,如外键。
9)all 对象的全部权限(上面列出的全部权限)。
####### 3、角色
由于Oracle提供的权限非常之多,日常操作时我们不可能将所需权限一一赋予用户,此时引进角色概念。角色是一组相关权限的命名集合,使用角色最主要的目的是简化权限管理。将一组权限打包到角色中,将角色赋予用户就是把角色下得全部权限都赋给了用户,简化了赋权操作。
Oracle提供三种标准的三种角色:
1)connect角色 connect是最基本的用户权限,拥有connect权限的用户只可以登录Oracle(仅具有创建SESSION的权限),不可以创建实体,不可以创建数据库结构。
2)resource角色 拥有resource权限的用户可以创建数据库对象,和对本用户的数据库对象拥有全部的操作权限。
3)DBA角色 DBA角色,拥有全部特权,是系统最高权限。
####### 4、授于/收回权限
Oracle采用grant命令授于权限,revoke命令收回权限。
### 1)将对象权限授于用户和角色,revoke收回。
grant 对象权限列表 on 对象名 to { public | 角色名 | 用户名 },……;
revoke 对象权限列表 on 对象名 from { public | 角色名 | 用户名 },……;
### 2)将系统权限和角色权限授于用户,revoke收回。
grant { 系统权限 | 角色 }, …… to { public | 角色名 | 用户名 },……;
revoke { 系统权限 | 角色 }, …… from { public | 角色名 | 用户名 },……;
#######5、查询权限
从数据字典中可以查询当前用户拥有的权限和角色。
1)查询当前用户拥有的角色:
select * from USER_ROLE_PRIVS;
2)查询当前用户拥有的系统权限:
select * from USER_SYS_PRIVS;
3)查询当前用户拥有的对象权限:
select * from USER_TAB_PRIVS;
3.3 数据库对象
数据库对象- 用户:数据库的用户也是数据库对象。
- 表(Table):表可以分为关系表和对象表。关系表包含堆表、索引组织表、外部表。我们常用的为堆表。Oracle官方推荐,表所占的存储空间超过2GB时,可以考虑对表进行分区。一般来说尽量避免分区,需要分区一定要有充分的理由。
- 索引(Index):索引可以提高表数据的访问查询效率,对性能优化有着非常大的作用。索引也是和一个或者多个段相关联,索引最终存储的位置也是段。不同类型的索引有不同的存储逻辑结构,如B树,Bitmap(位图)等。
唯一索引:当某列任意两行的值都不。
组合索引:两个或多个列经常一起出现在where条件中时,则在这些列上同时创建组合索引。
位图索引:列中有非常多的重复的值时候。例如某列保存了 “性别”信息。Where 条件中包含了很多OR操作符。较少的update操作,因为要相应的跟新所有的bitmap。
基于函数的索引:在WHERE条件语句中包含函数或者表达式时。
反向键索引:多个用户对集中在少数块上的索引行进行修改,容易引起资源的争用,比如对数据块的等待。此时建立反向索 引。
键压缩索引:组合索引的前缀部分具 有非选择性时,考虑使用压缩。减少I/O,增加性能
索引组织表(IOT):将表中的数据按照索 引的结构存储在索引中,提高查询速度。牺牲插入更新的性能,换取查询 性能。通常用于数据仓库,提供大量的查询,极少的插入修改工作。必须指定主键。插入数据时,会根据主键列进行B树索引排序,写入磁盘。
分区索引:A cluster is a group of tables that share the same data blocks because they share common columns and are often used together. - 簇(Cluster):簇是一个包含一个或多个表数据的数据库对象,其中被包含的表中都会具有共同的一列或者多列,这些列称为簇键列。
- 视图:视图是一种虚定义的逻辑对象,主要用来简化业务逻辑、方便开发维护,视图并不包含任何数据,其数据基于视图对应的其他对象。视图可以提供一些增删改查的操作,同时有一定的安全性,可以屏蔽一些列,使用起来也比较灵活。但对于性能会有一些影响。物化视图,相对于视图而言,物化视图可以实际存储数据,和表一样对应相关的段。物化视图可以用来汇总,计算等业务。同时也可以在一定条件下进行增删改查,并且也可以建立索引等。
- 同义词(Synonym):同义词也是虚的一个逻辑对象,不会存储任何数据。本质上算是其他数据对象的一个别名。同时可以将同义词的权限分配给不同的用户,作为安全管理的一种方式。
- 序列(Sequence):序列不存储任何数据,用户可以通过序列获取一系列有序的数值。定义序列的时候可以定义序列名,升降序,步长等。如果负载并发很高的情况下,序列的增长会影响整体的性能。
- 过程(Procedure) & 函数(Function):过程和函数都是虚逻辑对象,不存储数据。主要功能就是使用数据库编码的调用来执行一系列任务。
- 触发器(Trigger):触发器也是数据库的一个逻辑对象,不存储数据。主要是通过数据库编码,在事件自动触发的时候执行一组命令。
- 约束(Constraint):约束是数据库中的逻辑对象,其功能是通过一些内部或者自动逸逻辑来实现对数据的检查和限制,使其符合某种规则或者标准。从而实现数据的规则化,标准化。
3.4 数据类型
常见数据类型3.5 数据导入导出
使用cmd命令行导入导出数据,也可使用第三方工具。
整库导出
整库导出:exp 管理员账号/密码 full=y;//参数full表示整库导出。导出后会在当前目录下生成一个EXPDAT.DMP的文件,此文件为备份文件。如果想导出数据到指定位置,并且取个名字,需要添加file参数。例如:exp system/123456 file= C:\person.dmp full=y。
整库导入
整库导入:imp 管理员账号/密码 full=y file=C:\person.dmp。
按用户导出导入
1.3.1 按用户导出:exp 管理员账号/密码 owner=用户名 file=C:\person.dmp。
1.3.2 按用户导入:imp 管理员账号/密码 file=C:\person.dmp fromuser=用户名。
按表导出导入
1.4.1按表导出:exp 管理员账号/密码 file=person.dmp tables=t_person,t_student。
1.4.2按表导入:imp 管理员账号/密码 file =person.dmp tables=t_person,t_student。
四、备份和恢复
4.1 日志
Oracle以SQL脚本的形式实时记录了数据变化的详细日志,这些日志保存在重做日志文件中。根据重做日志文件,可以对数据库进行备份和恢复。
可以简单的认为,数据库每次在commit之前,会把操作数据的SQL脚本写入日志文件。
日志文件有两种:在线日志和归档日志。
创建Oracle数据库实例的时候,缺省建立三组在线日志,每组一个日志文件。三组日志中只有一组处于活动状态,这组活动的日志也称为当前日志,数据库不断的往当前日志里写入SQL脚本,当前日志写满后,Oracle会切换到下一组日志,继续写入,就这样循环切换。日志组在切换时,如果数据库是归档模式,则将当前日志文件的内容转存为操作系统文件,成为归档日志;若当前数据库是非归档模式,则不进行归档操作,当前日志文件中的内容会被下一次覆盖。
如果数据库运行在归档模式下,当数据库出现介质失败时,使用备份文件、归档日志和在线日志可以完全恢复数据库。
4.2 备份和恢复
备份的方法
- 物理备份
对数据库操作系统的物理文件(数据文件,控制文件和日志文件)的备份。物理备份又可以分为脱机备份(冷备份)和联机备份(热备份),前者是在关闭数据库的时候进行的,后者是以归档日志的方式对运行的数据库进行备份。可以使用oracle的恢复管理器(rman)或操作系统命令进行数据库的物理备份。 - 逻辑备份
对数据库逻辑组件(如表和存储过程等数据库对象)的备份。逻辑备份的手段很多,如传统的exp,数据泵(expdp),数据库闪回技术等第三方工具,都可以进行数据库的逻辑备份。
备份的策略
- 完全备份:每次对数据库进行完整备份,当发生数据丢失的灾难时,完全备份无需依赖其他信息即可实现100%的数据恢复,其恢复时间最短且操作最方便。
- 增量备份:只有那些在上次完全备份或增量备份后被修改的文件才会被备份。优点是备份数据量小,需要的时间短,缺点是恢复的时候需要依赖以前备份记录,出问题的风险较大。
- 差异备份:备份那些自从上次完全备份之后被修改过的文件。从差异备份中恢复数据的时间较短,只需要最后一次完整备份和最后一次差异备份的数据,缺点是每次备份需要的时间较长。
恢复分类
- 实例恢复:当oracle实例出现失败后,oracle自动进行的恢复。
- 介质恢复:当存放数据库的介质出现故障时所作的恢复,介质恢复又分为完全恢复和不完全恢复。
- 完全恢复:将数据库恢复到数据库失败时的状态。这种恢复是通过装载数据库备份并应用全部的重做日志做到的。
- 不完全恢复:将数据库恢复到数据库失败前的某一时刻的状态。这种恢复是通过装载数据库备份并应用部分的重做日志做到的。
五、启动和关闭
启动
Oracle数据库实例的启动要经历三个阶段。
- 1.nomount:启动实例(Start an instance)。
startup nomount;
- 2.mount:装载数据库(Mount the database)。
alter database mount;
- 3.open:打开数据库(Open the database)。
alter database open;
- 直接启动数据库 :执行startup open命令直接启动数据库,相当于以上三个步骤,open可以省略不写。
startup open;
关闭
Oracle的关闭也要经历关闭数据库、卸载数据库和关闭实例三个阶段。
- 1.关闭数据库(Close the database):Oracle首先把SGA中的数据写到数据文件和日志文件中,然后再关闭数据文件和联机日志文件。
- 2.卸载数据库(Dismount the database):数据库关闭完成之后,Oracle将分离数据库和实例之间的联系,这个阶段叫做“卸载数据库”或者叫“Dismount数据库”。
- 3.关闭实例(Shut down the instance):这个阶段Oracle将从释放SGA占用的内存,终止全部的后台服务进程。
关闭方式
shutdown immediate
使用immediate方式关闭数据库时:
1)新的用户不能登录数据库;
2)未提交的事务将会被回滚;
3)Oracle不会等待所有的用户(连接)退出数据库。
特点:
1)这种关闭方式可能会造成数据丢失;
2)数据库重启时不需要实例恢复。
推荐使用immediate方式关闭数据库。
shutdown transactional
以transactional方式关闭数据库时:
1)不允许新的用户登录数据库;
2)不允许建立新的事务;
3)所有的事务完成以后才关闭数据库;
4)一个用户(会话)执行完当前的事务后将被强行断开与数据库的连接。
特点:
1)这种关闭方式不会造成数据丢失;
2)数据库重启时不需要实例恢复;
3)这是最安全的关闭方式。
shutdown abort
以abort方式关闭数据库时:
1)不允许建立新的连接和新的事务;
2)客户端的SQL语句立刻终止;
3)未提交的事务不被回滚;
4)Oracle立刻终止所有连接(会话)。
特点:
1)只有数据库出现问题时候,才使用这种方式关闭数据库;
2)这是一种最不安全的关闭方式,数据库重启时需要实例恢复。
shutdown normal
使用normal方式关闭数据库时:
1)允许新的用户注登录数据库;
2)要等所有的用户自动退出Oracle以后,Oracle才关闭数据库。如果有未退出的用户,那么Oracle就一直等待,直到这个用户退出才关闭数据库。
normal是最慢的数据库关闭方式,不推荐。
Reset
#重启数据库(Reset) --> 相当于shutdown abort和startup。
startup force
本文主要摘抄:http://www.freecplus.net/
网友评论