OCP学习笔记

OCP学习笔记

第一部份 SQL

第二部份 DBA_1

常用操作:

1、启动em

emctl start | stop dbconsole

http://192.168.5.18:1158/em/

2、启动listener

  lsnrctl start | stop

3、为了使某个用户以 SYSDBA或 SYSOPER 身份登录 iSQL*Plus

必须通过执行以下步骤在 OC4J 用户管理器中设置该用户:

1.  创建一个用户

2.  给该用户授予webDba 角色

 

$ cd$ORACLE_HOME/oc4j/j2ee/isqlplus/application-deployments/isqlplus

$JAVA_HOME/bin/java -Djava.security.properties=$ORACLE_HOME/oc4j/j2ee/home/config/jazn.security.props-jar $ORACLE_HOME/oc4j/j2ee/home/jazn.jar -user "iSQL*Plus DBA/admin"-password welcome -shell

JAZN> adduser "iSQL*Plus DBA" username password  

eg: adduser "iSQL*Plus DBA" wddg wddgmy

JAZN> grantrole webDba "iSQL*Plus DBA" username   

eg:grantrole webDba "iSQL*Plus DBA" wddg

4、创建spfile

create spfile=’/home/oracle/spfiletemp.ora’ from pfile=’/home/oracle/inittemp.ora’

5、查看动态性能视图

select* from v$fixed_table

eg:查看包含session的动态性能视图

select* from v$fixed_table where name like 'V%SESS%' order by name

6、刷新共享池

Altersystem flush shared_pool;

7、重建索引

Alterindex index_name rebuild;

8、查看当前执行的sql

selectsql_text,executions from v$sql

wherecpu_time>200000;

9、查看当前会话

select * fromv$session

where machine=’XZT198’and logon_time>sysdate-1;

10、查看当前锁

select sid,ctime fromv$lock where block>0;

11、强制产生重做日志切换命令

Alter system switch logfile

12、强制产生检查点命令

Alter system checkpoint

13、设置归档模式

Startup mount

Alter database archivelog;

Alter database noarchivelog;

14、查看归档模式

Archive log list;

Select name,log_mode from v$database;

15、显示归档参数

Show parameter;

Show parameter  log_archive_dest;

Show parameter db_recovery_file_dest;

16、查看重做日志配置信息

Select group#,members,bytes,status,archivedfrom v$log;

Select * from v$logfile;

17、查看数据文件

Select name,status from v$datafile;

Selectfile_id,file_name,tablespace_name,status,bytes from dba_data_files;

18、查询Oracle数据库的名字、创建时间、日志模式、数据库状态等(v$database)

selectname,created,log_mode,open_mode from v$database;

19、查询Oracle数据库主机名、实例名、版本信息(v$instance)

Col host_name for a15

Selecthost_name,instance_name,version from v$instance;

20、查询Oracle数据库版本详细信息

Select * from v$version;

21、查询所有表空间及表空间状态(dba_tablespaces)

Col tablespace_name for a15

Selecttablespace_name,block_size,status,contents,logging from dba_tablespaces;

22、查询每个表空间的位置及文件的名字等信息(dba_data_files)

Col file_name for a40

Select file_id,file_name,tablespace_name,status,bytes fromdba_data_files;

23、查询Oracle中有所有用户及创建时间(dba_users)

Select username,createdfrom dba_users;

24、移动表空间中数据文件的路径

--首先确定数据文件的状态 要为OFFLINE

selecttablespace_name,status,contents from dba_tablespaces

---查询数据文件的路径

select file_id,file_name,tablespace_namefrom dba_data_files where file_name like '%ORACLE%' order by file 

--将该表空间修改为OFFLINE

altertablespace USERS offline;

--查看表空间状态确定修改成功

selecttablespace_name,status,contents from dba_tablespaces; 

--移动数据文件

hostcopy D:\oradata\USERS01.DBF d:\oradata\aucdbf

--重新命名 该表空间的路径和名称

alter tablespace users renamedatafile 'd:\oradata\USERS01.DBF' to 'd:\oradata\USERS01.DBF'

--修改表空间的状态为 ONLINE 状态

altertablespace users online

25、移动表和索引到其他表空间

--查询该对象存放在哪个表空间

selectsegment_name,tablespace_name,extents,blocks from dba_segments whereowner='ZHANG'

--2.查询该对象是索引,还是表

selectobject_id,object_name,object_type,status,created from dba_objects whereowner='ZHANG'

--3.查询索引或者表 存放在哪个表空间

selectindex_name,table_name,tablespace_name,status from dba_indexes whereowner='ZHANG'

--4.移动表到另一个表空间

altertable zhang.zzq_1 move tablespace zhang_zzq

--查询该表是否移动到该表空间

selectsegment_name,tablespace_name,extents,blocks from dba_segments whereowner='ZHANG'

--检查表是否有效,状态为 VALID 是有效

selectobject_id,object_name,object_type,status,created from dba_objects whereowner='ZHANG'

--重建索引 并且将索引移动到另一个表空间

alterindex zhang.zzq_index rebuild tablespace zhang_zzq

--查询索引对应的表空间

selectindex_name,table_name,tablespace_name,status from dba_indexes whereowner='ZHANG'

26、查看表空间的使用率

--脚本1

selectf.tablespace_name,a.total,f.free,round((f.free/a.total)*100) "% Free"from

(select tablespace_name,sum(bytes/(1024*1024)) total from dba_data_files group by   tablespace_name) a,

(select tablespace_name,round(sum(bytes/(1024*1024))) free from dba_free_space group by tablespace_name)f

WHEREa.tablespace_name = f.tablespace_name(+)
order by "% Free";

 

--脚本2

select upper(f.tablespace_name)"TS-name",
       d.tot_grootte_mb"TS-bytes(m)",
       d.tot_grootte_mb - f.total_bytes"TS-used (m)",
       f.total_bytes"TS-free(m)",
       to_char(round((d.tot_grootte_mb -f.total_bytes) / d.tot_grootte_mb * 100,2),'990.99') "TS-per"
         from (select tablespace_name,
               round(sum(bytes) / (1024 *1024), 2) total_bytes,
               round(max(bytes) / (1024 *1024), 2) max_bytes
          from sys.dba_free_space
         group by tablespace_name) f,
       (select dd.tablespace_name,
               round(sum(dd.bytes) /(1024 * 1024), 2) tot_grootte_mb
          from sys.dba_data_files dd
         group by dd.tablespace_name) d
where d.tablespace_name = f.tablespace_name
order by 5 desc

 

--脚本3

SELECT D.TABLESPACE_NAME,
       SPACE "SUM_SPACE(M)",
       BLOCKS SUM_BLOCKS,
       SPACE - NVL(FREE_SPACE, 0)"USED_SPACE(M)",
       ROUND((1 - NVL(FREE_SPACE, 0) /SPACE) * 100, 2) "USED_RATE(%)",
       FREE_SPACE"FREE_SPACE(M)"
  FROM (SELECT TABLESPACE_NAME,
               ROUND(SUM(BYTES) / (1024 *1024), 2) SPACE,
               SUM(BLOCKS) BLOCKS
          FROM DBA_DATA_FILES
         GROUP BY TABLESPACE_NAME) D,
       (SELECT TABLESPACE_NAME,
               ROUND(SUM(BYTES) / (1024 *1024), 2) FREE_SPACE
          FROM DBA_FREE_SPACE
         GROUP BY TABLESPACE_NAME) F
 WHERE D.TABLESPACE_NAME =F.TABLESPACE_NAME(+)
UNION ALL --if have tempfile
SELECT D.TABLESPACE_NAME,
       SPACE "SUM_SPACE(M)",
       BLOCKS SUM_BLOCKS,
       USED_SPACE"USED_SPACE(M)",
       ROUND(NVL(USED_SPACE, 0) / SPACE *100, 2) "USED_RATE(%)",
       NVL(FREE_SPACE, 0)"FREE_SPACE(M)"
  FROM (SELECT TABLESPACE_NAME,
               ROUND(SUM(BYTES) / (1024 *1024), 2) SPACE,
               SUM(BLOCKS) BLOCKS
          FROM DBA_TEMP_FILES
         GROUP BY TABLESPACE_NAME) D,
       (SELECT TABLESPACE_NAME,
               ROUND(SUM(BYTES_USED) /(1024 * 1024), 2) USED_SPACE,
               ROUND(SUM(BYTES_FREE) /(1024 * 1024), 2) FREE_SPACE
          FROM V$TEMP_SPACE_HEADER
         GROUP BY TABLESPACE_NAME) F
 WHERE D.TABLESPACE_NAME =F.TABLESPACE_NAME(+)
 ORDER BY 5 DESC

27、查看运行过的SQL语句

SELECT SQL_TEXT FROM V$SQL;

28、检查Oracle初始化文件中相关参数值

Selectresource_name,max_utilization,initial_allocation,limit_value

from v$resource_limit;

29、查询Oracle属性值

Select * from database_properties;

第6章管理用户安全性

1、创建用户

在 Enterprise ManagerDatabase Control 中,选择“Administration >Schema > Users & Privileges > Users(管理 > 方案 > 用户和权限 > 用户)”。 

SQL:

CREATE USER"TRAIN" PROFILE "DEFAULT" IDENTIFIED BY "*******"ACCOUNT UNLOCK

GRANT "CONNECT"TO "TRAIN"

CONNECT角色:只有一个create session权限

2、管理员验证

操作系统安全性

l  DBA 必须具有创建或删除文件的操作系统权限。

l  普通数据库用户不应具有创建或删除数据库文件的操作系统权限。 

管理员安全性

l  通过口令文件或操作系统验证 SYSBA 和 SYSOPER 连接。

l  口令文件验证会按名称记录 DBA 用户。

l  操作系统验证并不记录具体用户。

l  对于 SYSDBA 和 SYSOPER,操作系统验证优先于口令文件验证。

 

操作系统安全性:在 UNIX 和 Linux 中,默认情况下,DBA 属于 install 操作系统组,该组具有创建和删除数据库文件所需的权限。

管理员安全性:只在使用口令文件或操作系统特权与权限完成验证后,才授权建立 SYSBA 和 SYSOPER 连接。如果使用操作系统验证,那么数据库就不 使用提供的用户名和口令。当口令文件不存在,或者该文件中不存在提供的用户名和口令,或者未提供用户名和口令时,就使用操作系统验证。

但是,如果使用口令文件成功完成了验证,则使用用户名记录连接。如果使用操作系统成功完成了验证,则表示这是一个 CONNECT/连接,这种连接不记录具体用户。

注:操作系统验证优先于口令文件验证。特别是,如果您是操作系统中 OSDBA 或 OSOPER 组的成员,而且以 SYSDBA 或 SYSOPER 身份进行连接,则会使用关联的管理权限为您建立连接,不管您指定的用户名和口令是什么。 

密码文件:$ORACLE_HOME/dbs/orapw

3、权限

l   查询所有系统权限

select * fromsystem_privilege_map order by 2

l  SYSDBA 和 SYSOPER

使用这两个权限可以在数据库中执行关闭、启动、恢复及其它管理任务。用户使用 SYSOPER可执行基本操作任务,但不能查看用户数据。这个权限包括以下系统权限:

STARTUP 和 SHUTDOWN

CREATE SPFILE

ALTER DATABASE OPEN/MOUNT/BACKUP

ALTER DATABASE ARCHIVELOG

ALTER DATABASE RECOVER(仅限完全恢复。任何形式的不完全恢复,

如 UNTILTIME|CHANGE|CANCEL|CONTROLFILE,需要以 SYSDBA 身份建立连接。)

RESTRICTED SESSION

除此之外,SYSDBA 系统权限还可授权执行不完全恢复和删除数据库。用户使用 SYSDBA 系统权限可以 SYS 用户身份有效地建立连接。

l   DROP ANY 对象

用户使用DROP ANY 权限可删除其它用户拥有的对象。

l   CREATE、MANAGE、DROP 和 ALTER TABLESPACE

这些权限用于表空间管理,包括创建、删除和更改表空间的属性。

l  CREATE ANY DIRECTORY

使用Oracle 数据库可以让开发人员在 PL/SQL 内调用外部代码(例如 C 库)。作为一种安全措施,代码所在的操作系统目录必须链接到一个虚拟 Oracle 目录对象。使用 CREATE ANY DIRECTORY 权限时,有可能会调用不安全的代码对象。

用户使用 CREATE ANY DIRECTORY 权限可以在 Oracle 软件所有者能够访问的任何目录中创建目录对象(具有读写访问权限)。这意味着用户可以访问那些目录中的外部过程。用户可以尝试直接读写任何数据库文件,如数据文件、重做日志和审计日志。一定要确保在组织中采用了安全策略,以防止误用类似这种作用很强的权限。

l   GRANT ANY OBJECT PRIVILEGE

使用此权限可以对您未拥有的对象授予对象权限。

l   ALTER DATABASEALTER SYSTEM

这些权限的作用很强,可用于修改数据库和Oracle 实例,如重命名数据文件或刷新缓冲区高速缓存。

4、锁定与解锁用户

l  解锁:

alter user scottaccount unlock;

l  锁定

alter user scottaccount lock;

5、设置配额(quotas)

alter user scottquota 1M on users;

6、对象权限

(1) 授权

grantselect,update,insert,delete on hr.employess to scott

(2) 撤销授权

revoke select onhr.employees from scott

REVOKE CREATE TABLE FROM jeff

注:

撤销具有with adminoption的系统权限无级联撤销

撤销具有with grantoption的对象权限有级联撤销

 

 

 

7、角色

(1) 预定义角色

CONNECT

CREATE SESSION

RESOURCE

CREATE CLUSTER、CREATE INDEXTYPE、CREATE OPERATOR、CREATE PROCEDURE、CREATE SEQUENCE、CREATE TABLE、CREATE TRIGGER、CREATE TYPE

SCHEDULER_ ADMIN

CREATE ANY JOB、CREATE EXTERNAL JOB、CREATE JOB、EXECUTE ANY CLASS、EXECUTE ANY PROGRAM、MANAGE SCHEDULER

DBA

具有大多数系统权限和其它若干个角色。请不要授予非管理员。

SELECT_

CATALOG_

ROLE

没有系统权限,但是具有关于数据字典的 HS_ADMIN_ROLE 权限和 1,700 多个对象权限。

 

(2) 创建角色

grant role r1 no identified(no identified可不写)

grant role r2 indetified by oracle

(3) 赋予权限

grant create session to r1

(4) 授予角色

grant r1 toscott

grant r2 toscott

取消r2的default选项,对于有密码的角色,不能设置为default启用,否则相当于没设密码

alter user scottdefault role all except r2

(5) 启用带密码的角色

set role r2identified by oracle

 

第7章管理方案对象

1、完整性约束条件 

(1) NOT NULL(非空)

默认情况下,表中的所有列均允许为空值。Null 指没有值。NOT NULL 约束条件要求表列必须包含非空值。例如,可以通过定义 NOT NULL 约束条件来要求在 EMPLOYEES 表的每一行的 LAST_NAME 列中输入值。 oracle中null是不等于null的。

(2) UNIQUE Key(唯一键)

UNIQUE 键完整性约束条件要求一列或一组列(键)中的每个值必须唯一,即,在指定的列或一组列中,表任意两行的值不重复。例如,如果要禁止每行显示重复的部门名称,请对DEPARTMENTS 表的 DEPARTMENT_NAME列定义 UNIQUE 键约束条件。除了特殊情况,这个约束条件与唯一索引一起强制使用。

(3) PRIMARY KEY(主键)

数据库中的每个表最多可包含一个PRIMARY KEY 约束条件。在这个约束条件的限制下,单个列或一组列中的值就构成了行的唯一标识符。事实上,每行的名称均由其主键值确定。

Oracle 服务器实施 PRIMARY KEY 完整性约束条件后可确保实现以下两个条件:

在指定列或一组列中,表的任意两行不出现重复值。

主键列不允许为空。也就是说,每行的主键列必须有一个值。 正常情况下,数据库通过使用索引来强制设置 PRIMARY KEY 约束条件。通过隐式创建以下各项,可强制设置为DEPARTMENTS 表中 DEPARTMENT_ID列创建的主键约束条件: 

该列中的唯一索引

该列的 NOT NULL 约束条件

(4) 引用完整性约束条件

关系数据库中的各个表通过公用列相互关联,因此必须维护用于管理列关系的规则。使用引用完整性规则就可确保保持这些关系。  对于每个表行,引用完整性约束条件要求外键中的值必须与父键中的值匹配。 

例如,对 EMPLOYEES 表的 DEPARTMENT_ID列定义了一个外键。它保证这一列中的每个值一定与 DEPARTMENTS 表主键中的值匹配。因此,在 DEPARTMENTS 表的 DEPARTMENT_ID列中不会存在错误的完整性约束条件。此类外键引用同一表中的父键。

(5) 检查约束条件

单个列或一组列的CHECK 完整性约束条件要求为每个表行指定的条件必须为真或未知。如果数据操纵语言 (DML) 语句对 CHECK约束条件的评估为假,则会回退语句。

2、增加约束

alter table employees add constraintcheck_ttt check(salary>3000)

3、删除约束

alter table employees drop consitraintcheck_ttt

4、延迟约束校验

增加deferrable initially deferred子句

约束校验默认是在每个 DML 语句结束时强制执行的, 又称 即时约束条件

延迟约束条件是提交事务处理(commit)时才检查的约束条件, 如果在提交时检测到任何违反约束条件的情况,则会回退整个事务处理

alter tableemployees add constraint check_ttt check(salary>3000)

deferrableinitially deferred

5、使用 SQL 创建约束条件

alter table employees add(unique(country_name) enable novallidate)

alter table employees add constraint pkprimary key (employee_id)

alter table t1

(

pk numberprimary key,

fk number

c1 number,

c2 number,

constraint riforeign key (fk) references t1,

constraint ck1check (pk>0 and c1>0)

);

6、删除表

DROP TABLE [schema.] table [CASCADECONSTRAINTS] [PURGE]

DROPTABLE 语句的可选子句:

CASCADE CONSTRAINTS:强制删除,删除所有相关的引用完整性约束条件

PURGE:无法闪回

使用 DROP TABLE 的某些注意事项如下: 

l   如果不使用 PURGE 子句,则表定义、关联索引和触发器会被放置在回收站中。表数据仍然存在,但不存在表定义的情况下无法访问。如果使用 Enterprise Manager 删除了表,则不需要使用 PURGE 子句。

l   使用 FLASHBACK TABLE 命令可从回收站恢复方案对象。PURGE RECYCLEBIN 命令可用于清空回收站。 

l   需要使用 CASCADE CONSTRAINTS 选项才能删除所有相关的引用完整性约束条件。

l   如果不使用 PURGE 选项,那么表及表索引所占用的空间仍会计入用户在有关表空间中的可用限额之内。也就是说,这些空间仍视为已占用。

例:

drop tablehr.employees purge;

7、截断表

TRUNCATE TABLE [schema.] table [{DROP |REUSE} STORAGE]

使用此命令会产生以下影响:

l   通过将高水位标记 (HWM) 设置到表开头,将表标记为空,从而使表行不可用。

l   由于 TRUNCATE TABLE 是 DDL 命令,因此不会生成还原数据,而且会隐式提交命令。

l   还会截断相应的索引。

l   不会截断外键引用的表。

l   使用此命令时不会触发删除触发器。

8、索引

(1)创建索引的标准语法

CREATE INDEX 索引名 ON 表名 (列名) TABLESPACE 表空间名;

CREATE INDEX name_ix ONemployees(last_name, first_name);

l   唯一索引可确保每个索引值是唯一的。

l  索引可按升序(默认)或降序存储其键值。为了提高检索效率,在索引中按降序存储关键字可能会更有益。这是根据最常用的数据访问方式得出的结论。  

l   反向关键字索引以反向顺序存储其键值字节。

l   组合索引是基于多列的索引。

l   基于函数的索引是以函数返回值为基础的索引。

l   压缩索引会删除重复的关键字值。

(2)创建唯一索引

CREATE unique INDEX 索引名 ON 表名 (列名) TABLESPACE 表空间名;

(3)创建组合索引

CREATE INDEX 索引名 ON 表名 (列名1,列名2) TABLESPACE 表空间名;

(4)创建反向键索引

CREATE INDEX 索引名 ON 表名 (列名) reverse TABLESPACE 表空间名;

(5)查询索引所在空间大小

select a.segment_name,a.tablespace_name,b.table_name,a.bytes/1024/1024 mbytes,a.blocks  from user_segments a, user_indexes b  

where a.segment_name = b.index_name  

and a.segment_type = 'INDEX' --索引   

and a.tablespace_name='APPINDEX' --表空间   

and b.table_name like '%PREP%' --索引所在表   

order by table_name,a.bytes/1024/1024 desc  

9、序列

要检索序列中的下一个值,请根据其名称引用它;序列与表或与列之间没有关联。

如果没有将序列定义为循环序列,则指定编号出现后,不会再次出现该编号。有时,应用程序请求一个值,但是该值从未结束在数据库中的使用或存储。这样可能会造成存储编号的表中出现编号不连续。

通过缓存序列号可改善性能,因为为了加速访问,内存中预分配了一组编号。如果存在实例失败的情况,就不会使用任何缓存的序列号,这会造成间隔。

注:如果应用程序要求不能存在间隔,那么应用程序应实施一个自定义编号生成器。但是,此方法会导致性能下降。如果使用一个表存储一个值,而且每次请求时都递增该值、更新该表,那么这个进程会成为系统范围内的一个瓶颈。这是因为每个会话都必须等待该机制,而为了确保不出现重复或间隔,该机制每次只能处理一个请求。

(1) 创建序列

CREATE SEQUENCE myseq NOMAXVALUE MINVALUE 1INCREMENT BY 1 START WITH 1

通过在“Administration(管理)”页的“Schema(方案)”标题下单击“Sequences
(序列)”链接,使用 EnterpriseManager 可查看并创建序列。序列创建选项汇总如下:

l  Name:(名称):序列的名称,表示序列的引用方式。

l  Schema(方案):序列的所有者。

l  Maximum Value(最大值):指定序列可以生成的最大值。这是一个整数值,不能超过 28 位数。它必须大于“Minimum Value(最小值)”和“Initial(初始值)”。使用“Unlimited(无限制)”指定升序序列的最大值为 1027,降序序列的最大值为
-1。默认值为“Unlimited(无限制)”。

l  Minimum Value(最小值):指定序列的最小值。这是一个整数值,不能超过 28 位数。它必须小于或等于“Initial(初始值)”,且小于“Maximum Value(最大值)”。使用“Unlimited(无限制)”指定升序序列的最小值为 1,降序序列的最小值为 -1026 。默认值为“Unlimited(无限制)”。

l  Interval(间隔):指定序列号之间的间隔。这个整数值可以是任意正整数或负整数,但不能为零。它不能超过 28 位数。默认值为 1。

l  Initial(初始值):指定要生成的第一个序列号。使用此子句,以一个大于最小值的值开始一个升序序列,或以一个小于最大值的值开始一个降序序列。

l  Cycle Values(循环值):升序序列达到序列最大值后,它会生成序列最小值。降序序列达到序列最小值后,它会生成序列最大值。如果没有选择此选项,当序列用尽后尝试检索值时就会返回错误。

l  Order Values(顺序值):此选项可确保按请求顺序生成序列号。如果使用序列号作为时间戳,则可以使用此子句。对用于生成主关键字的序列而言,确保顺序通常不重要。如果使用安装了 Real Application Clusters 的 Oracle 数据库,只在要确保按顺序生成序列时才需要此选项。

l  Cache Options(缓存选项):指定为了加速访问,Oracle 数据库在内存中预分配并保留的序列值的数量。这是一个整数值,不能超过 28 位数。此参数的最小值为 2。对循环序列而言,此值必须小于循环中的值的数量。因为缓存的值的数量不能多于指定序列号循环中可以容纳的数量。

(2) 使用序列

请引用使用下列假例的 SQL 语句中的序列值:

l   CURRVAL:返回序列的当前值

l   NEXTVAL:递增序列,返回下一个值

必须根据序列名称确认 CURRVAL和 NEXTVAL: sequence.CURRVALsequence.NEXTVAL

首次引用 NEXTVAL 会返回序列的初始值。对 NEXTVAL 的后续引用会按照定义增量递增序列值,并返回新值。对 CURRVAL 的任何引用永远返回序列的当前值,它是上次引用 NEXTVAL 所返回的值。

10、临时表:

l  会话或事务处理结束时会自动清除存储数据

u  ON COMMIT DELETE ROWS:提交时删除

u  ON COMMIT PRESERVE ROWS:session中断时删除

l  为每个会话提供专用数据存储

l  可供所有会话使用,而不影响各个会话的专用数据

l  使用 GLOBAL TEMPORARY 子句创建临时表:

l  使用 TRUNCATE TABLE 命令删除表内容。

l  在临时表中可创建下列项:

u  索引

u  视图

u  触发器

(1) 创建临时表

create global temporary table sess_temp

 (

     idnumber,

      namevarchar2(100),

      salnumber

 )

 oncommit preserve rows;

 

create global temporary table tran_temp

 (

     idnumber,

      namevarchar2(100),

      salnumber

 )

 oncommit delete rows;

(2) 查询临时表名称

select table_name,temporary,duration fromuser_tables where table_name like '%TEMP%';

 

11、数据字典

(1) 概览

Oracle 的数据字典是对数据库的描述。其中包含了数据库中所有对象的名称和属性。创建或修改任何对象都会引起更新数据字典,这样可反映那些更改。这些信息存储在由Oracle 数据库维护的基表中,不过,通过使用预定义视图(而不是直接读取表)可访问这些表。

数据字典:

l   由 Oracle 数据库服务器使用,可用于查找关于用户、对象、约束条件和存储的信息

l   对象结构或定义已修改时,由 Oracle 数据库维护

l   任意用户可用来查询关于数据库的信息

l   由 SYS 用户所有, 拥有 SYSDBA 或 SELECT ANY DICTIONARY 权限的用户可查询 DBA_ 视图

l   不得使用 SQL 直接进行修改

l   DICTIONARY 数据字典视图或其 DICT 同义词(别名)包含了数据字典中一切对象的名称和说明。使用 DICT_COLUMNS 视图可查看视图列及其定义。有关各种视图的完整定义,请参阅“Oracle 数据库参考”文档。

l   SELECT * FROM dictionary 或 select * from dict;

 

 

 

 

 

 

数据字典

谁可以查询

内容

下列项的子集

Dba_

DBA

一切对象

可能有其它仅限 DBA 使用的列

All_

每个用户

用户有权查看的一切对象

DBA_ 视图

包括用户拥有的对象

User_

每个用户

用户拥有的
一切对象

ALL_ 视图

除了缺少 OWNER 列,通常与 ALL_ 相同。某些视图有象 PUBLIC 别名一样的简称。

(2) 数据字典视图

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(3) 用法示例

l   SELECT table_name, tablespace_name FROM user_tables;

l   SELECT sequence_name, min_value, max_value, increment_by FROMall_sequences WHERE sequence_owner IN ('MDSYS','XDB');

l   SELECT USERNAME, ACCOUNT_STATUS FROM dba_users WHERE ACCOUNT_STATUS= 'OPEN';

l   DESCRIBE dba_indexes;

 

第 8章管理数据和并发处理

1、内置程序包

随 Oracle 数据库一起提供的350个内置 PL/SQL 程序包可用于访问扩展的数据库功能,例如高级队列、加密和文件输入/输出 (I/O)。其中还包括了许多的管理和维护实用程序。

以下是一些比较常用的管理和维护程序包:

l   DBMS_STATS:用于收集、查看和修改优化程序统计信息

l   DBMS_OUTPUT:通过 PL/SQL生成输出

l   DBMS_SESSION:通过 PL/SQL访问 ALTER SESSION 和 SET ROLE 语句

l   DBMS_RANDOM:生成随机数字

l   DBMS_UTILITY:获取时间、CPU 时间和版本信息;计算散列值,以及执行许多其它功能

l   DBMS_SCHEDULER:调度可从 PL/SQL 调用的函数和过程

l   DBMS_CRYPTO:对数据库数据进行加密和解密

l   UTL_FILE:通过 PL/SQL读写操作系统文件

注:有关这些内置程序包及其它内置程序包的详细信息,请参阅《PL/SQL 程序包与类型参考》手册。

2、查看锁定队列情况

V$enqueue_lock和V$lock

3、LMODE字段:获得的锁定模式,Request: 请求的锁定模式

TX:行级锁(排他所)值为6,TM:表级锁(共享所) 值为3

Selectsid,type,lmode,request from v$enqueue_lock;

Selectsid,type,lmode,request from v$lock;

4、使用SQL解决锁定冲突

blocking_session字段:记录锁定者的sid

Selectsid,serial#,username from v$session where sid in(select blocking_session fromv$session);

Altersystem kill session ‘sid,serial#’ immediate;

第9章管理还原数据

1、还原数据是:

l   原始的、修改之前的数据副本

l   为更改数据的每个事务处理而捕获

l   至少保留到事务处理结束

l   用于支持:

u  回退操作

u  读取一致性和闪回查询

u  从失败事务处理中恢复

2、还原数据和重做数据的区别

Undo:记录改变前的旧值

Redo:描述数据库发生的变化

 

还原 Undo

重做 Redo

记录

如何还原更改

如何重新生成更改

用于

回退、读取一致性

向前滚动数据库更改

存储于

还原段

重做日志文件

避免

在多用户系统中读取不一致

数据丢失

例:

Update t set c1=’A’ where c1=’B’;

(1) 找到包含c1=’B’的数据块,假设为[10#,120#]

(2) 打一个可用的Undo block,假设为[3#,200#]

(3) 把改变前的旧值(’B’)放入该undo block里

(4) 由于个性了undo块,所以要产生redo entry来描述这个变化

redo_addr  SCN   file# block# operation

100         9:00    3    200     insert ’B’

(5) 把改变后的新值(’A’)放入数据块[10#,120#]

(6) 由于修改了数据块,所以要产生redo entry来描述这个变化

redo_addr  SCN   file# block# operation

101         9:00    10    120     ’B’ –> ’A’

(7) 如果commit,则将4和6产生的redo entry写入log

(8) 如果rollback,则将Undo中的’B’拿出来替换数据块中的’A’

3、启用Undo自动管理

show parameter undo_

 

NAME                                 TYPE        VALUE

-------------------------- -------------------------------

undo_management                    string      AUTO

undo_retention                     integer     900

undo_tablespace                    string      UNDOTBS1

参数undo_management为AUTO时,为启动自动管理,且必须指定undo_tablespace

undo_retention 指定要保留的已提交还原信息量(秒数)。必须设置这个参数的最合适情况是:

l   还原表空间启用了 AUTOEXTEND 选项

l   要设置 LOB 的还原保留期

l   要确保保留期

默认还原行为是覆盖提交的、尚未过期的事务处理,而不是因为缺少还原空间而导致活动事务处理失败。

此行为在确保了保留期后会有所改变。有了确保的保留期,即使会导致事务处理失败,仍然会强制执行还原保留期设置。

RETENTION GUARANTEE 是表空间属性而不是初始化参数。此属性只可使用 SQL 命令行语句来更改。通过更改还原表空间来确保保留期的语法是:

SQL> ALTER TABLESPACE undotbs1 RETENTIONGUARANTEE;

要将有确保保留期的还原表空间返回到其常规设置,请使用以下命令:

SQL> ALTER TABLESPACE undotbs1 RETENTIONNOGUARANTEE;

保留期确保仅适用于还原表空间。尝试对非还原表空间设置保留期会产生以下错误:

SQL> ALTER TABLESPACE example RETENTIONGUARANTEE;

ERROR at line 1:

ORA-30044: 'Retention' can only specifiedfor undo tablespace

 

4、监视还原

还原通常不需要管理。要监视的范围包括:

l   还原表空间中的空闲空间

l   快照太旧错误

大多数时间,还原由实例自动管理,很少需要数据库管理员 (DBA) 干预。可能需要管理员介入的一些情况包括:

l   还原空间不足

l   用户会收到 ORA-01555 snapshot too old(快照太旧)错误消息

还原信息始终保留直至事务处理结束。这意味着如果删除或更新了大量的数据(插入操作只占用极少的还原空间,因为插入数据的原始图像是空值)而没有提交,那么还原表空间必须同样大才能包含原始数据。假定一种情况,其中使用以下命令删除了 50-GB 表的所有行:

SQL> DELETE FROM reallybigtable;

还原表空间需要留出 50 GB 原始信息的空间,以备发出此语句的用户改变主意而要回退更改。当还原表空间用完了用于还原数据的空间时,用户会收到如下错误消息:

ORA-01650: unable to extend rollbacksegment

通过预防性监视,可在问题影响用户之前检测到还原表空间中的空间问题。

管理员在还原信息时还可能遇到另一个问题,也就是当查询需要访问还原信息时还原信息已被覆盖的问题。这可能发生在长时间运行查询或闪回查询中。当查询需要过去一段时间的数据的“快照”,而且重建快照需要的还原数据不再存在时,查询会返回以下错误:

ORA-01555: snapshot too old

之所以会发生这种情况,是因为Oracle 数据库向用户展示的数据视图与查询开始运行时的数据视图一致。如果查询的表有未提交的更改,Oracle 数据库会通过读取还原数据来获取数据的提交版本。这就是读取一致性。如果查询运行时间太长,其间的那些修改确已提交,随后其还原数据已释放且被覆盖,那么查询运行很长时间后看见的数据视图不再与查询刚开始运行时看见的数据视图一致。因此,还原保留期应配置为满足最长时间运行查询的需要。

第10章 Oracle数据库安全性

1、应用最少权限原则

(1) 保护数据字典

默认情况下,O7_DICTIONARY_ACCESSIBILITY参数设置为 FALSE。如果没有很好的理由,一定不要更改这个设置,因为这会阻止具有 ANY TABLE系统权限的用户访问数据字典的基表。这个参数设置还确保了 SYS 用户只能以 SYSDBA 身份登录。

(2) 从 PUBLIC撤销不必要的权限

下列程序包对于需要这些程序包的应用程序非常有用,但需要正确的配置才能安全地使用这些程序包。请从PUBLIC 中撤销 EXECUTE权限,然后在下列程序包需要时将 EXECUTE权限授予角色:UTL_SMTP、UTL_TCP、UTL_HTTP 和 UTL_FILE。

有一些作用比较大的程序包可能被误用,这些程序包包括:

l   UTL_SMTP:允许将数据库用作简单邮件传输协议 (SMTP) 邮件服务器来发送任意电子邮件消息。如果将这个程序包授予 PUBLIC,可能会出现未经授权就交换电子邮件消息的情况。

l   UTL_TCP:允许数据库服务器与任何正在接收或等待的网络服务建立外出网络连接。因此,在数据库服务器与任何正在等待的网络服务之间会发送任意数据。

l   UTL_HTTP:允许数据库服务器通过 HTTP 请求并检索数据。如果将这个程序包授予 PUBLIC,可能会允许通过 HTML 形式将数据发送到恶意 Web 站点。

l   UTL_FILE:如果配置不当,则可能允许访问主机操作系统上的任何文本文件。即使配置正确,这个程序包也不会区别其调用应用程序;因此对UTL_FILE 具有访问权的一个应用程序可能会将任意数据写到由另一个应用程序写到的位置。

(3) 限制对操作系统目录的访问

通过数据库中的 DIRECTORY 对象可使 DBA 将目录映射到操作系统路径,从而将这些目录的权限授予各个用户。

(4) 限制具有管理权限的用户

请不要为数据库用户提供不必要的权限。一定不能将 DBA 角色授予非管理员。

要实施最少权限,请限制授予下列类型的权限:

l   授予系统和对象的权限

l   连接到数据库的 SYS 权限,如 SYSDBA 和 SYSOPER

l   其它 DBA 类型的权限,如DROP ANY TABLE

(5) 限制远程数据库验证

REMOTE_OS_AUTHENT=FALSE

默认情况下,REMOTE_OS_AUTHENT参数设置为 FALSE。一定不要更改这个设置,除非信任所有的客户机能适当地验证用户。

l   在远程验证过程中:

l   数据库用户通过外部方式来验证

l   远程系统验证用户

l   用户登录数据库,不必接受另外的验证

2、标准数据库审计

启用数据库审计并指定审计选项(登录事件、行使的系统和对象权限或使用的 SQL 语句)后,数据库开始收集审计信息。

show parameter audit_

NAME                                 TYPE        VALUE

---------------------------- -----------------------------------------

audit_file_dest                    string      /oracle/app/admin/ORA190/adump

audit_sys_operations              boolean     FALSE

audit_syslog_level                string

audit_trail                         string      NONE

audit_trail必须重启实例后才能生效

ALTER SYSTEM SET audit_trail=’DB’SCOPE=SPFILE;

如果 AUDIT_TRAIL 设置为 OS,审计记录存储在操作系统的审计系统中。在Windows 环境下,审计记录存储在事件日志中。在 UNIX 或 Linux 环境下,审计记录存储在文件中。该文件的位置是用 AUDIT_FILE_DEST 参数指定的位置。 

假定 AUDIT_TRAIL 参数设置为 DB,审计信息是放在aud$表中(aud$是DBA_AUDIT_TRAIL 视图的基表)。则可复查DBA_AUDIT_TRAIL 视图中的审计记录,这个视图是 SYS 方案的一部分。

如果 AUDIT_TRAIL 设置为 XML 或XML,EXTENDED,审计记录会写入 AUDIT_FILE_DEST 参数指向的目录中的 XML 文件。使用 V$XML_AUDIT_TRAIL视图可查看此目录中的所有 XML 文件。 

维护审计线索是一项重要的管理任务。根据设置的重点审计选项,审计线索会迅速地增长。如果维护不当,审计线索会占用大量的空间,以至影响系统的性能。

3、指定审计选项

审计 SQL 语句:幻灯片中显示的语句可审计影响表的任何数据定义语言 (DDL) 语句,包括 CREATE TABLE、DROPTABLE 和 TRUNCATE TABLE 等等。可按用户名或者按成功或失败来设置重点审计的 SQL 语句:

SQL> Audit table; 

SQL> AUDIT TABLE BY hr WHENEVER NOTSUCCESSFUL;

审计系统权限:可用来审计行使的任何系统权限(如DROP ANY TABLE)。可按用户名或者成功或失败设置审计的重点。默认情况下,审计设置为BY ACCESS。每次行使经过审计的系统权限时,都会生成一条审计记录。可选择使用BY SESSION 子句将这些记录组成一组,以便每个会话只生成一条记录。(这样,如果一个用户更新属于另一个用户的表中的 100,000 条记录,则只收集一条审计记录。)请考虑使用BY SESSION 子句来限制由于审计系统权限而对性能和存储产生的影响。

SQL> AUDIT select any table, create any trigger;
SQL> AUDIT select any tableBY hr BY SESSION;

审计对象权限:可用来审计关于表、视图、过程、序列、目录和用户定义数据类型的操作。这种审计类型可按成功或失败设置审计的重点,而且可以按会话或访问权限分组。与审计系统权限不同,默认情况下,审计对象权限时按会话分组。所以,如果要分离为每个操作生成的审计线索记录,必须隐式指定BY ACCESS。

SQL> AUDIT ALL on hr.employees;
SQL> AUDIT UPDATE,DELETE onhr.employees BY ACCESS;

4、细粒度审计

(1) 根据内容监视数据访问
(2) 审计 SELECT、INSERT、UPDATE、DELETE 和 MERGE
(3) 可链接到表或视图,也可链接到一列或多列
(4) 可能会触发过程
(5) 使用 DBMS_FGA程序包进行管理

策略:AUDIT_EMPS_SALARY

SELECT name, salary

  FROMemployees

  WHERE

department_id = 10;

(6) 使用 DBMS_FGA.ADD_POLICY过程创建的 FGA 策略

begin

dbms_fga.add_policy (

 object_schema => 'HR',

 object_name       => 'EMPLOYEES',

 policy_name   => 'audit_emps_salary',

 audit_condition=> 'department_id=10',

 audit_column =>'SALARY',

 handler_schema    => 'secure',

 handler_module    => 'log_emps_salary',

 enable            => TRUE,

 statement_types =>    'SELECT'

);

end;

(A)      策略名

创建每个 FGA 策略时会指定其名称。幻灯片示例通过使用以下参数来命名AUDIT_EMPS_SALARY 策略:

policy_name => 'audit_emps_salary'

(B)      审计条件

审计条件是一个 SQL 谓词,用于定义审计事件必须触发的时间。在幻灯片示例中,通过使用以下条件参数来审计部门 10 中的所有行:

audit_condition => 'department_id = 10'

(C)       审计列

审计列定义了要审计的数据。如果此列包括在 SELECT 语句中或审计条件允许这种选择,则会发生审计事件。幻灯片示例通过使用以下参数来审计两列:  

audit_column => 'SALARY,COMMISION_PCT'

此参数是可选参数。如果未指定此参数,则只由 AUDIT_CONDITION 参数确定审计事件是否必须发生。

audit_condition、audit_column是and关系

(D)      对象

对象是要审计的表或视图。可通过以下两个参数传递对象:

u  包含对象的方案

u  对象的名称

幻灯片示例通过使用以下参数来审计 hr.employees 表:

object_schema => 'hr'
object_name => 'employees'

(E)       处理程序

可选事件处理程序是一个 PL/SQL 过程,用于定义在审计期间必须执行的任何附加操作。例如,事件处理程序可向管理员发送一个警报页。如果未定义审计事件处理程序,则在审计线索中插入审计事件条目。如果定义了审计事件处理程序,则在审计线索中插入审计条目并且执行审计事件处理程序。

审计事件条目包括导致事件的 FGA 策略、执行 SQL 语句的用户、SQL 语句及其绑定变量。 

可通过以下两个参数传递事件处理程序:

u  包含 PL/SQL 程序单元的方案

u  PL/SQL 程序单元的名称

通过使用以下参数来执行 SECURE.LOG_EMPS_SALARY 过程:

handler_schema => 'secure'
handler_module => 'log_emps_salary'

默认情况下,审计线索总是将 SQL 文本和 SQL 绑定信息写到LOB(表fga_log$中)。默认设置可以更改(例如,系统遇到性能下降情况时)。

(F)       状态

状态指示是否启用了 FGA 策略。在幻灯片示例中,以下参数用于启用此策略:

enable => TRUE

(G)      关闭FGA审计

begin

dbms_fga.drop_policy (

 object_schema   => 'HR',

 object_name     => 'EMPLOYEES',

 policy_name => 'audit_emps_salary');

end;

(H)      审计的DML 语句注意事项

使用为 DML 语句定义的FGA 策略时,如果要处理的数据行(包括新行和旧行)符合策略谓词标准,就会审计DML 语句。

但是,如果同时在策略定义中指定了相关列,当数据符合 FGA 策略谓词并且语句引用了定义的相关列时,就会审计语句。

对于 DELETE 语句,在定义策略期间指定相关列是没有用的,这是因为DELETE 语句会访问表中的所有列。因此,不管相关列是什么,总是要审计DELETE 语句。

FGA 支持 MERGE 语句。如果基础 INSERT 或 UPDATE 语句符合任何定义的INSERT 或 UPDATEFGA 策略,则会审计这些语句。

使用以前定义的 FGA 策略时,会审计第一个语句而不审计第二个语句。

(I)       FGA 准则

u  要审计所有语句,请使用 null 条件

u  策略名必须唯一

u  创建策略时,审计的表或视图必须已经存在

u  如果审计条件语法无效,则访问审计对象时会发生
ORA-28112 错误

u  如果表中不存在审计的列,则不会审计任何行

u  如果事件处理程序不存在,则不会返回任何错误但仍会创建审计记录

5、DBA 审计

具有 SYSDBA 或 SYSOPER 权限的用户可在关闭数据库时进行连接。

l   审计线索必须存储在数据库外部

l   总是审计以 SYSDBA 或 SYSOPER 身份进行的连接

l   可使用 audit_sys_operations 启用 SYSDBA 或SYSOPER 操作的附加审计

l   可使用 audit_file_dest 控制审计线索

SYSDBA 和SYSOPER 用户有权启动和关闭数据库。因为关闭数据库时这些用户可能做了更改,所以这些权限的审计线索必须存储在数据库外部。Oracle 数据库会自动捕获 SYSDBA 和 SYSOPER用户的登录事件。这为跟踪授权或未授权 SYSDBA 和 SYSOPER操作提供了一种宝贵方法,但只在复查操作系统审计线索时才有用。

除非专门启用了审计,否则 Oracle数据库只会捕获登录事件。通过设置初始化参数可启用 SYSDBA 和 SYSOPER用户的审计: 

audit_sys_operations=TRUE(默认设置为 FALSE。)

如果审计了 SYS 操作,audit_file_dest 初始化参数则会控制审计记录的存储位置。在 Windows 平台上,默认情况下,审计线索存储在 Windows 事件日志中。在 UNIX 或 Linux 平台上,审计记录存储在$ORACLE_HOME/rdbms/audit 中。

show parameter audit

NAME                                 TYPE        VALUE

---------------------------- -----------------------------------------

audit_file_dest                    string      /oracle/app/admin/ORA190/adump

audit_sys_operations              boolean     FALSE

audit_syslog_level                string

audit_trail                         string      NONE

audit_sys_operations必须重启实例后才能生效

altersystem set audit_sys_operations=true scope=spfile;

查找当前的sid

select sid from v$mystat whererownum=1;  =>  sid=139

查找当前session对应的操作系统的sid

select spid from v$process

where addr=(select paddr from v$sessionwhere sid=139); => psid=20977

所以当前session审计信息放在ora_20977.aud文件中

$ cd /oracle/app/admin/ORA190/adump

查看文件内容

$ tail -f ora_20977.aud

-f:使tail不停的去读最新内容

第11章 配置Oracle 网络环境

1、Oracle NetListener

Oracle Net Listener 是所有非本地用户连接到 Oracle 实例的网关。单个监听程序可用于多个数据库实例以及成千上万个客户机连接。

Enterprise Manager 是访问监听程序的一种方式。可以控制实际监听程序以及类似口令保护和日志文件位置等一般参数的配置。

高级管理员还可以根据需要,通过使用标准操作系统 (OS) 文本编辑器(如 vi 或 gedit)手动编辑配置文件来配置Oracle Net Services。

通过netmgr启动Oracle netManager创建Listener

2、用户会话

(1) 监听器创建服务器进程

如果连接数据包请求的服务名有效,监听程序会衍生一个新进程来处理连接。这个新进程被称为“服务器进程”。监听程序会连接到服务器进程,并向服务器进程传递初始化信息,其中包括用户进程的地址信息。

(2) 监听器就会退出连接过程

监听器创建服务器进程后,监听程序不再处理连接,监听器就会退出连接过程,所有工作都会传递到服务器进程。服务器进程会检查用户的验证身份证明(通常为口令),如果身份证明有效,就会创建用户会话。

(3) 服务器进程

建立会话之后,服务器进程充当用户在服务器上的代理。服务器进程
负责:

l   分析和运行通过应用程序发布的任何 SQL 语句

l   检查数据块执行 SQL 语句所需的数据库缓冲区高速缓存

l   从磁盘数据文件中读取必要的数据块,如果 SGA 中尚未存在数据块,就将其传入系统全局区 (SGA) 的数据库缓冲区高速缓存部分

l   管理所有排序活动。所谓的程序全局区 (PGA) 是服务器进程中的一部分,其中包含一个称为排序区域的内存区,这个内存区用于处理排序

l   将结果返回到用户进程,这样应用程序可以处理信息

l   读取审计选项并将用户进程报告到审计目标

3、监听程序控制实用程序

$   lsnrctl

LSNRCTLfor Linux: Version 10.2.0.0.0 on 12-MAY-2005 13:27:51

Copyright(c) 1991, 2004, Oracle.All rights reserved.

Welcometo LSNRCTL, type "help" for information.

LSNRCTL> help

Thefollowing operations are available

Anasterisk (*) denotes a modifier or extended command:

 

start               stop                status

services            version             reload

save_config         trace               spawn

change_password     quit                exit

set*                show*

$ lsnrctl start

$ lsnrctl status

请记住,如果监听程序名称不是 LISTENER,在语法中必须包含监听程序名称与命令,或者使用 SET CURRENT_LISTENER 命令。假定监听程序名为 BACKUP。以下是使用提示符语法停止名为 BACKUP 的监听程序的两个示例。

    LSNRCTL>stop backup

    Connectingto (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=rhel)(PORT=5521)))

    Thecommand completed successfully

这个语法和下一个语法产生的结果相同:

    LSNRCTL>set cur backup

    CurrentListener is backup

    LSNRCTL>stop

    Connectingto (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=rhel)(PORT=5521)))

    Thecommand completed successfully

注:在上面的语法中,current_listener 已缩写为cur。

使用命令行语法也可获得相同的结果:

    /home/oracle>lsnrctl stop backup

    LSNRCTLfor Linux:Version 10.2.0.0.0 on 12-MAY-2005 15:19:33

    Copyright(c) 1991, 2004,  Oracle.All rightsreserved.

    Connectingto (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=rhel)(PORT=5521)))

    Thecommand completed successfully

4、数据库服务注册

为了让监听程序将客户机连接转发到实例,监听程序必须了解实例名称以及实例的ORACLE_HOME 的位置。监听程序可通过下列两种方式查找此信息:

动态服务注册:Oracle8i、Oracle9i 和 Oracle Database 10g 实例会在启动数据库时使用默认监听程序自动进行注册。默认监听程序不需要其它的监听程序配置。

静态服务注册:在Oracle 数据库的早期版本中,不使用监听程序自动进行注册,因此,要求监听程序配置文件包含一个监听程序为之提供服务的所有数据库服务的列表。在较新版本中,如果存在以下情况,仍然可以选择使用静态服务注册:

l   监听程序所在的端口不是默认的 1521,您又不想配置实例使用非默认端口进行注册

l   应用程序要求进行静态服务注册

要添加静态数据库服务,请单击“EditListener(编辑监听程序)”页上的“StaticDatabase Registration(静态数据库注册)”,然后单击“Add(添加)”按钮。输入服务名称(与全局数据库名. 相同)、ORACLE_HOME 路径和 SID (与实例名相同)。单击“OK(确定)”。必须重新启动监听程序,这些更改才能生效。

5、简便连接

l   默认情况下已启用

l   不需要进行客户机配置

l   仅支持 TCP/IP(无SSL)

l   不支持高级连接选项,如:

u  连接时故障转移           

u  源路由

u  负载平衡

SQL> CONNECThr/[email protected]:1521/dba10g

6、本地命名

l   需要客户机名称解析文件

l   支持所有的 Oracle Net 协议

l   支持高级连接选项,如:

u  连接时故障转移           

u  源路由

u  负载平衡

SQL>CONNECT hr/hr@orcl

7、测试 Oracle Net 连接性

tnspingdb.us.oracle.com:1521/dba10g

tnspingorcl

tnsping 相当于Oracle Net 中的 TCP/IPping 实用程序。它提供了快速测试,可验证到目标位置的网络路径是否正常。例如,在命令行窗口输入tnsping orcl。

可验证主机名、端口以及协议是否可到达监听程序。并不实际检查监听程序是否处理服务名,也就是只能验证监听器在运行,不能测试服务是否可用。tnsping 的另一个用途是指明配置文件的位置。当系统中具有多个ORACLE_HOME 位置时,这可以提供帮助。

第12章 主动维护

1、统计信息级别

使用 STATISTICS_LEVEL初始化参数可控制要捕获的统计信息集,统计信息集采用以下捕获级别:

BASIC:AWR 统计信息和度量的计算已关闭。

TYPICAL:默认值。只收集某些统计信息。这些统计信息表示监视 Oracle 数据库行为通常需要的信息。这种自动采集统计信息级别可减少由于统计信息过期或无效而导致不正确执行SQL 语句的可能性。 

ALL:捕获所有可能的统计信息。除非在需要额外 SQL 诊断信息的某些极少数情况下,否则不应使用这种捕获级别。

 

 

 

select STATISTICS_NAME ,ACTIVATION_LEVELfrom v$statistics_level order by 2;

 

STATISTICS_NAME                                                 ACTIVAT

--------------------------------------------------------------

Plan Execution Statistics                                       ALL

Timed OS Statistics                                             ALL

Timed Statistics                                                  TYPICAL

Segment Level Statistics                                        TYPICAL

PGA Advice                                                        TYPICAL

Shared Pool Advice                                              TYPICAL

Modification Monitoring                                         TYPICAL

Longops Statistics                                              TYPICAL

Bind Data Capture                                               TYPICAL

Ultrafast Latch Statistics                                     TYPICAL

Threshold-based Alerts                                         TYPICAL

Global Cache Statistics                                        TYPICAL

Active Session History                                         TYPICAL

Undo Advisor, Alerts and Fast Ramp up                        TYPICAL

Buffer Cache Advice                                             TYPICAL

MTTR Advice                                                       TYPICAL

2、自动工作量资料档案库 (AWR)

l   内置的性能信息资料档案库

l   每 60 分钟记录一次数据库度量快照,保留期为 7 天

l   所有自行管理功能的基础

3、创建快照

(1) 使用dbms_workload_repository包中过程与函数:

PROCEDURE:CREATE_SNAPSHOT

FUNCTION:CREATE_SNAPSHOT

(2) AWR 快照集

快照集是一种机制,使用这种机制可为重要时段的快照数据集作标记。快照集是定义的一对快照,这些快照用快照序列号 (snap_id) 来标识。每个快照集对应于唯一一对快照。

DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE

(

        start_snap_id IN NUMBER  ,

         end_snap_id  IN NUMBER  ,

        baseline_name IN VARCHAR2

);

(3) 管理 AWR

l  保留期

u  默认值为 7 天

u  考虑存储需要

l  收集间隔

u  默认值为 60 分钟

u  考虑存储需要和性能影响

l  收集级别

u  Basic(禁用大多数 ADDM 功能)

u  Typical(建议级别)

u  All(将其它 SQL 优化信息添加到快照)

4、数据库自动诊断监视程序 (ADDM)

与其它指导不同,ADDM 在记录每个 AWR 快照之后自动运行。每次记录快照后,ADDM 会分析与最后两个快照对应的时段。ADDM会主动监视实例,以便在大多数瓶颈问题成为严重问题之前检测到这些问题。

多数情况下,ADDM 会为检测到的问题提供建议解决方案,甚至可以量化这些建议案的好处。 

ADDM 检测到的某些常见问题包括:

l   CPU 瓶颈

l   Oracle Net 连接管理不佳

l   锁争用

l   输入/输出 (I/O) 能力差

l   Oracle 内存结构大小不足

l   SQL 语句的负载过高

l   PL/SQL 和 Java时间过高

l   检查点负载过高及原因(例如,日志文件太小)

每次 ADDM 分析的结果都存储在 AWR 中,也可通过 Enterprise Manager 进行访问。

第13章 性能管理

1、性能监视

要管理 OracleDatabase 10g 并使其正常运行,数据库管理员 (DBA) 必须通过定期监视性能来查找瓶颈所在,然后更正问题。

DBA 可以查看的性能度量有数百种,包括从网络性能和磁盘输入/输出 (I/O) 速度到运行单个应用程序操作所花费的时间等等所有有关方面。这些性能度量通常称为数据库度量。

Enterprise Manager 中的“性能”标签页是一个门户,它提供了一组功能强大的性能监视和优化工具。此页的第一个屏幕上概述了进程和活动会话中的活动。“Average Active Sessions(平均活动会话)”图中显示了CPU 使用级别及是什么资源造成了大多数等待事件。在幻灯片屏幕上,可以看到CPU 使用率和用户 I/O、系统 I/O 及并发的等待时间最近都有所增加。单击其中一个类别可查看关于等待时间的详细信息。I/O数据被分为输入类型和输出类型 - 例如日志文件读取、控制文件写入等。

选择特定的等待类别后,可查看特定的五分钟间隔的详细信息,同时可以看见这段时间内与特定的等待事件相关的顶级运行SQL 和顶级运行会话。这样可针对系统速度减缓进行事后分析,从而确定可能存在的原因。

另外,实例磁盘 I/O 和实例吞吐量也反映在“Performance(性能)”标签主页上。

如果单击其中一个 I/O 类别名称,您会看到“Top Consumers(顶级消耗者)”页,其中列出了顶级服务、顶级模块、顶级操作、顶级客户机和顶级会话,其中包括诸如逻辑和物理读写计数、分析计数和排序计数等主要统计信息。如果单击I/O 类别名称,显示的相关统计信息就是列表的排序值。

此页上的表中列出了按 CPU 使用排序的会话。其中显示 152 会话中的用户 SH 是这段特定时间内CPU 的最大消耗者。

在多层系统中,如果存在作为池数据库连接的应用程序服务器,就不能通过查看会话来提供分析性能所需要的信息。通过按服务名对会话分组可更准确地监视性能。在幻灯片示例中有三个服务:inventory、orcl和 hr。无论特定请求使用什么会话,当通过其中一个服务连接会话时,捕获的会话性能数据都列在该服务名之下。从这个列表中可以清楚地看出,这三种应用程序服务中,inventory 服务是这段五分钟间隔内最活跃的服务。

2、SQL 优化指导

(1) 概览

SQL 优化指导是优化过程中使用的主要驱动程序。它通过调用自动优化优化程序 (ATO) 来执行四种特定类型的分析:

统计信息分析:自动优化优化程序会检查与缺少或过时统计信息有关的每个查询对象,然后提出收集相关统计信息的建议案。

SQL 概要文件:ATO 会验证它自身的估计值并收集辅助信息以删除估计错误。它使用辅助信息构建 SQL 概要文件并提出创建 SQL 概要文件的建议。创建 SQL 概要文件后,查询优化程序通过这个文件可生成合理优化的计划。

访问路径分析:ATO 会检查新索引是否可明显地改进查询中每个表的访问性能,并且在适当的时候提供创建这种索引的建议案。

SQL 结构分析:ATO 会尝试找出使用错误计划的 SQL 语句并提供相关建议来调整它们。建议的更改中可包括语法方面的更改,也可包括语义方面的更改。

(2) SQL 统计信息

Select last_name from hr.employees whereemployee_id=100;

Select last_name from hr.employees where employee_id=101;

Select last_name from hr.employees whereemployee_id=102;

SQL 优化指导还显示表示 SQL 语句的游标的统计信息。通过查看这两个游标中每一个游标的统计信息,可看见每个游标都会导致对语句进行硬分析。这意味着语句在库高速缓存中找不到匹配。这是因为使用文字代替了赋值变量。

解决方式:绑定变量

Select last_name from employees whereemployee_id=:v1;

(3) 使用SQL 访问指导

可以使用 SQL 访问指导来优化方案并提高查询性能。这个指导要求用户确定 SQL 工作量,即访问方案的一组 SQL 语句。可以选择不同来源的工作量,其中包括当前最近的 SQL 活动、SQL 资料档案库或用户定义的工作量,如开发环境的工作量。

SQL 访问指导可以针对给定工作量提供建议案,如创建索引或实体化视图来提高查询性能。

通过执行以下步骤可调用 SQL 访问指导:

A.   在“Database(数据库)”主页中,单击“Related Links(相关链接)”区域的“Advisor Central(指导中心)”。 

B.   单击“SQL Access(SQL 访问)”启动向导。此时会显示“SQL Access Advisor: Workload Source(SQL 访问指导: 工作量来源)”页。

C.   指定工作量来源,然后单击“Next(下一步)”。此时会显示“SQL Access Advisor:Recommendation Options(SQL访问指导: 建议选项)”页。

D.   指定是否要提出索引、实体化视图或这两者的建议。

E.   指定采用限制模式或综合模式。采用“限制”模式时会重点处理成本最高的语句,因此运行速度较快。

F.   单击“Next(下一步)”。此时会显示“SQL Access Advisor: Schedule(SQL 访问指导: 调度)”页。接受立即执行操作(默认方式),或者计划在以后执行。 

G.   单击“Next(下一步)”。此时会显示“SQL Access Advisor: Review(SQL 访问指导: 复查)”页。 

H.   复查所选的选项,然后单击“Submit(提交)”以开始作业。 

I.   结果显示在“Advisor Central(指导中心)”页。SQL 访问指导提出的建议案按成本收益排序。例如,某个建议可能包括有一个或多个CREATE INDEX 语句的 SQL 脚本,可通过单击“Schedule Implementation(调度实施)”来实施这个建议。

(4) 管理内存组件

a)  自动共享内存管理:

        i.     建议用于简化管理

       ii.      允许您通过一个初始参数sga_target指定 SGA 总内存 :show parameter sga_target

      iii.      使 Oracle 服务器可管理分配给共享池、Java 池、缓冲区高速缓存、streams 池和大型池的内存量

b)  手动设置共享内存管理:

        i.     通过多个初始化参数调整组件的大小

       ii.      使用内存指导提出建议

(5) 动态性能统计信息
(A)      V$SYSSTAT:实例启动以来系统范围的累计值

●      statistic#

●      name

●      class

●      value

●       stat_id

(B)      V$SESSTAT:将V$SYSSTAT中的信息分摊到每个Session中

●      sid

●      statistic#

●      value

(C)       V$SERVICE_STATS:将V$SYSSTAT中的信息分摊到每个Service中

●      service_name_hash

●      service_name

●      stat_id

●      stat_name

●      value

(D)      V$SYSTEM_EVENT:等待事件

●      event

●      total_waits

●      total_timeouts

●      time_waited

●      average_wait

●       time_waited_micro

(E)       V$SESSION_EVENT

●      sid

●      event

●      total_waits

●      total_timeouts

●      time_waited

●      average_wait

●      max_wait

●      time_waited_micro

●      event_id

(F)       V$SERVICE_EVENT

●      service_name

●      service_name_hash

●      event

●      event_id

●      total_waits

●      total_timeouts

●      time_waited

●      average_wait

●       time_waited_micro

(G)      V$Session_Wait:当前正在发生的等待
(6) 故障诊断和优化视图
(A)      实例/数据库

l   V$DATABASE

l   V$INSTANCE

l   V$PARAMETER

l   V$SPPARAMETER

l   V$SYSTEM_PARAMETER

l   V$PROCESS

l   V$BGPROCESS

l   V$PX_PROCESS_SYSSTAT   

l  V$SYSTEM_EVENT

(B)      磁盘

l   V$DATAFILE

l   V$FILESTAT

l   V$LOG

l   V$LOG_HISTORY

l   V$DBFILE

l   V$TEMPFILE

l   V$TEMPSEG_USAGE

l  V$SEGMENT_STATISTICS

(C)       内存

l   V$BUFFER_POOL_STATISTICS

l   V$LIBRARYCACHE

l   V$SGAINFO

l   V$PGASTAT

(D)      争用

l   V$LOCK

l   V$UNDOSTAT

l   V$WAITSTAT

l   V$LATCH

(7) 无效和不可用对象

通过查询数据字典可查看某些数据库对象的当前状态。这部分内容在“管理方案对象”一课中会予以介绍。如果查找到 INVALID 状态的PL/SQL 对象,需要回答的第一个问题是“此对象曾经是 VALID 吗?”应用程序开发人员常常忘了清除不起作用的代码。如果 PL/SQL 对象因代码错误而无效,在解决错误之前不能执行什么操作。如果该过程在过去曾经有效,最近才变为无效,则可选择以下两种方法解决这个问题:

n  不做任何处理。如果需要,大多数 PL/SQL 对象在调用时会自动重新编译。用户在对象重新编译时会经历短暂的延迟。(大多数情况下,这种延迟不十分明显。)

n  手动重新编译无效对象。

使用 Enterprise Manager 或通过SQL 命令可手动重新编译无效的PL/SQL 对象:

ALTER PROCEDUREHR.add_job_history COMPILE;

手动重新编译 PL/SQL 数据包,需要执行以下两个步骤:

ALTER PACKAGEHR.maintainemp COMPILE;

ALTER PACKAGEHR.maintainemp COMPILE BODY;

通过重建不可用索引来重算指针,可使不可用索引变为有效。重建不可用索引会在新位置重新创建索引,然后会删除不可用索引。使用 Enterprise Manager 或通过SQL 命令可完成此操作:

ALTER INDEXHR.emp_empid_pk REBUILD;

ALTER INDEXHR.emp_empid_pk REBUILD ONLINE;

ALTER INDEXHR.email REBUILD TABLESPACE USERS;

如果省略了 TABLESPACE 子句,则在曾经存在的相同表空间中重建索引。使用 REBUILD ONLINE 子句,用户可以在重建时继续更新索引表。(如果不使用 ONLINE 关键字,用户必须等待重建完成后才能对受影响的表执行 DML。)

EnterpriseManager 使用“Reorganize(重组)”操作修复 UNUSABLE 索引。

注:重建索引时需要有可用于重建的空闲空间。请在尝试重建前验证是否有足够的空间。EnterpriseManager 会自动检查空间要求。

第14章 备份和恢复的概念

1、后台进程和恢复

(1)检查点(CKPT):
(A)在检查点上发出DBWn信号
(B)使用检查点信息更新数据文件头
(C)使用检查点信息更新控制文件
(D)完全检查点触发时机:

l   Shutdown正常关机

l   Alter system checkpoint

(E)增量检查点触发时机:

l   每隔三秒

l   日志切换

(2)重做日志文件和LogWriter
(A)重做日志文件:

l   记录数据库的更改

l   应多路复用以避免文件丢失

(B)LogWriter何时执行写入

l   提交时

l   达到三分之一满度时

l   每隔三秒

l   DBWn执行写入之前

(3)归档程序(ARCn)

l  在NOARCHIVELOG 模式下,每次发生日志切换时,都会覆盖联机重做日志文件。 

l  在ARCHIVELOG 模式下,必须先归档非活动的已填满联机重做日志文件组,才可以再次使用这些组。 

 

2、介质故障

配置可恢复性(最大可恢复性)

l   计划常规备份

l   多路复用控制文件

l   多路复用重做日志组

l   保留重要日志的归档副本

 

第15章 执行数据库备份

1、目标:

l   创建一致数据库备份

l   在不关闭数据库情况下备份数据库

l   创建增量备份

l   执行自动数据库备份

l   监视快速恢复区

2、将控制文件备份到跟踪文件

在“Administration(管理)”属性页上的“Storage(存储)”区域中,单击“Control Files(控制文件)”,可管理数据库控制文件。控制文件有一个附加备份选项;控制文件可备份到跟踪文件。当丢失了所有控制文件时,控制文件跟踪备份包含重新创建控制文件所需要的 SQL 语句。 

尽管正确配置的数据库(控制文件的多个副本放置在不同磁盘和不同控制器上)同时丢失所有控制文件的可能性很小,但还是有可能发生。因此,每次数据库物理结构发生更改(添加了表空间或数据文件,或添加了其它重做日志组时)后,管理员都应将控制文件备份到跟踪文件。

使用 EnterpriseManager(如幻灯片所示),单击“Administration(管理)”属性页上的“Control File(控制文件)”,或者通过使用以下 SQL 命令可创建控制文件的跟踪副本:

SQL> ALTER DATABASE BACKUP CONTROLFILETO TRACE;

跟踪备份的创建位置由USER_DUMP_DEST 初始化参数指定,文件名为 sid_ora_pid.trc

跟踪文件包含关于归档日志目的地的信息,后面跟着用于创建替换控制文件并恢复数据库的命令:

CREATE CONTROLFILE REUSE DATABASE ORCLNORESETLOGS ARCHIVELOG

   MAXLOGFILES 16

   MAXLOGMEMBERS 3

   MAXDATAFILES 100

   MAXINSTANCES 8

   MAXLOGHISTORY 226

LOGFILE

 GROUP 1 '/oracle/oradata/orcl/redo01.log'  SIZE 10M,

 GROUP 2 '/oracle/oradata/orcl/redo02.log'  SIZE 10M,

 GROUP 3 '/oracle/oradata/orcl/redo03.log'  SIZE 10M

DATAFILE

 '/oracle/oradata/orcl/system01.dbf',

 '/oracle/oradata/orcl/undotbs01.dbf',

 '/oracle/oradata/orcl/sysaux01.dbf',

 '/oracle/oradata/orcl/users01.dbf',

  '/oracle/oradata/orcl/example01.dbf'

CHARACTER SET WE8ISO8859P1;

-- Commands to re-create incarnation table

-- Below log names MUST be changed toexisting filenames on

-- disk. Any one log file from each branchcan be used to

-- re-create incarnation records.

-- ALTER DATABASE REGISTER LOGFILE'/oracle/flash_recovery_area/ORCL/archivelog/2003_12_05/o1
_mf_1_1_%u_.arc';

-- ALTER DATABASE REGISTER LOGFILE'/oracle/flash_recovery_area/ORCL/archivelog/2003_12_05/o1
_mf_1_1_%u_.arc';

-- Recovery is required if any of the datafiles are restored backups,

-- or if the last shutdown was not normalor immediate.

RECOVER DATABASE

-- All logs need archiving and a log switchis needed.

ALTER SYSTEMARCHIVE LOG ALL;

-- Database can now be opened normally.

ALTER DATABASE OPEN;

-- Commands to add tempfiles to temporarytablespaces.

-- Online tempfiles have complete spaceinformation.

-- Other tempfiles may require adjustment.

ALTER TABLESPACE TEMP ADD TEMPFILE'/oracle/oradata/orcl/temp01.dbf'

    SIZE 20971520  REUSE AUTOEXTEND ONNEXT 655360  MAXSIZE 32767M;

 

3、管理备份

在“Maintenance(维护)”属性页上,单击“Manage Current Backups(管理当前备份)”可管理现有备份。在这一页上,可以查看备份的完成时间、创建位置(磁盘或磁带)以及备份是否仍可用。

在“Manage CurrentBackups(管理当前备份)”页的顶端可看到四个按钮,使用这些按钮可处理现有备份:

Catalog Additional Files(将其它文件列入目录):尽管RMAN(通过 EnterpriseManager 运行)是推荐使用的创建备份的方法,但是有些映像副本或备份集可能是通过其它方法或在其它环境下创建的,这样 RMAN 就找不到这些备份。执行这个任务后会找到这些文件,还会将这些文件添加到目录中。

Crosscheck All(交叉检验全部备份):RMAN 可自动删除过时备份,但用户也可使用操作系统命令删除这些备份。如果备份不是使用RMAN 删除的,那么在目录与目录实际内容之间执行交叉检验之前,目录并不知道是否缺失备份。

Delete All Obsolete(删除所有过时备份):执行这个任务会删除早于保留策略的
备份。

Delete All Expired(删除所有过期备份):执行这个任务会删除执行交叉检验时未找到的任何备份的目录列表。

4、快速恢复区

快速恢复区是磁盘上用于包含归档日志、备份和闪回日志的保留空间。 

如果已配置将归档日志写入这个位置(在其中一个位置中有 USE_DB_RECOVERY_AREA 标记),则必须监视这个空间,以确保没有到达容量限制。如果实例因缺乏空间而无法创建归档日志,实例就会暂停,直到管理员更正了这种情况。

单击“Maintenance(维护)”属性页上的“Recovery Settings(恢复设置)”,可转到“Flash Recovery Area(快速恢复区)”设置。在此页上,可执行以下操作:

指定快速恢复区的位置

指定快速恢复区的大小(Oracle 建议至少为数据库大小的两倍,以便可保留一个备份和若干归档日志)

确定占用了多少快速恢复区

配置闪回数据库。闪回数据库在“执行闪回”一课中会介绍

第16章  执行数据库恢复

1、更改实例状态

SQL> STARTUP NOMOUNT

SQL> ALTER DATABASE MOUNT

SQL> ALTER DATABASE OPEN

2、丢失了控制文件

执行以下步骤可在丢失了控制文件后进行恢复(只要至少保留了一个控制文件):

A.  如果实例尚未失败,可使用 SHUTDOWN ABORT 关闭实例。

B.  将剩余的其中一个控制文件复制到缺失文件的位置。如果介质故障是由于丢失了磁盘驱动器或控制器而造成的,则将剩余的其中一个控制文件复制到其它某个位置,然后通过更新实例的参数文件来指向新位置。或者,可从初始化参数文件中删除对缺失控制文件的引用。请记住:Oracle 建议任何时间始终至少保留两个控制文件。

C.  启动实例。

3、丢失了重做日志文件

丢失了单个重做日志组成员后进行恢复时并不影响运行的实例。要执行这种恢复,请执行以下步骤: 

A.  通过检查预警日志,确定是否有缺失的日志文件。

B.  通过从同一组中复制一个剩余文件来还原缺失的文件。

C.  如果介质故障是由于丢失了磁盘驱动器或控制器而造成的,请重命名缺失文件。

D.  如果重做日志组已归档,或者您处于 NOARCHIVELOG 模式下,则可选择在清除日志组后重新创建缺失文件来解决问题。选择相应的组,然后选择“Clear Logfile(清除日志文件)”操作。还可以使用以下命令手动清除受影响的组:

SQL> ALTER DATABASE CLEAR LOGFILE GROUP#;

注:DatabaseControl 不允许清除尚未归档的日志组。这样做会断开重做信息链。如果必须清除未归档的日志组,则应立即执行整个数据库完全备份。否则,在发生其它故障的情况下,会导致数据丢失。要清除未归档的日志组,请使用以下命令:

SQL> ALTER DATABASE CLEAR UNARCHIVEDLOGFILE GROUP #;

4、在 NOARCHIVELOG 模式下丢失了数据文件

如果数据库处于 NOARCHIVELOG模式下,并且丢失了任何数据文件,请执行以下任务:

A.  关闭实例(如果尚未关闭) 。

B.  从备份中还原整个数据库,包括所有数据和控制文件。

要进行这种类型的恢复,请执行以下任务: 

a. 关闭实例(如果尚未关闭)。

b. 在“Maintenance(维护)”属性页上,单击“Perform Recovery(执行恢复)”。 

c. 选择“Whole Database(整个数据库)”作为恢复类型。

C.  打开数据库。

D.  让用户重新输入自从上一次备份以来做的所有更改。

5、在 ARCHIVELOG 模式下丢失了非关键数据文件

数据库处于 ARCHIVELOG 模式时,如果丢失了任何不属于 SYSTEM 或 UNDO 表空间的数据文件时,则只会影响缺失文件中的对象。用户仍可使用数据库的其余部分继续工作。要还原并恢复缺失数据文件,请执行以下步骤: 

A.  在“Maintenance(维护)”属性页上,单击“Perform Recovery(执行恢复)”。

B.  选择“Datafiles(数据文件)”作为恢复类型,然后选择“Restore to currenttime(还原至当前时间)”。

C.  添加所有需要恢复的数据文件。

D.  确定是将文件还原至默认位置还是新位置(如果磁盘或控制器已缺失)。

E.  提交 RMAN 作业以还原并恢复缺失的文件。

由于数据库处于 ARCHIVELOG模式,因此可恢复到上次提交的时间,用户不需要重新输入任何数据。

6、在 ARCHIVELOG 模式下丢失了系统关键数据文件

属于 SYSTEM 表空间或包含 UNDO 数据的数据文件被认为是系统关键数据文件。如果丢失了其中一个文件,就需要从MOUNT 状态还原数据库(与可在数据库打开时还原其它数据文件不同)。要执行这种恢复,请执行以下步骤: 

A.  如果实例尚未关闭,请关闭实例(SHUTDOWN ABORT )。

B.  装载数据库。

C.  在“Maintenance(维护)”属性页上,单击“Perform Recovery(执行恢复)”。

D.  选择“Datafiles(数据文件)”作为恢复类型,然后选择“Restore to currenttime(还原至当前时间)”。

E.  添加所有需要恢复的数据文件。

F.  确定是将文件还原至默认位置还是新位置(如果磁盘或控制器已缺失)。

G.  提交 RMAN 作业以还原并恢复缺失的文件。 

H.  打开数据库。由于只恢复到上次提交的时间,因此不需要用户重新输入数据。

第17章 执行闪回

1、何时使用闪回技术

对象层次

方案示例

闪回技术

使用

影响数据

数据库

截断表;发生了意外多表更改事件

数据库

闪回日志

删除表

删除

回收站

 

使用了错误的 WHERE 子句进行了更新

还原数据

 

将当前数据与过去数据进行比较

查询

还原数据

 

比较行版本

版本

还原数据

Tx

查看数据的一些历史状态

事务处理

还原数据

 

2、闪回数据库:注意事项

A.  闪回数据库操作完成后,必须使用以下一种方法打开数据库:

(A)在只读模式下验证是否使用了正确的目标时间或 SCN

(B)使用 RESETLOGS 参数才允许进行更新

B. 闪回对应的是恢复

在不能使用闪回数据库功能的情况下,必须使用不完全恢复操作将数据库返回到特定时间。闪回数据库操作完成后,可在只读模式下打开数据库,验证是否使用了正确的目标时间或系统更改号 (SCN)。如果没有,可以再次闪回数据库,或者通过执行恢复操作来前滚数据库。因此,要撤消闪回数据库操作,必须向前恢复数据库。

注:闪回保留目标并不能绝对保证闪回可用。如果快速恢复区中必需存在的文件需要占用空间,可能会自动删除闪回日志。

3、执行闪回需设置db_flashback_returntion_target参数,单位分钟(默认1440分钟),必须是在归档日志状态

show parameter  flashback

NAME                                     TYPE      VALUE

------------------------------  -------- ----------------------

db_flashback_retention_target     integer    1440

(1)关闭数据库

shutdownimmediate;

(2)以mount状态启动数据库

startup mount;

(3)启动归档模式

alter database archivelog;

归档日志相关操作:

关闭归档模式

alterdatabase noarchivelog;

数据库实例启动后(open)禁止自动存档

altersystem archive log stop;

数据库实例启动后(open)启用自动存档

altersystem archive log start

查看归档信息

archivelog list;

强制性产生重做日志切换命令

Alter system switch logfile

强制性产生检查点命令

Alter system checkpoint

或设置fast_start_mttr_target参数(单位秒)

Fast_start_mttr_target  =  900

 

(4)打开闪回开关

alter databaseflashback on;

关闭闪回

alter databaseflashback off;

查看闪回是否打开

selectflash_on from v$databae;

(5)打开数据库

alter database open;

 

4、实验—闪回用户

(1)删除hr用户

drop user hr cascade;(cascade:级联删除,删除与其有关的其他对象)

(2)将数据库置为mount状态

shutdown immediate;

startup mount;

(3)闪回

flashback database to timestampto_date('2012-01-10 14:20:01','yyyy-mm-dd hh24:mi:ss');

(4)启动数据库(只读)

alter database open readonly;

(5)查看hr用户

desc hr.employees;

(6)将数据库置为mount状态

shutdown immediate;

startup mount;

(7)启动数据库(resetlogs状态)

alter database openresetlogs

(8)对数据库做全备

5、闪回表

需flashbacktable权限
必须对要执行闪回操作的表启用行移动

alter tableemployees enable row movement;

6、实验_闪回表

delete  employees where department_id=60;

commit;

alter table employees enablerow movement;

flashbacktable employees to timestamp to_date(‘20120110 17:23:00’,’yyyymmdd hh24:mi:ss’);

7、闪回表:注意事项

(1)FLASHBACK TABLE 命令可作为单个事务处理执行,从而可获取 DML 互斥锁。
(2)不闪回统计信息。
(3)保留当前索引和相关对象。
(4)闪回表操作:

A.不能对系统表执行

B.不能跨 DDL 操作

C.会写入预警日志文件

D.会生成还原和重做数据

8、闪回删除

(1)概览

DROPTABLE的本质就是对表进行重命名。使用闪回删除功能,可以撤消 DROP TABLE 语句产生的影响,而不需要求助于传统时间点恢复。这是由回收站实现的,通过 DBA_RECYCLEBIN 视图可查询回收站。

(2)闪回删除:注意事项

闪回删除不适用于:

l  驻留在 SYSTEM 表空间中的表

l  使用细粒度级审计或虚拟专用数据库的表

l  驻留在字典管理表空间中的表

l  已清除的表(purge),无论是手动清除的,还是在空间压力下自动清除的

以下相关对象不受保护:

l  位图联接索引

l  实体化视图日志

l  引用完整性约束条件

l  在删除表前删除的索引

9、实验_闪回表

(1)删除表:

DROP TABLE empnew;

(2)查看回收站:

Showrecyclebin;

ORIGINALNAME    RECYCLEBIN NAME                  OBJECT TYPE   DROP TIME

------------------------------------------- ------------ -----------------

EMPNEW           BIN$t5d3Z06DqnTgQAB/AQAkvg==$0  TABLE       2012-01-28:21:19:43

(3)实际上可对回收站中的表进行操作:表名有特殊字符需加双引号

Select * from “BIN$t5d3Z06DqnTgQAB/AQAkvg==$0”;

(4)闪回表

Flashback table empnew to before drop;

(5)闪回的同时可以将表改名

FLASHBACK TABLE HR."BIN$t5d3Z06IqnTgQAB/AQAkvg==$0" TOBEFORE DROP RENAME TO EMPTEST

(6)通过 Enterprise Manager 闪回已删除的表

在“Maintenance(维护)”页上的“Backup/Recovery(备份/恢复)”区域中选择“Perform Recover(执行恢复)”。

在“Type(类型)”区域中选择“Tables(表)”作为“Object Type(对象类型)”,

在“Operation Type(操作类型)”区域中选择“Flashback Dropped Tables(闪回已删除的表)”。

完成此操作后,单击“Perform Object Level Recovery(执行对象层次恢复)”。

此时应显示“Perform Object Level Recovery:Dropped Objects Selection(执行对象级恢复: 选择删除对象)”页,在此页上可以从回收站选择删除表。

还可以通过单击“View Content(查看内容)”查询删除表的内容。

选择要恢复的表,然后单击“Next(下一步)”。

此时会显示“Perform Object Level Recovery: Rename(执行对象级恢复: 重命名)”页,在此页上可重命名表(如果同一方案中当前存在具有相同名称的表)。

单击“Next(下一步)”继续。在“Perform Object Level Recovery: Review(执行对象级恢复: 复查)”页上,可以复查操作的详细资料,显示相应的 SQL 语句。

准备就绪后,单击“Submit(提交)”。此时应显示“Confirmation(确认)”页。单击“OK(确定)”返回到“Maintenance(维护)”页。

注:还可以使用“Administration(管理)”页上的“Schema(方案)”区域中的“Tables(表)”链接闪回已删除的表。在“Tables(表)”页上,单击“Recycle Bin(回收站)”按钮。

10、闪回时间浏览

闪回技术提供的功能可用于查询方案对象的过去版本、查询历史记录数据以及执行更改分析。每个事务处理在逻辑上都会生成新版本数据库。使用闪回技术,可通过浏览这些版本来查找错误及其原因。

(1)闪回查询

查询特定时间点的所有数据。例:

(A)查询当前时间

select to_char(sysdate,'yyyy-mm-ddhh24:mi:ss') from dual;

TO_CHAR(SYSDATE,'YY

-------------------

2012-01-2821:55:29

(B)查询相关记录数

select count(*)from emptest where department_id=60;

  COUNT(*)

---------

         5

(C)删除相关记录

delete emptest where department_id=60;

5 rows deleted.

(D)提交

commit;

Commit complete.

(E)查询相关记录数

select count(*) from emptest where department_id=60;

  COUNT(*)

----------

         0

(F)查询指定时间点上的相关记录数

select count(*) from emptest as of timestamp to_date('2012-01-28 21:55:29',

'yyyy-mm-dd hh24:mi:ss') where department_id=60;

  COUNT(*)

----------

         5

(G)通过DML语句,获得类似flashback table的功能

insert intoemptest select * from emptest as of timestamp to_date('2012-01-2821:55:29','yyyy-mm-dd hh24:mi:ss') where department_id=60;

 

UPDATE employeesSET salary =

(SELECT salary FROM employees

     AS OF TIMESTAMP TO_TIMESTAMP ('2005-05-0411:00:00', 'yyyy-mm-dd hh24:mi:ss')

 WHEREemployee_id = 200)

WHEREemployee_id = 200

 (2)闪回版本查询

查看两个时间之间行的所有版本以及更改了行的事务处理。

(A)概览

使用闪回查询功能,可以对特定时间范围或用户指定的系统更改号 (SCN) 范围内的数据库执行查询。通过使用闪回版本查询功能,可使用 VERSIONS 子句检索两个时间点或两个 SCN 之间的所有行的所有版本。

闪回版本查询返回的那些行表示跨事务处理的那些行的更改历史记录。闪回版本查询只检索提交的行事件。不会显示事务处理中未提交的行版本。返回行中还包括删除的行版本和后来重新插入的行版本。

可以使用闪回版本查询检索行历史记录。闪回版本查询提供了一种方法,通过这种方法可审计表行,检索影响行的事务处理的有关信息。然后,可使用返回的事务处理标识符来执行事务处理挖掘(通过使用 LogMiner)或执行闪回版本查询,本课稍后将对此进行论述。

注:在本示例中,VERSIONS_XID 是返回行对应版本的事务处理标识符的伪列。

(B)通过 Enterprise Manager 执行闪回版本查询

在“Maintenance(维护)”页上,选择“Perform Recovery(执行恢复)”。 

在“Perform Recovery(执行恢复)”页上,选择“Tables(表)”作为“Object Type(对象类型)”,选择“Flashback Existing Tables(闪回现有表)”作为“Operation Type(操作类型)”。

单击“Perform Object Level Recovery(执行对象级恢复)”。

在“Perform Object Level Recovery: Point-in-Time(执行对象级恢复: 时间点)”页上,选择“Evaluate row changes and transactions to decide on a point in time(评估行更改和事务处理以确定时间点)”并指定目标表的名称。

在“Available Columns(可用列)”框中选择要查看的列,然后在“Bind The Row Value(绑定行值)”框中输入搜索子句。

选择“Show all row history(显示所有行历史记录)”,然后单击“Next(下一步)”。

(C)SHOW SQL

selectversions_startscn, to_char(versions_starttime, 'YYYY-MM-DD HH24:MI:SS'),versions_xid, versions_operation, ID, NAME from HR.FLASHTEST versions betweenscn minvalue and maxvalue where 1=1 and versions_startscn is not null order byversions_startscn desc

(D)闪回版本查询:注意事项

l   VERSIONS 子句不能用于查询:

u  外部表

u  临时表

u  固定表

u  视图

l   VERSIONS 子句不能跨 DDL 命令使用

l   段收缩操作已过滤掉

(3)闪回事务处理查询

查看事务处理做的所有更改。

(A)概览

闪回事务处理查询是一种诊断工具,本质就是一个视图(FLASHBACK_TRANSACTION_QUERY),可以用来查看在事务处理级对数据库所做的更改。这样,可诊断数据库中的问题并对事务处理执行分析和审计。 

可以使用FLASHBACK_TRANSACTION_QUERY 视图来确定所有必要的 SQL 语句,这些语句可用来还原特定事务处理或特定时间段内所做的修改。

(B)通过 Enterprise Manager 执行闪回事务处理查询

这个功能借助执行恢复向导,与闪回版本查询功能一起使用。

在“Perform Object Level Recovery: Choose SCN(执行对象层次恢复: 选择 SCN)”页上,单击“Flashback Versions Query Result(闪回版本查询结果)”区域中的“Transaction ID(事务处理 ID)”链接。

在幻灯片示例中,对 JOBS 表执行闪回版本查询后,检索到JOB_ID = 'AD_PRES' 的JOBS 行有三个版本。然后,单击其中一个事务处理 ID,可显示所有更改,这些更改是该事务处理所做更改的一部分。

注意,除了 JOBS 表更新之外,该事务处理中还更新了EMPLOYEES 表。

(C)闪回事务处理查询:注意事项

在数据库中,DDL 操作只是对数据字典所做的一系列空间管理操作和更改。通过执行 DDL 对事务处理执行闪回事务处理查询时,会显示对数据字典所做的更改。

当闪回事务处理查询涉及到已从数据库中删除的表时,就不会反映表名称。而是使用对象编号。

如果删除了执行事务处理的用户,则该事务处理的闪回事务处理查询只显示相应的用户 ID,而不是用户名。

注:当特定的事务处理没有足够的还原数据,在FLASHBACK_TRANSACTION_QUERY 的OPERATION 列中会返回值为 UNKNOWN 的行。

第18章 移动数据

 

 

 

第三部份 DBA_2

第二章 配置Oracle  Recovery Manager

创建rman用户(测试用)

create user rman identified by rman;

授权(为了方便,授DBA)

grant dba to rman identified rman;

授recovery_catalog_owner权限(必授)

grant recovery_catalog_owner to rman;

通过控制台,用rman工具连接到数据库

rman catalog rman/rman@XZT190

启动RMAN

(1)本地启动RMAN

unix: $ORACLE_SID=XZT190;export ORACLE_SID

$rman target /

windown NT: c:\>set ORACLE_SID=XZT190

           c:\>rman target/

(2)远程启动RMAN

rman targetsys/password@XZT190

(3)显示RMAN配置参数

show all;

第三章 使用OracleRecovery Manager

课程目标

l   使用 RMAN BACKUP 命令创建备份集和映像副本

l   管理通过 RMAN 获取的备份和映像副本

发出 Oracle Recovery Manager 命令

(1) 交互式客户机

1)  在 RMAN 提示符下输入命令。

2)  执行分析时或运行报告或存储脚本时使用。

3)  $ rman TARGET sys/sys_pwd@db1

RMAN> BACKUP DATABASE;

 

(2) 批处理模式

1)  与自动作业配合使用。

2)  启动 RMAN 时指定命令文件。

3)  指定日志文件名来捕获会话日志。

4)  $ rman TARGET SYS/sys_pwd@prod1@'/oracle/backup_all_l0.rcv'

(3) 管道接口

1)  指定 PIPE 命令行参数。

2)  用于在会话之间或在 RMAN 与外部应用程序之间传递数据。

 

RMAN命令类型

(1) 独立命令:

1)   在 RMAN 提示符下单独执行

2)   不能显示为 RUN 内的子命令

3)   以下是一些独立命令:

CHANGE

CONNECT

CREATE CATALOG、RESYNC CATALOG

CREATE SCRIPT、DELETE SCRIPT、REPLACE SCRIPT 

(2) 作业命令:

1)   必须位于 RUN 命令的大括号内

2)   以组的形式执行

3)   作业命令通常在命令块内组合并按顺序执行。如果块内的任一命令失败,RMAN 就会停止处理,不再执行块内的其它命令。但所有已执行命令的结果仍然保留,不会以任何形式撤消。

4)   示例:

RMAN>RUN {

 BACKUP AS BACKUPSET

FORMAT '/u01/db01/backup/%d_%s_%p'

 DURATION 10:00 MINIMIZE LOAD

(DATABASE);

SQL 'alter system archive logcurrent';

}

(3) 一些命令既可以作为独立命令执行,也可以作为作业命令执行。

BACKUP 命令

备份是数据库中数据的副本,可用于重建该数据。通过 RMAN 创建的备份结果为映像副本或备份集。映像副本是与原数据库文件完全相同的副本。RMAN还能以称之为备份集的 RMAN 专用格式存储其备份。备份集是称之为备份片段的文件的集合,每个备份集都可能包含一个或多个数据库文件备份。

使用 RMAN 执行备份时,可以指定:

•   要执行备份的类型。可以执行整个数据库的备份,以在文件中包含所有使用的数据块(FULL备份),或者执行增量备份 (INCREMENTAL)。如果启用了 CONFIGURE CONTROLFILE AUTOBACKUP,RMAN 会在BACKUP 命令后自动备份控制文件和当前服务器参数文件。

•   要备份的内容。有效值是 DATABASE、DATAFILE、TABLESPACE、ARCHIVELOG、CURRENT CONTROLFILE 或 SPFILE。

•   是创建映像副本 (AS COPY) 还是创建备份集 (AS BACKUPSET)。

•   备份片段的文件名格式和位置 (FORMAT)。%d:数据库名;%s:backupset的ID;%p: backup批次ID

•   应从备份集中排除哪些数据文件或归档重做日志 (SKIP)。

•   备份集大小的最大值 (MAXSETSIZE)。

•   成功创建了备份集时应删除输入文件 (DELETE INPUT)。

•    示例:

RMAN> BACKUP ASBACKUPSET
              2>  FORMAT '/BACKUP/df_%d_%s_%p.bus'
              3>  TABLESPACE hr_data;

备份约束条件

使用Oracle Recovery Manager 执行备份时,必须注意以下各项:

•   目标数据库必须已装载,以便 Oracle Recovery Manager 进行连接。

•   不支持联机重做日志备份。

•   如果目标数据库处于 NOARCHIVELOG 模式,则仅能执行“干净”表空间和数据文件备份(即,“正常脱机”或“只读”表空间的备份)。仅当数据库先完全关闭,然后在MOUNT 模式下重新启动时,才能执行数据库备份。

•   如果目标数据库处于 ARCHIVELOG 模式,则仅能备份“当前”数据文件(通过恢复,还原的数据文件变为当前状态)。

•   如果使用恢复目录,则恢复目录数据库必须处于打开状态。

 

 

你可能感兴趣的:(Oracle)