读书笔记_OCP认证(作者:沃森、伯西里克)
Google文档地址:
http://docs.google.com/View?id=dcbw3pcm_39hdwhvkfm
http://docs.google.com/View?id=dcbw3pcm_40d48v3bc8
注1:该笔记为未完成版
注2:转帖请注明出处(笔记作者:城市行走者)
第1章 Oracle的基本概念
第2章 安装Oralce Database 10g
2.1安装Oralce Database 10g
第3章 创建Oracle数据库
3.1 Oracle服务器的体系结构
3.2 创建数据库的步骤
3.2 使用DBCA创建一个数据库
3.3 数据库创建脚本
第4章 接合Oracle数据库(Interfacing with the Oracle Database)
4.1调用SQL*Plus
4.2 连接iSQL*Plus
第5章 管理Oracle进程
5.1 启动SQL*Plus
5.2 启动iSQL*Plus
5.3 启动Database Listener
5.4 启动Database Control端口监控程序
5.5 数据库的启动与关闭
第6章 管理Oracle存储结构
6.1 基本的Oracle存储结构
6.2 创建与管理表空间
6.3 查看表空间
第7章 管理数据库用户
7.1 创建与管理数据库用户
7.2 权限的授予(系统权限、对象权限、角色)
7.3 利用配置文件控制资源的使用
第8章 管理数据库对象
8.1 用户、模式以及模式对象
8.2 数据类型
8.3 创建表
8.4 创建约束
8.5 创建索引
8.6 创建视图
8.7 创建序列
第9章 操纵数据库数据
9.1 事物的隔离性、读一致性以及提交
9.2 DML与完整性约束
9.3 Data Pump
9.4 SQL*Loader
第10章 使用PL/SQL进行Oracle编程
第11章 保护Oracle数据库的安全
第12章 配置Oracle互联
12.1 Oracle客户/服务器的实现
12.2 创建与管理侦听器
12.3 数据库注册(静态注册、动态注册)
12.4 侦听器控制实用程序(lsnrctl)
12.5 名称解析技术
12.6 配置服务别名
12.7 高级的连接选项
12.8 测试Oracle Net连接
第13章 管理共享服务器
第14章 管理数据库性能
14.1 修正无效的对象(Invalid Objects)
14.2 修正无用的索引(Unusable Indexes)
14.3 优化器统计(Optimizer Statistics)
14.4 性能指标(Performance Metrics)
第15章 监视Oracle
15.1 自动工作负荷仓库(Automatic Workload Repository, AWR)
15.2 诊断与调整顾问程序
15.3 服务器生成的告警
第16章 管理撤销
16.1 撤销数据的原因与实质
16.2 创建撤销表空间
16.3 管理撤销
第17章 处理锁定
17.1 共享锁与排他锁
17.2 DML锁与DDL锁
17.3 排队机制(The Enqueue Mechanism)
17.4 锁定争用(Lock Contention)
17.5 死锁(Deadlocks)
第18章 配置数据库的备份与恢复
18.1 备份与恢复问题
18.2 失败类别
18.3 实例恢复
18.4 实例恢复与MTTR
18.5 MTTR顾问程序
18.6 配置数据库的可恢复性
18.6.1 复用控制文件
18.6.2 保护联机重做日志
18.6.3 将数据库转换至归档(archivelog)模式
第19章 备份Oracle数据库
19.1 备份工具
19.2 概念与术语
19.2.1 全部备份与部分部分(Whole or Partial Backups)
19.2.2 完整备份与增量备份(Full or Incremental Backups)
19.2.3 脱机备份与联机备份(Offline or Online Backups)
19.2.4 映像副本与备份集(Image Copies or Backup Sets)
19.3 RMAN的设置
19.3.1 设备的设置
19.3.2 备份集的设置
19.3.3 策略的设置
19.4 运行数据库的一个完整备份
19.5 控制文件的备份(使用SQL*Plus备份控制文件以便进行跟踪)
19.6 管理RMAN备份
第20章 恢复Oracle数据库
20.1 回复结构与进程
20.2 恢复受损的控制文件
20.3 恢复受损的复用联机重做日志
20.4 恢复受损的数据文件
第21章 管理Oracle数据库中的全球化特性
21.1 全球化特性
21.1.1字符集(Character Sets)
21.1.2语言支持
21.1.3地区支持
21.1.4 其他NLS设置
21.2 使用全球化支持功能
21.2.1 选择字符集
21.2.2 改变数据库字符集
21.2.3 数据库内的全球化
21.2.4 实例级别的全球化
21.2.5 客户端环境设置
21.2.6 会话级别的全球化设置
21.2.7 语句级别的全球化设置
21.3 语言排序与选择
21.4 使用时区
第22章 配置侦听器的安全性
22.1 保护侦听器的安全
22.1.1 侦听器的操作系统身份验证
22.1.2 侦听器的口令身份验证
22.2 控制对数据库的访问
22.3 外部过程
第23章 开始使用Recovery Manager
23.1 RMAN特性
23.2 RMAN的组件
23.2.1 RMAN可执行程序
23.2.2目标数据库
23.2.3 服务器进程与通道
23.2.4 RMAN存储仓库(repository)
23.2.5 恢复目录(Recovery Catalog)
23.2.6 介质管理器(Media Management Library)
23.2.7 辅助数据库(Auxiliary Database)
23.2.8 闪回恢复区(Flash Recovery Area)
23.3 配置RMAN
23.3.1 环境变量与实例参数
23.3.2 连接数据库
23.3.3 配置RMAN的永久设置
23.3.4 通道分配
23.3.5 RMAN备份的内容
23.3.6 配置备份的保留
23.3.7 重写默认配置
第24章 使用RMAN备份数据库
24-1 创建备份集
24-2管理与监视RMAN备份(list、report与delete命令)
第25章 诊断Oracle数据库的问题
25.1 告警日志
25.2 后台跟踪文件(Background Trace Files)
25.3 服务器生成的告警
25.3.1 告警的类型
25.3.2 告警系统的体系结构
25.3.3 查看告警信息
25.3.4 建立通知规则
25.3.5 编辑阈值
25.4 用户跟踪文件(User Trace Files)
第26章 恢复非关键的损失
26-1 恢复受损的临时表空间
26-2 恢复受损的联机重做日志
26-3 恢复受损的索引表空间
26-4 恢复受损的只读表空间
26-5 恢复受损的口令文件
第27章 数据库的不完全恢复
27.1 完全恢复
27.2 需要进行不完全恢复的场合
27.3 不完全恢复的方法
27.4 使用用户托管的备份进行不完全恢复
27.5 使用RMAN的不完全恢复
27.6 控制文件的恢复
27.7 使用RESETLOGS操作进行恢复
第28章 使用Oracle Flashback Database
28.1 不同的闪回方法
28.2 Flashback Database的体系结构
28.3 配置Flashback Database
28.4 监视Flashback Database
28.5 使用Flashback Database
28.6 管理闪回恢复区
第29章 恢复用户错误
29.1 Flashback drop
29.2 管理回收站
29.3 Flashback Query
29.4 Flashback Version Query
29.5 Flashback Transaction Query
第30章 检测与恢复数据库的讹误
第31章 用于调整Oracle 10g的工具
第32章 监视与管理存储结构
第33章 使用ASM管理存储结构
第34章 监视与管理内存
第35章 管理数据库资源
第36章 自动化管理任务
第1章 Oracle的基本概念
In this chapter you will learn
• What a database is and what makes a database relational
• What SQL is
• Which database objects are supported in Oracle 10g
• What a database administrator does
• How the Oracle database fits into the Oracle product family
第2章 安装Oralce Database 10g
In this chapter you will learn how to
• Identify system requirements
• Use Optimal Flexible Architecture
• Install software with the Oracle Universal Installer
• Identify and configure commonly used environment variables
2.1安装Oralce Database 10g
ok
第3章 创建Oracle数据库
In this chapter you will learn how to
• Create an Oracle database
• Explain the Oracle database architecture
• Explain the instance architecture
• Use the management framework
• Use DBCA to create a database
• Use DBCA to configure a database
• Use DBCA to drop a database
• Use DBCA to manage templates
图 Oracle服务器的体系结构
3.1 Oracle服务器的体系结构
详见我的笔记,略
3.2 创建数据库的步骤
To create a database, there are a number of steps that must be followed in the correct
order:
1. Create a parameter file and a password file.
2. Use the parameter file to build an instance in memory.
3. Issue the CREATE DATABASE command. This will generate, at a minimum,
a controlfile; two online redo log files; two datafiles for the SYSTEM and
SYSAUX tablespaces, and a data dictionary.
4. Run SQL scripts to generate the data dictionary views and the supplied PL/SQL
packages.
5. Run SQL scripts to generate Enterprise Manager Database Control, along with
any options (such as Java) that the database will require.
On Windows systems, there is an additional step because Oracle runs as a Windows
service. Oracle provides a utility, ORADIM.EXE, to assist you in creating this service.
3.2 使用DBCA创建一个数据库
ok
3.3 数据库创建脚本
略。
第4章 接合Oracle数据库(Interfacing with the Oracle Database)
In this chapter you will learn how to
• Use SQL*Plus and iSQL*Plus to access Oracle Database 10g
• Use SQL*Plus and iSQL*Plus to describe the logical structure of tables
• Use SQL to query, manipulate, and define data using SELECT, UPDATE/INSERT/
DELETE, and CREATE/ALTER/DROP
• Identify common database interfaces
• Describe a database transaction
4.1调用SQL*Plus
ok
4.2 连接iSQL*Plus
ok
第5章 管理Oracle进程
In this chapter you will learn how to
• Control the database
• Start and stop iSQL*Plus
• Start and stop Enterprise Manager Database Control
• Start and stop the Oracle Listener
• Start up and shut down Oracle Database 10g
• Describe startup and shutdown options for the Oracle database
• Handle parameter files
• Locate and view the database alert log
5.1 启动SQL*Plus
SQL*Plus只是一个向数据库发出特定SQL命令的基本进程,这是一个客户/服务器工具。
C:\>sqlplus /nolog
SQL*Plus: Release 10.1.0.2.0 - Production on 星期一 1月 11 23:23:51 2010
Copyright (c) 1982, 2004, Oracle. All rights reserved.
SQL> conn /as sysdba
已连接。
5.2 启动iSQL*Plus
iSQL*Plus是图形形式的SQL*Plus,这种工具作为一种Application Server服务运行。终端用户可以从Web浏览器连接iSQL*Plus。
使用命令isqlplusctl start,可以启动iSQL*Plus。
C:\>isqlplusctl start
iSQL*Plus 10.1.0.2.0
Copyright (c) 2004 Oracle. All rights reserved.
Starting iSQL*Plus ...
iSQL*Plus started.
为了连接iSQL*Plus,需要在浏览器中输入下面的URL:
http://<hostname.domain>:<port>/isqlplus
其中默认端口号是5560。
5.3 启动Database Listener
这一部分将在第12章详细讨论。
如果没有运行侦听程序Database Listener,那么Database Control就无法连接数据库。
C:\>lsnrctl start
C:\>lsnrctl stop
C:\>lsnrctl status
C:\>lsnrctl status
LSNRCTL for 32-bit Windows: Version 10.1.0.2.0 - Production on 12-1月 -2010 00:0
3:21
Copyright (c) 1991, 2004, Oracle. All rights reserved.
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC)))
LISTENER 的 STATUS
------------------------
别名 LISTENER
版本 TNSLSNR for 32-bit Windows: Version 10.1.0.2.0 - Produ
ction
启动日期 11-1月 -2010 18:34:00
正常运行时间 0 天 5 小时 29 分 23 秒
跟踪级别 off
安全性 ON: Local OS Authentication
SNMP OFF
监听程序参数文件 D:\oracle\product\10.1.0\db_1\network\admin\listener.o
ra
监听程序日志文件 D:\oracle\product\10.1.0\db_1\network\log\listener.log
监听端点概要...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROCipc)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=lenovo-fe3b8a55)(PORT=1521)))
服务摘要..
服务 "PLSExtProc" 包含 1 个例程。
例程 "PLSExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
服务 "ocp10g" 包含 1 个例程。
例程 "ocp10g", 状态 READY, 包含此服务的 1 个处理程序...
命令执行成功
5.4 启动Database Control端口监控程序
如果希望启动、停止Database Control进程,需要使用emctl实用程序。
C:\>emctl start dbconsole
C:\>emctl stop dbconsole
C:\>emctl status dbconsole
C:\>set oracle_sid=OCP10G
C:\>emctl status dbconsole
Oracle Enterprise Manager 10g Database Control Release 10.1.0.2.0
Copyright (c) 1996, 2004 Oracle Corporation. All rights reserved.
http://lenovo-fe3b8a55:5500/em/console/aboutApplication
Oracle Enterprise Manager 10g is running.
--------------------------------------------------------------
Logs are generated in directory D:\oracle\product\10.1.0\db_1/lenovo-fe3b8a55_OC
P10G/sysman/log
一旦这个进程运行中,就可以使用如下的URL来连接数据库
http://<host.domain>:<port>/em
其中默认的端口是5500。
5.5 数据库的启动与关闭
1、使用正确的权限进行连接
CONNECT的语法为:
connect user/pass[@db]
connect user/pass[@db] as sysdba
connect user/pass[@db] as sysoper
connect / as sysdba
connect / as sysoper
第一个示例是标准的数据字典身份验证。此时数据库必须是打开状态,任何用户只要使用这种语法连接数据库,那么就无法执行启动或关闭命令。
第二、第三个示例指示Oracle进入外部口令文件验证用户名/口令组合。
第四、第五个示例使用了操作系统身份验证。
2、SYSOPER与SYSDBA
需扩充,暂时略
3、startup命令
详见我的笔记,略
第6章 管理Oracle存储结构
In this chapter you will learn how to
• Define the purpose of tablespaces and datafiles
• Create tablespaces
• Manage tablespaces (alter, drop, generate DDL, take offline, put online, add datafiles,
make read-only or read/write)
• Obtain tablespace information from Enterprise Manager and the data dictionary
• Drop tablespaces
• Describe the default tablespace
图 Oracle数据库存储结构的实体关系模型
6.1 基本的Oracle存储结构
1、物理存储结构
物理结构是从操作系统角度观察Oracle数据库时看到的的结构。 (The physical structure is what the operating system sees when “looking” at an Oracle database.) 它由一个或多个数据文件组成,每个数据文件由若干个操作系统块组成。
数据库物理结构有三类物理文件组成:数据文件、重执行日志文件、控制文件。
重执行日志文件记录数据库做的所有改变。
控制文件用来维护数据库物理结构的信息。
2、逻辑存储结构
2.1 表空间(TABLESPACE)
表空间的类型:第一种标准基于表空间存储的对象的类型:SYSTEM类型或非SYSTEM类型。在Oracle 10g中,SYSTEM与SYSAUX表空间由SYSTEM类型对象组成,其他表空间都被分类为非SYSTEM类型。
SYSTEM表空间包含数据字典。数据字典是描述数据库自身结构、数据库中所有对象、用户以及角色的若干内部表。某个用户查询或执行DML语句时,数据字典被用于验证这个用户的权限以及查找属于被查询或修改的段的数据。执行DDL语句(包括CREATE、ALTER或DROP)后,这些表的内容也会被改变以反映相应的变化。
SYSAUX表空间用于存储统计信息以及其他信息。
表空间可以存储下列3种段中的一种:永久段、临时段以及撤销段。
2.2 段(SEGMENT)
表空间内的空间被分配给若干段。段(SEGMENT)是数据库中要求存储的对象,如一个表或一个索引。
SELECT DISTINCT segment_type FROM DBA_SEGMENTS;
SEGMENT_TYPE
1 CLUSTER
2 INDEX
3 INDEX PARTITION
4 LOB PARTITION
5 LOBINDEX
6 LOBSEGMENT
7 NESTED TABLE
8 ROLLBACK
9 TABLE
10 TABLE PARTITION
11 TYPE2 UNDO
2.3 区间(EXTENT)
为表空间内的段分配空间时,每次只能分配一个区间(EXTENT)。
区间管理可以是本地管理或者字典管理。
2.4 数据库块
数据库块是数据库最小的I/O单位。数据库需要读取数据时,无法只读取一条记录,而是必须读取整个数据块。写操作也会出现同样的问题:即使数据块中只有一条记录发生变化,DBWn进程都必须在检查点期间写入整个数据块。
默认的数据块的大小在数据库创建阶段设置,并且无法修改。
创建表空间时可以设置本表空间数据块的大小,并且无法修改。
6.2 创建与管理表空间
ok
创建表空间的语法:
CREATE [BIGFILE | SMALLFILE] [TEMPORARY] TABLESPACE tablespace name
DATAFILE datafile spec | TEMPFILE tempfile spec
[MINIMUM EXTENT minimum extent size]
[BLOCKSIZE blocksize]
[COMPRESS|NOCOMPRESS] DEFAULT STORAGE (default storage clause)]
[LOGGING|NOLOGGING]
[FORCE LOGGING]
[ONLINE|OFFLINE]
[EXTENT MANAGEMENT DICTIONARY |
LOCAL [AUTOALLOCATE|UNIFORM SIZE size]
[SEGMENT SPACE MANAGEMENT MANUAL|AUTO]
[FLASHBACK ON|OFF]
创建表空间,所需的是这个表空间的名称以及数据文件信息,其他所有的设置都可以使用Oracle的默认值。如下所示:
CREATE TABLESPACE default_demo
DATAFILE '$ORACLE_BASE/oradata/default_demo01.dbf' SIZE 10M;
删除表空间:
DROP TABLESPACE tablespace_name;
如果下删除的表空间存在某些对象,那么会得到如下所示的错误信息:
DROP TABLESPACE tablespace_name
*
ORA-01549: tablespace not empty, use INCLUDING CONTENTS option
DROP TABLESPACE OCP10GDATA INCLUDING CONTENTS CASCADE CONSTRAINTS;
如果不指定INCLUDING CONTENTS和CASCADE CONSTRAINTS参数,那么只有在表空间不包括任何永久对象的前提下才能删除这个表空间。
删除表空间的结果是从参数文件和数据字典中删除这个表空间的所有引用。因为并没有真正删除数据文件,所以还需要手动删除数据文件的操作(不过最好还是通过EM来完成这个步骤)。
6.3 查看表空间
DBA_TABLESPACES V$TABLESPACE 视图
DBA_DATAFILES V$DATAFILE 视图
DBA_TEMP_FILES V$TEMPFILE 视图
第7章 管理数据库用户
In this chapter you will learn how to
• Create and manage database user accounts
• Create and manage roles
• Grant and revoke privileges
• Control resource usage by users
7.1 创建与管理数据库用户
详见我的笔记,作者给出了很好的例子,略
CREATE USER username
IDENTIFIED [BY password | EXTERNALLY | GLOBALLY AS extname]
[DEFAULT TABLESPACE tablespacename]
[TEMPORARY TABLESPACE tablespacename]
[ACCOUNT LOCK | UNLOCK]
[PROFILE profilename | DEFAULT]
[PASSWORD EXPIRE]
[QUOTA num [K|M] | UNLIMITED ON tablespace
[QUOTA num [K|M] | UNLIMITED ON tablespace] ... ]
盖国强的这里的例子很好(略)P120
创建用户的最简单语法如下:
CREATE USER <username> IDENTIFIED BY <password>;
这个字句已经过于简单,省略了空间分配的字句(请注意作为一个DBA,要尽量避免这样的语句),通常这是不推荐的写法,可是很多客户就是这样创建用户的。
需要理解一下的是,这个语句在不同的Oracle版本中会有不同的结果。
Oracle 8i:
Oracle 9i:
Oracle 10g中:Oracle最终解决了这个问题,这得益于全局缺省表空间的引入。
由于一直以来存在数据空间的分配和使用问题,我们建议在创建用户时就为用户制定缺省的表空间
完善后的语句为:
CREATE USER <username> IDENTIFIED BY <password>
DEFAULT TABLESPACE <tablespace_name>
TEMPORARY TABLESPACE <tablespace_name>;
删除用户:
DROP USER username [CASCADE]
Oracle不允许从数据库中删除其模式中包含对象的用户。
Oracle建议在删除某个用户之前,需要确定该用户是否拥有数据库中的对象,如果该用户拥有某些对象,那么只有在验证其他用户不依赖这些对象后才能删除该用户拥有的对象。
通过DBA_OBJECTS 和 DBA_DEPENDENCIES视图。
select * from DBA_OBJECTS where owner='EYGLE';
select * from DBA_DEPENDENCIES;
需要查一下,略,s user_constraints 之间的区别???
7.2 权限的授予(系统权限、对象权限、角色)
1、系统权限
表 Oracle 10g 中常见的系统权限
GRANT privilege [, privilege, ...]
TO username [, username, ...]
[WITH ADMIN OPTION];
REVOKE privilege [, privilege, ...]
FROM username [, username, ...];
注意:DBA可以使用WITH ADMIN OPTION 为某个用户授予权限,如果这个用户为其他用户授予了相同的权限,那么就无法级联的取消这些用户的权限。例如:略P137
…通过dba_sys_privs视图。
确定被授予的系统权限
查询权限,通过视图dba_sys_privs
select * from dba_sys_privs --(有488条记录)
2、对象权限
Privilege Granted On
SELECT Table, view, sequence
INSERT Table, view
UPDATE Table, view
DELETE Table, view
ALTER Table, sequence
INDEX Table
REFERENCES Table
EXECUTE Procedure, function, package
GRANT privilege [,privilege, ...]
ON objectname
TO user | role | PUBLIC
[WITH GRANT OPTION];
REVOKE privilege [,privilege, ...]
ON objectname
FROM user | role | PUBLIC
[CASCADE CONSTRAINTS];
与授予系统权限不同,授予对象权限时必须制定关键字ON,从而能够确定权限应用的对象。
一般不建议在列的级别上授予对象权限。
通常,在需要只为表中特定的某些列授予对象权限时,我们建议创建一个只包含这些列的视图,并在这个视图上授予适当的权限。
注意:取消对象权限时级联的,这一点与取消系统权限不同。
确定被授予的对象权限
• USER_TAB_PRIVS_MADE Object privileges the user has granted to others
on his schema objects
• USER_TAB_PRIVS_RECD Privileges granted to the user to objects in other
schemas
• ALL_TAB_PRIVS_MADE Object privileges the user has granted to others on
his and other schema objects
• ALL_TAB_PRIVS_RECD Privileges granted to the user to objects in his and
other schemas
• USER_COL_PRIVS_MADE Column privileges granted by the user to tables
in his schema
• USER_COL_PRIVS_RECD Column privileges granted to the user to columns
in tables in other schemas
• ALL_COL_PRIVS_MADE Column privileges granted by the user to tables in
his and other schemas
• ALL_COL_PRIVS_RECD Column privileges granted to the user to columns
in tables in his and other schemas
3、角色
角色是保存权限或者其他角色的容器。角色的主要优点是简化了为用户授权的过程。
表 Oracle 10g中的预定义角色及其被授予的权限
CREATE ROLE rolename
[NOT IDENTIFIED | IDENTIFIED
BY password | EXTERNALLY | GLOBALLY];
1. 创建角色
CREATE ROLE rolename
[NOT IDENTIFIED | IDENTIFIED
BY password | EXTERNALLY | GLOBALLY];
2. 修改角色
ALTER ROLE rolename
[NOT IDENTIFIED | IDENTIFIED
BY password | EXTERNALLY | GLOBALLY];
3.为角色授予和取消权限
为角色授予系统权限的语法:
GRANT system_priv [, system_priv, ...]
TO role | PUBLIC [, role | PUBLIC, ...]
[WITH ADMIN OPTION];
注意:我们可以使用WITH ADMIN OPTION为角色授予系统权限,但是无法使用WITH GRANT OPTION为角色授予对象权限。
为角色授予对象权限的语法:
GRANT ALL [PRIVILEGES] | object_priv [, object_priv, ...]
ON [schema_name.]object_name
TO role | PUBLIC [, role | PUBLIC, ...];
为角色取消系统权限的语法:
REVOKE system_priv | role_name [, system_priv | role_name, ...]
FROM role | PUBLIC [,role | PUBLIC, ...];
为角色取消对象权限的语法:
REVOKE ALL [PRIVILEGES] | object_priv [, object_priv, ...]
ON [schema_name.]object_name
FROM role | PUBLIC [,role | PUBLIC, ...]
[CASCADE CONSTRAINTS]
4. 为用户授予和取消角色
GRANT role_name [, role_name, ...]
TO user_name | role | PUBLIC [, user_name | role | PUBLIC, ...]
[WITH ADMIN OPTION];
5. 设置用户的默认角色
一旦为某个用户授予了一个角色,就会自动将这个角色配置为默认角色。
6. 启动与禁用角色
SET ROLE ALL [EXCEPT role_name [,role_name] | NONE |
role_name [IDENTIFIED BY password] [, role_name [IDENTIFIED BY password, ...];
7. 删除角色
DROP ROLE role_name;
盖国强的这里的例子很好(略。好例子,连贯、顺序好:先举例,后理论)P122。不像其他书,上来先是讲什么是权限,权限的分类以及其中的细节(比如转授),最后才是最重要的例子(导致的结果是,还没有看到重点就已经晕掉了)。
如果用户需要连接数据库并创建数据表,那么至少需要获得至少两个授权:
CREATE SESSION 和 CREATE TABLE。
grant create session to <username>;
grant create table to <username>;
这里需要继续授予用户使用其表空间的权限
alter user <username> quota 10M on <tablespace_name>;
Oracle的权限可以分为两种:
系统权限
对象权限
查询权限,通过视图dba_sys_privs
select * from dba_sys_privs --(有488条记录)
进一步,可以查询和TABLE有关的权限
select distinct privilege from dba_sys_privs
where privilege like '%TABLE';
-----------
PRIVILEGE
1 ALTER ANY TABLE
2 BACKUP ANY TABLE
3 COMMENT ANY TABLE
4 CREATE ANY TABLE
5 CREATE TABLE
6 DELETE ANY TABLE
7 DROP ANY TABLE
8 FLASHBACK ANY TABLE
9 INSERT ANY TABLE
10 LOCK ANY TABLE
11 SELECT ANY TABLE
12 UNDER ANY TABLE
13 UPDATE ANY TABLE
------------
可以想象,如果数据库中存在大量用户,如果我们将这些权限一一授予这些用户,操作将会极其繁琐,
于是Oracle设计了一个新的技术:角色(Role)。
定义:角色是一系列权限的集合。
(有个权限的概念后)通常一个用户创建之后,我们授予用户两个角色就足够使用了,这两个角色是:CONNECT和RESOURCE。(Oracle在10g版本中对角色重新进行了定义)
grant connect, resource to user_name;
select * from dba_sys_privs where grantee='CONNECT';
select * from dba_sys_privs where grantee='RESOURCE';
select * from dba_sys_privs where privilege='UNLIMITED TABLESPACE';
UNLIMITED TABLESPACE这一权限是为了向后兼容而保留的,如果使用不当,则会对数据库造成严重影响。
P126盖国强,并参考备份与恢复一章。
为了更严谨的管理,可以回收用户的UNLIMITED TABLESPACE权限,然后对用户的空间进行单独授权。
7.3 利用配置文件控制资源的使用
略
第8章 管理数据库对象
In this chapter you will learn how to
• Create and modify tables
• Define constraints
• View the attributes of a table
• View the contents of a table
• Create indexes and views
• Name database objects
• Select appropriate datatypes
• Create and use sequences
8.1 用户、模式以及模式对象
用户是存在于数据库内,通过用户名被唯一标识的人。创建一个用户的同时也会创建一个模式。
模式(schema)由某个用户拥有的对象组成,模式最初为空。
命名空间(namespace)定义略。
不同命名空间内的对象能够共享相同的名称。
8.2 数据类型
略
8.3 创建表
ok
8.4 创建约束
ok
8.5 创建索引
ok
索引具有下列双重目的:增强检索记录的性能,实施约束。
8.6 创建视图
ok
视图实际上是一个查询。
8.7 创建序列
ok
第9章 操纵数据库数据
In this chapter you will learn how to
• Manipulate data through SQL using INSERT, UPDATE, and DELETE
• Use Data Pump to export data
• Use Data Pump to import data
• Load data with SQL Loader
• Create directory objects
9.1 事物的隔离性、读一致性以及提交
略 ACID测试
ok
In brief, any relational
database must be able to pass the ACID test.
A Is for Atomicity
The principle of atomicity states that all parts。。。
The whole of the SQL language is only a dozen or so commands. The ones we are
concerned with here are
• SELECT
• INSERT
• UPDATE
• DELETE
• COMMIT
• ROLLBACK
Remember that from release 9i Oracle has included a very efficient and powerful
MERGE command, but since the end result of a merge is identical to a combination
of INSERT, UPDATE, and DELETE, there is no need to discuss it here.
9.2 DML与完整性约束
表 各种DML语句引发的不同约束错误以及错误消息。
9.3 Data Pump
略
9.4 SQL*Loader
上机没有成功。
第10章 使用PL/SQL进行Oracle编程
In this chapter you will learn how to
• Identify PL/SQL objects
• Describe triggers and triggering events
• Identify configuration options that affect PL/SQL performance
略
第11章 保护Oracle数据库的安全
In this chapter you will learn how to
• Apply the principal of least privilege
• Manage default user accounts
• Implement standard password security features
• Audit database activity
• Register for security updates
略
第12章 配置Oracle互联
In this chapter you will learn how to
• Use Database Control to create additional listeners
• Use Database Control to create Oracle Net service aliases
• Use Database Control to configure connect-time failover
• Use Listener features
• Use the Oracle Net Manager to configure client and middle-tier connections
• Use tnsping to test Oracle Net connectivity
• Describe Oracle Net services
• Describe Oracle Net names resolution methods
Oracle Net过去被称为sqlnet,至今许多DBA仍然沿用了这个称呼。
12.1 Oracle客户/服务器的实现
图 通过若干层的分离使数据库免受用户的破坏
12.2 创建与管理侦听器
ok
侦听器在listener.ora文件中定义。默认存储位置是ORACLE_HOME/network/admin
注意:与其他用于配置Oracle Net的文件一样,listener.oar文件非常在意看似很小的语法问题(例如区分大小写、空格以及缩写)。因此,尽管没有其他理由,许多DBA仍然不愿手工编辑这个文件。Oracle提供了下列3个管理Oracle Net的图形工具:Database Control、Net Manager以及Net Configuration Assistant。
12.3 数据库注册(静态注册、动态注册)
动态注册实验:
1. Using SQL*Plus, connect to your instance as user SYSTEM, and issue the
commands
SQL> alter system set local_listener='ocp10g_1522';
SQL> alter system register;
2. From an operating system prompt, use lsnrctl to check that your instance has
registered dynamically with your list2 listener.
C:\> lsnrctl services list2
3. Test the alias by connecting using SQL*Plus.
SQL> connect system/oracle@ocp10g_1522;
4. Reset your instance to use the default listener by putting the local_listener
parameter back to default, and re-register it.
SQL> alter system set local_listener='';
SQL> alter system register;
12.4 侦听器控制实用程序(lsnrctl)
略。
12.5 名称解析技术
Oracle提供了下列4中名称解析技术:
Easy Connect,
local naming --- 本地名称解析方法(tnsnames.ora)
directory naming,
external naming.
使用本地名称解析方法时,用户可以为连接串提供一个Oracle Net服务别名,该别名通过一个本地文件tnsnames.ora被解析为完整的网络地址(包括协议、地址、端口、服务名或实例名)。
例子:建立会话
SQL> CONNECT SCOTT/TIGER 请求连接本地机器上的一个实例
SQL> CONNECT SCOTT/TIGER@OCP10G 请求连接远程机器上的一个实例
(其中OCP10G为连接串)
12.6 配置服务别名
可以使用的两个工具为:Database Control(服务器端)以及Net Manger(客户端)。
Net Manger菜单属性结构具有3个分支:
概要文件-Profile
服务命名-Service Naming
监听程序-Listeners
Net Manger(客户端)。
概要文件-Profile
概要文件-Profile
服务命名-Service Naming
服务命名-Service Naming
监听程序-Listeners
监听程序-Listeners
12.7 高级的连接选项
略P263
12.8 测试Oracle Net连接
1、 SQL*Plus
2、 通过别名尝试登录
3、 Net Manger内的test命令
4、 tnsping
见我的笔记
第13章 管理共享服务器
略,暂时用不到
第14章 管理数据库性能
In this chapter you will learn how to
• Troubleshoot invalid and unusable objects
• Gather optimizer statistics
• View performance metrics
• React to performance issues
14.1 修正无效的对象(Invalid Objects)
如果某个过程对象(例如一个存储的PL/SQL函数或者一个视图)变为无效,那么DBA不必执行任何操作。首次访问这个对象时,Oracle会尝试重新进行编译,而且有可能编译成功。
查询数据库中无效的对象,可以通过DBA_OBJECT视图:
select owner,object_name,object_type,status
from dba_objects
where status='INVALID';
修正无效的对象,需要使用ALTER … COMPILE命令来编译对象。
如果编译失败,通常需要首先使用DBA_DEPENDENCIES视图来确定编译错误的原因。
需要编译所有的无效对的对象时,可以使用补充的实用程序脚本。
Unix下的,
SQL> @?/rdbms/admin/utlrp
Windows下的,
SQL> @?\rdbms\admin\utlrp
14.2 修正无用的索引(Unusable Indexes)
如果某个过程对象(例如一个存储的PL/SQL函数或者一个视图)变为无效,那么DBA不必执行任何操作。首次访问这个对象时,Oracle会尝试重新进行编译,而且有可能编译成功。
但是某个索引由于某种原因变得无用,那么必须在能够使用这个索引之前,执行显式的修复操作。
在旧版本的Oracle数据库中,执行SQL语句时,如果指定会话试图执行无用的索引,那么就会立即返回一条错误消息,同时语句执行失败。10g版本的数据库则改变了这种方式,在10g版本中,如果某条语句试图使用无用的索引,那么这条语句会重新使用不需要该索引的执行计划。这样SQL语句的执行总是会成功,不过代价可能是性能的显著降低。上述方式由实例参数SKIP_UNUSABLE_INDEX控制。
查询变得无用的索引,通过DBA_INDEXES视图:
select owner, index_name, status from dba_indexes
where status='UNUSABLE';
修复无用的索引,需要使用ALTER INDEX … REBUILD命令重新创建该索引。
14.3 优化器统计(Optimizer Statistics)
任何一条SQL语句都可以通过许多不同的方式执行。对于性能来说,执行计划(execution plan)的选择十分重要。在Oracle数据库中,标准的做法是使用优化器(Optimizer Statistics)来选择执行计划。
优化器紧密依赖于一些统计量(statistics),从而能够评价众多可行的执行计划的效率以及选择某个执行计划。
统计量具有许多类型,其中主要有:
表统计量:DBA_TABLES视图中
列统计量:DBA_COLUMNS视图中
索引统计量:DBA_INDEXES以及INDEX_STATS视图中
对象统计量不是实时的,而是静态的。使用ANALYZE命令或者执行DBMS_STATS程序包中的过程能够手动的收集统计量,此外通过Database Control也能实现同样的功能。
注意:Oracle深信不应当专门收集统计量,而是应当自动化统计量的收集工作。如果数据库时使用DBCA创建的,那么就会将自动化的统计量收集配置为Scheduler管理的一个作业(第36章将对Scheduler进行详细讨论)。
14.4 性能指标(Performance Metrics)
Oracle提供了大约三百个动态性能视图(V$视图)。我们可以通过动态性能视图来访问与实例相关的以及与数据库特定区域相关的信息。
The dynamic performance views give access to a phenomenal amount of information about the instance, and (to a certain extent) about the database.
动态性能视图填充了来自实例或控制文件的信息;前缀为DBA、ALL、USER的视图填充了来自数据字典的信息。
动态性能视图在数据库启动阶段被创建,在指定实例的生存期内更新,在数据库关闭阶段被删除。这意味着动态性能视图包含了从数据库启动开始积累的值。因为关心的是所有的数据,所以动态性能视图无法告知特定期间发生的情况,而这段期间可能出现某些性能问题。基于这个原因,动态性能视图通常提供的是统计量而非指标。将这些统计量转换为指标是一个有一定技巧且比较费时的任务,不过10g版本的数据库通过提供自调整和性能监视使该任务变得更为简单。
As an example of a dynamic performance view, you cannot do better than V$SYSSTAT,
described here:
ocp10g> desc v$sysstat;
Name Null? Type
--------------------------------- -------- -------------
STATISTIC# NUMBER
NAME VARCHAR2(64)
CLASS NUMBER
VALUE NUMBER
STAT_ID NUMBER
This shows over three hundred statistics that are fundamental to monitoring activity:
ocp10g> select name, value from v$sysstat;
NAME VALUE
------------------------------ ----------
logons cumulative 356
logons current 34
opened cursors cumulative 154035
opened cursors current 5490
user commits 2502
user rollbacks 205
user calls 37574
recursive calls 6446648
recursive cpu usage 39263
session logical reads 4613746
session stored procedure space 0
<output truncated...>
Another critical view is V$SYSTEM_WAIT_CLASS, which summarizes the various
categories of problems that can cause sessions, or the whole database, to run slowly:
ocp10g> select wait_class,time_waited from v$system_wait_class
2 order by time_waited;
WAIT_CLASS TIME_WAITED
-------------------- -----------
Network 32
Application 44
Configuration 1545
Concurrency 4825
Commit 5212
Other 10483
System I/O 41787
User I/O 102743
Idle 13087012
This query shows that the worst problems since the instance started have been
“Idle” events. These are not problems: they are events such as server processes waiting
to receive SQL statements from user processes. The worst real problem is disk I/O
caused by user sessions, followed by disk I/O by the instance itself.
第15章 监视Oracle
In this chapter you will learn how to
• Set warning and critical alert thresholds
• Collect and use baseline metrics
• Use tuning and diagnostic advisors
• Use the Automatic Database Diagnostic Monitor (ADDM)
• Manage the Automatic Workload Repository
• Describe server-generated alerts
本章只是简单介绍,后面的章节将详细讨论。
15.1 自动工作负荷仓库(Automatic Workload Repository, AWR)
Oracle收集了大量与性能和动作的相关的统计信息。这些信息在内存中累加,并且被有规律的写入磁盘(也就是构成AWR的表)。最终这些信息会过期并被重写。
统计量收集的级别由实例参数STATISTICS_LEVEL控制,默认值是TYPICAL。
统计量在内存中(也就是在SGA内的数据结构中)积累。统计量被定时(默认为每小时一次)写入磁盘,也就是写入AWR。这被称为一次快照(snapshot)。只要生成了一个快照,MMON就会运行ADDM生成一个报告。
AWR是位于SYSAUX表空间内的一组表。这些表不能被重新定位,并且存在于SYSMAN模式中。
默认情况下,AWR快照保存7天,ADDM报告保存30天。
15.2 诊断与调整顾问程序
Oracle数据库预配置了一组顾问程序。
The Automatic Database Diagnostic Monitor (the ADDM)
The SQL Tuning Advisor
The SQL Access Advisor
The Memory Advisor
The Mean Time to Recover (MTTR) Advisor
The Segment Advisor
The Undo Advisor
15.3 服务器生成的告警
MMON进程还实现了服务器告警系统。这个进程会监视实例和数据库,如果某种指标越过了特定阈值,那么就会引发经过某个排队系统的告警信息。
第16章 管理撤销
In this chapter you will learn how to
• Monitor and administer undo
• Configure undo retention
• Guarantee undo retention
• Use the Undo Advisor
• Describe the relationship between undo and transactions
• Size the undo tablespace
对于数据库管理员来说,在9i版本之前,撤销管理是一个非常繁琐的问题。从9i版本开始,DBA可以选择自动撤销管理。
16.1 撤销数据的原因与实质
Oracle使用撤销段保证关系数据库的“原子性”、“一致性”以及“隔离性”。
撤销段在视图DBA_SEGMNETS中作为“TYPE 2 UNDO”的段类型列出,其中的ROLLBACK段也就是“TYPE 1 UNDO”,回滚段(ROLLBACK SEGMENT)只被保留用于向后兼容。
16.2 创建撤销表空间
ok
16.3 管理撤销
1、与撤销相关的错误:
error ORA-1555, snapshot too old.
error ORA-30036, unable to extend segment in undo tablespace.
2、下列3个初始化参数可以控制撤销:
UNDO_MANAGEMENT,
UNDO_TABLESPACE,
UNDO_RETENTION.
SQL> show parameter UNDO
NAME TYPE VALUE
------------------- ------ --------
undo_management string AUTO
undo_retention integer 900
undo_tablespace string UNDOTBS1
3、调整与监视撤销表空间
1. Connect to your instance with SQL*Plus as user SYSTEM.
2. Set up your session for displaying dates conveniently.
alter session set nls_date_format='dd-mm-yy:hh24:mi:ss';
3. Query V$UNDOSTAT as follows:
select begin_time,
end_time,
undoblks,
maxquerylen,
ssolderrcnt,
nospaceerrcnt
from v$undostat;
4. Interpret the results of the query. Note that the view has one row per tenminute
interval, showing you how much undo was generated, in blocks; how
long the longest query was, in seconds; and whether there were any “snapshot
too old” errors, or errors from transactions running out of undo space.
5. Calculate the minimum necessary size in bytes for your undo tablespace that
will prevent errors, given your current activity data, with this query:
select
(select max(undoblks)/600 * max(maxquerylen) from v$undostat)
*
(select value from v$parameter where name='db_block_size')
from dual;
第17章 处理锁定
In this chapter you will learn how to
• Detect and resolve lock conflicts
• Manage deadlocks
• Describe the relationship between transactions and locks
• Explain lock modes within the Oracle Database 10g
17.1 共享锁与排他锁
排他锁,也叫独占锁(Exclusive Locks):“排他锁”锁定某条记录的的目的是为了防止其他会话对其进行更新,但是其他会话可以随时执行读取操作。
共享锁(Shared Locks):“共享锁”锁定某个表的目的是为了防止另一个会话获得这个表上的排他锁(再以存在共享锁的情况下无法再获得排他锁)。
17.2 DML锁与DDL锁
所有DML语句都至少需要两种锁定:受影响记录上的排他锁(独占锁),以及包含受影响记录的表上的共享锁。
执行DDL需要所涉及对象上的排他锁。
17.3 排队机制(The Enqueue Mechanism)
请求锁定需要排队。
如果不希望某个会话在无法获得锁定的情况下进行排队,那么避免排队的唯一方式是:SELECT … FOR UPDATE命令的WAIT或者NOWAIT子句。
17.4 锁定争用(Lock Contention)
锁定争用是由用户同时访问相同的数据而导致的。设计不当的软件会是这种问题更加严重,但是大体上锁定争用是正常数据库活动的一部分。
不过在紧急情况下,DBA能够通过终止过长时间拥有过多锁定的会话来解决锁定争用问题。
alter system kill session '138,6';
17.5 死锁(Deadlocks)
略
死锁是一种程序设计错误。发生死锁错误的原因是代码试图执行在逻辑上不可能的操作。
注意:除了报告死锁的发生之外,DBA不需要完成针对死锁的操作。死锁问题是由Oracle数据库自动解决的。
第18章 配置数据库的备份与恢复
In this chapter you will learn how to
• Describe the basics of database backup, restore, and recovery
• Identify the types of failure that may occur in an Oracle database
• Describe ways to tune instance recovery
• Identify the importance of checkpoints, redo logfiles, and archived logfiles
• Configure archivelog mode
• Configure a database for recoverability
18.1 备份与恢复问题
暂时略,
补充针对DBA的一些指导意见,非常重要,见我的笔记
18.2 失败类别
略 见我的笔记
1、 语句失败
2、 用户进程失败
3、 网络失败
4、 用户错误
5、 介质失败
6、 实例失败
实例失败是实例的无序关闭,通常称为崩溃(crash)。
18.3 实例恢复
大体上,实例恢复只不过是使用联机重做日志的内容将数据库高速缓存区重新构建至崩溃前的状态。完成上诉操作后,就能打开数据库。略,见我的笔记
实例恢复是自动完成的。怎么怎样才能调用实例恢复呢,答案是使用START UP命令。
与检查点的关系略,见我的笔记
18.4 实例恢复与MTTR
本练习实例说明了检查点对实例失败后MTTR的影响。
18.5 MTTR顾问程序
略
18.6 配置数据库的可恢复性
略,见我的笔记
为了保证数据库库具有最大程度的可靠性,必须复用控制文件与联机重做日志,必须在归档模式中运行数据库,同时也必须复用归档日志文件,此外还必须定期备份数据库(第19章详细介绍备份,第24章还将详细讨论)。
控制文件的任何副本损坏都会导致数据库崩溃。
If a member of a redo logfile group is damaged or missing, the database will remain
open if there is a surviving member. This contrasts with the controlfile, where damage
to any copy will crash the database immediately. Similarly, groups can be added or
removed and members of groups can be added or moved while the database is open,
as long as there are always at least two groups, and each group has at least one valid
member.
18.6.1 复用控制文件
这个地方需要仔细研究,暂时跳过
应该可以使用RMAN恢复???
未上机。报这个错误:
复用控制文件:
1、首先关闭数据库
2、使用操作系统命令复制或移动控制文件。
3、在nomount模式中启动数据库
4、执行alter system set control_files=… 命令.
5、打开数据库
SQL> conn /as sysdba
已连接。
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup nomount
ORACLE 例程已经启动。
Total System Global Area 121634816 bytes
Fixed Size 787748 bytes
Variable Size 95419100 bytes
Database Buffers 25165824 bytes
Redo Buffers 262144 bytes
SQL> alter system set control_files ="D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\CONTROL01.CTL, D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\CONTROL02.CTL, D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\CONTROL03.CTL, D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\CONTROLbk.CTL";
ORA-00972: 标识符过长
SQL> startup nomount
ORACLE 例程已经启动。
Total System Global Area 121634816 bytes
Fixed Size 787748 bytes
Variable Size 95419100 bytes
Database Buffers 25165824 bytes
Redo Buffers 262144 bytes
SQL> alter system set control_files ="D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\C
ONTROL01.CTL, D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\CONTROL02.CTL";
alter system set control_files ="D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\CONTRO
L01.CTL, D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\CONTROL02.CTL"
*
第 1 行出现错误:
ORA-02095: ????????????
SQL> startup mount
ORA-01081: ????????? ORACLE - ??????
SQL> alter database open;
alter database open
*
第 1 行出现错误:
ORA-01507: ??????
SQL> startup mount
ORA-01081: ????????? ORACLE - ??????
SQL>
书上的例子是:
18.6.2 保护联机重做日志
搜“复用重做日志”的相关命令 。大概是add redo log member …
18.6.3 将数据库转换至归档(archivelog)模式
ok
第19章 备份Oracle数据库
In this chapter you will learn how to
• Create consistent database backups
• Back up your database without shutting it down
• Create incremental backups
• Automate database backups
• Monitor the flash recovery area
• Describe the difference between image copies and backup sets
• Describe the different types of database backups
• Back up a controlfile to trace
• Manage backups
19.1 备份工具
直接使用操作系统实用程序(例如Windows操作系统中的copy或Winzip,Unix操作系统中的cp、tar、或者cpio)就可以进行备份操作。但是,Oracle强烈建议使用RMAN(Recovery Manager)。
19.2 概念与术语
19.2.1 全部备份与部分部分(Whole or Partial Backups)
通常,如果数据库没有在归档模式中运行,那么总是应当进行全部备份。
19.2.2 完整备份与增量备份(Full or Incremental Backups)
19.2.3 脱机备份与联机备份(Offline or Online Backups)
即冷备份与热备份;一致备份与不一致备份。
术语“一致”要求读者理解Oracle的体系结构:为了使某个数据文件是一致的,这个数据文件中的所有文件块必须都执行过检查点进程并被关闭。在正常的运行中,数据库是不一致的。许多被更行的数据被复制至数据库高速缓存区,但是尚未写回磁盘。只有使用IMMEDIATE、TRANSACTIONAL或者NORMAL关闭选项干净地关闭数据库,即有序地关闭数据库,才能保证数据文件的一致性。
19.2.4 映像副本与备份集(Image Copies or Backup Sets)
映像副本(Image Copies):是某个文件的备份,并且每个字节都与原文件相同。显然,映像副本不可能是增量备份,也不可能在磁带设备上生成。
备份集(Backup Sets):是由RMAN生成的一种专有结构。备份集可以拥有增量备份;备份集不会包含空的数据块;备份集可以启用数据压缩。
19.3 RMAN的设置
本节针对的是Database Control上的RMAN的设置。
19.3.1 设备的设置
19.3.2 备份集的设置
19.3.3 策略的设置
19.4 运行数据库的一个完整备份
--全备份脚本_plus_archivelog
run{
backup full tag 'lvhj_plus_archivelog' database
include current controlfile format 'd:\backup\lvhjfull_%d_%t_%r_%s'
plus archivelog format 'd:\backup\lvhjarch_%d_%t_%r_%s' delete all input;
}
19.5 控制文件的备份(使用SQL*Plus备份控制文件以便进行跟踪)
见我的笔记
Using SQL*Plus, perform a controlfile backup-to-trace, and inspect the generated file.
1. Connect with SQL*Plus as user SYSTEM.
2. Issue this command:
SQL> alter database backup controlfile to trace;
3. Locate your user dump destination.
SQL> show parameters user_dump_dest;
4. From an operating system prompt, change to the user dump destination
directory.
5. Identify the newest file in the directory. For example, on Windows use
dir /od
or on Unix,
ls -ltr
The newly generated trace fi le will be the last fi le listed.
6. Open the trace file with any editor you please and study the contents. The
critical section is the CREATE CONTROLFILE command, which will resemble
this:
CREATE CONTROLFILE REUSE DATABASE "OCP10G" NORESETLOGS ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 454
LOGFILE
GROUP 1 (
'C:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\REDO01.LOG',
'C:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\REDO01B.LOG'
) SIZE 10M,
GROUP 2 (
'C:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\REDO02.LOG',
'C:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\REDO02B.LOG'
) SIZE 10M,
GROUP 3 (
Chapter 19: Backing Up an Oracle Database
15
PART I
'C:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\REDO03.LOG',
'C:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\REDO03B.LOG'
) SIZE 10M
-- STANDBY LOGFILE
DATAFILE
'C:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\SYSTEM01.DBF',
'C:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\UNDOTBS01.DBF',
'C:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\SYSAUX01.DBF',
'C:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\USERS01.DBF',
'C:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\EXAMPLE01.DBF',
'C:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\UNDO2-01.DBF'
CHARACTER SET WE8MSWIN1252
;
19.6 管理RMAN备份
RMAN的默认备份地位闪回恢复区。
闪回恢复区受两个参数:
DB_RECOVERY_FILE_DEST 和DB_RECOVERY_FILE_DEST_SIZE的控制。这两个参数都不具有默认值,可是在使用DBCA创建数据库时,DBCA会将DB_RECOVERY_FILE_DEST参数设置为ORACLE_HOME主目录中的flash_recovery_erea目录,同时会将DB_RECOVERY_FILE_DEST_SIZE参数设置为2G字节。
通过视图v$recovery_file_dest可以监视闪回恢复区。
SQL> select * from v$recovery_file_dest;
NAME SPACE_LIMIT SPACE_USED SPACE_RECLAIMABLE NUMBER_OF_FILES
-------------------------------------------------------------------------------- ----------- ---------- ----------------- ---------------
D:\oracle\product\10.1.0\flash_recovery_area
这里有问题,和书上的查询结构不一样,需上网查一下
第20章 恢复Oracle数据库
In this chapter you will learn how to
• Recover from loss of a controlfile
• Recover from loss of a redo logfile
• Recover from loss of a system-critical datafile
• Recover from loss of a nonsystem-critical datafile
20.1 回复结构与进程
在介质失败后,根据受损文件的类型,存在不同的恢复方法。
恢复受损的控制文件
恢复受损的控制文件恢复受损的复用联机重做日志
恢复受损的数据文件
见我的笔记
In the Oracle environment, “restore” means to replace a damaged or missing file with a backup; “recover” means to synchronize the file with the rest of the database by use of archivelogs.
书P392
20.2 恢复受损的控制文件
事实上,控制文件受损时,实例会立即终止。此时,DBA第一反应依然是尝试启动崩溃的实例。启动将在NOMOUNT模式中失败,同时会给出相应的错误消息。
处理方法有多种,比较好的方法是:将幸存的控制文件复制至一个新的文件,然后编辑CONTROL_FILES初始化参数,从而将对受损文件的引用修改为对新文件的引用。
这个地方需要仔细研究,暂时跳过
应该可以使用RMAN恢复???
未上机。报这个错误:
复用控制文件:
1、首先关闭数据库
2、使用操作系统命令复制或移动控制文件。
3、在nomount模式中启动数据库
4、执行alter system set control_files=… 命令.
5、打开数据库
SQL> conn /as sysdba
已连接。
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup nomount
ORACLE 例程已经启动。
Total System Global Area 121634816 bytes
Fixed Size 787748 bytes
Variable Size 95419100 bytes
Database Buffers 25165824 bytes
Redo Buffers 262144 bytes
SQL> alter system set control_files ="D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\CONTROL01.CTL, D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\CONTROL02.CTL, D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\CONTROL03.CTL, D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\CONTROLbk.CTL";
ORA-00972: 标识符过长
SQL> startup nomount
ORACLE 例程已经启动。
Total System Global Area 121634816 bytes
Fixed Size 787748 bytes
Variable Size 95419100 bytes
Database Buffers 25165824 bytes
Redo Buffers 262144 bytes
SQL> alter system set control_files ="D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\C
ONTROL01.CTL, D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\CONTROL02.CTL";
alter system set control_files ="D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\CONTRO
L01.CTL, D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\CONTROL02.CTL"
*
第 1 行出现错误:
ORA-02095: ????????????
SQL> startup mount
ORA-01081: ????????? ORACLE - ??????
SQL> alter database open;
alter database open
*
第 1 行出现错误:
ORA-01507: ??????
SQL> startup mount
ORA-01081: ????????? ORACLE - ??????
SQL>
20.3 恢复受损的复用联机重做日志
ok
20.4 恢复受损的数据文件
第27、28章将详细讨论
见我的笔记。
第21章 管理Oracle数据库中的全球化特性
In this chapter you will learn how to
• Customize language-dependent behavior for the database and individual sessions
• Specify different linguistic sorts for queries
• Use datetime datatypes
• Query data using case-insensitive and accent-insensitive searches
• Obtain Globalization support configuration information
21.1 全球化特性
21.1.1字符集(Character Sets)
字符集(Character Sets)P408
21.1.2语言支持
21.1.3地区支持
21.1.4 其他NLS设置
21.2 使用全球化支持功能
我们可以在下列任一级别或全部5个级别上指定全球化:
The database
The instance
The client environment
The session
The statement
这些级别按照从低到高的顺序列出。
21.2.1 选择字符集
在数据库创建阶段,选择数据库字符集以及DB_BLOCK_SIZE参数是我们需要作出的最重要的两个决定。其余设置可以在数据库创建之后修改,而这两个参数DB_BLOCK_SIZE参数绝对不能改变,而数据库字符集虽然从理论上可以被改变,但是事实上不可行。
21.2.2 改变数据库字符集
数据库字符集虽然从理论上可以被改变,但是事实上不可行。
Oracle提供了两个有助于解决字符集修改的工具:数据库字符集扫描程序(Database Character Set Scanner)和语言与字符集文件扫描程序(Language and Character Set File Scanner)。在Unix系统中为csscan和lcsscan。
21.2.3 数据库内的全球化
select * from nls_database_parameters;
21.2.4 实例级别的全球化
select * from nls_instance_parameters;
两个视图的区别:
select * from nls_database_parameters
minus
select * from nls_instance_parameters;
PARAMETER VALUE
----------------- -------------------
NLS_CALENDAR GREGORIAN
NLS_CHARACTERSET ZHS16GBK
NLS_COMP BINARY
NLS_CURRENCY $
NLS_DATE_FORMAT DD-MON-RR
NLS_DATE_LANGUAGE AMERICAN
NLS_DUAL_CURRENCY $
NLS_ISO_CURRENCY AMERICA
NLS_NCHAR_CHARACTERSET AL16UTF16
NLS_NUMERIC_CHARACTERS .,
NLS_RDBMS_VERSION 10.1.0.2.0
NLS_SORT BINARY
NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM
NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZR
NLS_TIME_FORMAT HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZR
16 rows selected
21.2.5 客户端环境设置
注意:DBA完全不能控制终端用户对NLS_LANG环境变量的设置。如果应用程序容易受到全球化的影响,那么编程人员就应当考虑到这个问题,同时在会话内控制全球化设置。
21.2.6 会话级别的全球化设置
SQL> select * from nls_session_parameters;
PARAMETER VALUE
------------------------------ ---------------
NLS_LANGUAGE SIMPLIFIED CHINESE
NLS_TERRITORY CHINA
NLS_CURRENCY ¥
NLS_ISO_CURRENCY CHINA
NLS_NUMERIC_CHARACTERS .,
NLS_CALENDAR GREGORIAN
NLS_DATE_FORMAT DD-MON-RR
NLS_DATE_LANGUAGE SIMPLIFIED CHINESE
NLS_SORT BINARY
NLS_TIME_FORMAT HH.MI.SSXFF AM
NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZR
NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZR
NLS_DUAL_CURRENCY ¥
NLS_COMP BINARY
NLS_LENGTH_SEMANTICS BYTE
NLS_NCHAR_CONV_EXCP FALSE
17 rows selected
下面的两种方法可以得到相同的结果:
SQL> alter session set nls_date_format='dd.mm.yyyy';
Session altered.
SQL> execute dbms_session.set_nls('nls_date_format','''dd.mm.yyyy''');
PL/SQL procedure successfully completed.
21.2.7 语句级别的全球化设置
21.3 语言排序与选择
ok
21.4 使用时区
ok
第22章 配置侦听器的安全性
In this chapter you will learn how to
• Secure the listener
• Remove the default EXTPROC entry
• Add a separate listener to handle external procedure calls
22.1 保护侦听器的安全
22.1.1 侦听器的操作系统身份验证
侦听器管理命令默认的安全性基于操作系统用户ID。这种情况完全类似于数据库SYSDBA连接的操作系统身份验证,这种身份验证会跳过口令文件身份验证。
22.1.2 侦听器的口令身份验证
通过Net Manager、Database Control、lsnrctl实用程序或者手工编辑listener.ora文件都可以启用或者设置侦听器的口令。
22.2 控制对数据库的访问
ok
22.3 外部过程
暂时用不到。
第23章 开始使用Recovery Manager
In this chapter you will learn how to
• Configure database parameters that affect RMAN operations
• Change RMAN default settings with CONFIGURE
• Manage RMAN’s persistent settings
• Start RMAN utility and allocate channels
23.1 RMAN特性
23.2 RMAN的组件
略
23.2.1 RMAN可执行程序
23.2.2目标数据库
23.2.3 服务器进程与通道
P450
23.2.4 RMAN存储仓库(repository)
23.2.5 恢复目录(Recovery Catalog)
23.2.6 介质管理器(Media Management Library)
23.2.7 辅助数据库(Auxiliary Database)
23.2.8 闪回恢复区(Flash Recovery Area)
23.3 配置RMAN
23.3.1 环境变量与实例参数
SQL> alter session set NLS_DATE_FORMAT='yyyy-mm-dd hh24:mi:ss';
日期/时间格式不仅对于RMAN输出的显示十分重要,而且也作为格式掩码用于某些操作(例如还原与回复操作)的日期/时间参数。
另一个非常重要的参数是NLS_LANG。这个变量能够向RMAN通知数据库字符集。如果数据库被加载或打开,那么就不存在任何问题,RMAN能够通过读取控制文件发现所使用的数据库字符集。但是,如果数据库只处于nomount模式中,那么RMAN会认定数据库使用默认的US7ASCII,而这可能是错误的。为了避免可能出现的问题,就需要在启动RMAN之前设置
To avoid possible problems, set the variable
before launching RMAN. For example,
$ export NLS_LANG=american_america.we8iso8859p15
on Unix, or
C:> set NLS_LANG=american_america.we8iso8859p15
on Windows.
ok,需要再找一些资料扩充一下本实验
23.3.2 连接数据库
C:\Documents and Settings\Owner>rman target /
恢复管理器: 版本10.1.0.2.0 - Production
Copyright (c) 1995, 2004, Oracle. All rights reserved.
连接到目标数据库: OCP10G (DBID=3542321520)
RMAN>
一个更加详细的例子:
C:\> rman target sys/oracle@ocp10g catalog rman/rman@catdb
23.3.3 配置RMAN的永久设置
注意:SHOW命令被格式化为一个脚本。我们可以复制粘贴、编辑和执行这些行。
23.3.4 通道分配
23.3.5 RMAN备份的内容
控制文件的备份:
INCLUDE CURRENT CONTROLFILE
CONFIGURE CONTROLFILE AUTOBACKUP ON
控制文件的还原:
RESTORE CONTROLFILE FROM AUTOBACKUP
23.3.6 配置备份的保留
保留策略存在两种选项:冗余级别、恢复窗口。
默认为冗余级别
CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
23.3.7 重写默认配置
第24章 使用RMAN备份数据库
In this chapter you will learn how to
• Use the RMAN BACKUP command to create backup sets and image copies
• Enable block change tracking
• Manage the backups and image copies taken with RMAN with the LIST and REPORT commands
24-1 创建备份集
--备份单个表空间的脚本
run{
backup as backupset
tag 'lvhj_rman_tablespace'
format 'd:\backup\lvhj_%d_%t_%r_%s_%u.dbf'
tablespace eygle;
}
--全备份脚本_plus_archivelog
run{
backup full tag 'lvhj_plus_archivelog' database
include current controlfile format 'd:\backup\lvhjfull_%d_%t_%r_%s'
plus archivelog format 'd:\backup\lvhjarch_%d_%t_%r_%s' delete all input;
}
--RMAN可以使用下列几种方式备份控制文件:
1、backup current controlfile format 'd:\backup\control_111.ctl';
backup as backupset current controlfile format 'd:\backup\control_222.ctl';
2、backup as copy current controlfile format 'd:\backup\control01.ctl';
3、backup tablespace system include current controlfile;
4、configure controlfile autobackup on;
--增量备份
首先执行0级备份:
RMAN> configure channel 1 device type disk format 'd:\backup\bk_incremental_%u';
RMAN> backup incremental level=0 database plus archivelog delete input;
然后修改数据,进行一些变动
再来执行1级备份:
RMAN> backup incremental level=1 database plus archivelog delete input;
24-2管理与监视RMAN备份(list、report与delete命令)
list:
list backup;
list copy;
list backup of database;
list backup of datafile1;
list backup of tablespace eygle;
list backup of archivelog all;
在上面的示例中,最后都可以添加关键字VERBOSE(这是默认应用的关键字)或SUMMARY。
为了修改LIST命令输出中日期与时间格式,需要在启动RMAN可执行程序之前,设置环境变量NLS_DATA_FORMAT。
$ export NLS_DATE_FORMAT='dd-mm-yy hh24:mi:ss'
C:\> set NLS_DATE_FORMAT='dd-mm-yy hh24:mi:ss'
report与delete:
report schema;
report need backup;
组合命令:
第一条命令能够应用已配置的保留策略并列出不再需要的所有备份集与映像副本;
第二条命令则可以删除认为不再需要的备份。
report obsolete;
delete obsolete;
report obsolete redundancy 2;
delete bosolete redundancy 2;
delete命令可以通过数字或标记来删除单独的备份
delete backupset 5;
第25章 诊断Oracle数据库的问题
In this chapter you will learn how to
• Use the alert log and database trace files for diagnostic purposes
• View alerts using Enterprise Manager
• Adjust thresholds for tracked metrics
• Control the size and location of trace files
25.1 告警日志
告警日志的位置由实例参数BACKGROUND_DUMP_DEST确定;告警日志的名称为alert_<SID>.log,其中SID是实例的名称。
告警日志中的报告消息包含了下列内容:
All startup and shutdown commands, with the time and mode of the operation. The startup times will include the timings of the transitions from NOMOUNT to MOUNT to OPEN, which are of vital importance for assessing whether the mean-time-to-recover figure matches standards agreed with the users.
All operations involving physical structures: ALTER DATABASE commands such as creating, dropping, and renaming datafiles and redo logs. Resize operations on datafiles and taking datafiles on and offline are also recorded.
Tablespace operations, such as DROP and CREATE. Also putting tablespaces into and out of hot backup mode for user-managed backups.
All log switches and archives, including the names of the affected files.
The nondefault initialization parameters used to start the instance. Also any subsequent ALTER SYSTEM commands that change parameters.
因此,告警日志包含了影响数据库和实例的各种操作的连续历史记录以及告警与错误。
25.2 后台跟踪文件(Background Trace Files)
Oracle实例的后台进程会在遇到问题时将跟踪文件写至BACKGROUND
_DUMP_DEST参数所指定的目录。
与告警日志不同的是,跟踪文件始终意味着错误(通常是重要的错误)。
25.3 服务器生成的告警
25.3.1 告警的类型
告警具有两种形式:阈值告警和非阈值告警。阈值告警(threshold)是指经过一段时间积累而导致的情景(例如表空间告警)。因为这些告警会一直持续直至被清除,所以也被称为有状态(stateful)告警。非阈值(nonthreshold)告警会通知所发生的不可预期时间(例如快照过旧)。出现这种错误时,错误需要被立即解决,同时告警也将成为历史。因为这些告警不会持续(一旦出现就会消失),所以也被称为无状态(stateless)告警。
V$ALERT_TYPE视图列出了能够配置的告警的指标。
SQL> select distinct(internal_metric_category)
from v$alert_types;
INTERNAL_METRIC_CATEGORY
---------------------------------Database_Resource_Usage
Recovery_Area
Snap_Shot_Too_Old
Suspended_Session
UserBlock
configuration
file
instance_efficiency
instance_throughput
problemTbsp
rac_global_cache
service
sga_pool_wastage
system_response_time_per_call
wait_bottlenecks
wait_sess_cls
17 rows selected
25.3.2 告警系统的体系结构
服务器告警系统非常有效的原因在于——服务器告警系统使用了内存中能够直接访问的统计量,而不需要向查询视图一样将信息通过某个V$视图转移至会话。告警写入任何订阅客户都能够读取的队列,并且这些客户能够基于所读取的告警执行适当的动作。因此,服务器能够在内部自动地监视自身。
最后需要指出的一点是,如果队列存在问题,那么告警系统仍然能够运行,此时消息会被写入告警日志。只有在这个时候,告警日志和服务器告警系统才会发生联系。
也就是说,告警日志和服务器告警系统完全分离。
25.3.3 查看告警信息
查看告警信息,可以通过两个视图:dba_outstanding_alerts 和dba_alert_history。
25.3.4 建立通知规则
25.3.5 编辑阈值
DBMS_SERVER_ALERT能够提供接口,这个程序包所包含的SET_THRESHOLD过程能够为发出警告告警(warning alert)和临界告警(critical alert)设置标准(set the criteria)。
25.4 用户跟踪文件(User Trace Files)
后台跟踪文件时发生问题时自动生成的。用户跟踪文件只能在需要跟踪会话实际操作的时候根据要求生成。通常,用户跟踪文件用来调整应用程序。
有两个级别的跟踪:实例级别的SQL跟踪、会话级别的SQL跟踪。
通过Database Control启用跟踪更为容易。
第26章 恢复非关键的损失
In this chapter you will learn how to
• Recover temporary tablespaces
• Recover a redo log group member
• Recover index tablespaces
• Recover read-only tablespaces
• Re-create the password file
在Oralce中,某些文件受损不必使用还原与恢复例程,并且不会导致实例终止。这样的损失被认为是“非关键的” ,非关键的文件不必还原,而是可以被替换。
关键文件是组成SYSTEM表空间以及当前活动的撤销表空间。
26-1 恢复受损的临时表空间
我们不需要备份临时表空间,事实上RMAN从不会备份临时表空间。
处理临时数据时不会生成撤销或重做。
查看临时表空间的及其临时文件的大小
select * from dba_temp_files
查看用户的临时表空间
select username,temporary_tablespace from dba_users
虽然无法备份临时文件,但是可以重建临时文件。
方法一:
1、在受损的临时表空间内添加另一个临时文件。
alter tablespace temp add tempfile
'D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\TEMP02.DBF' size 1024m;
2、将受损的临时文件脱机。
alter database tempfile
'D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\TEMP01.DBF' offline;
3、删除受损的临时文件。
alter database tempfile
'D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\TEMP01.DBF' drop;
方法二:
1、创建一个新的临时表空间。
create temporary tablespace temp_new tempfile
'D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\TEMP03.DBF' size 1024m;
2、通过ALTER DATABASE命令将用户切换到这个新的临时表空间。
alter database default temporary tablespace temp_new;
3、删除受损的临时表空间。
drop tablespace temp including contents and datafiles;
26-2 恢复受损的联机重做日志
查询联机重做日志文件组(针对文件组)
select * from v$log;
查询联机重做日志文件(针对每个成员)
select * from v$logfile order by group#
因为无法备份联机重做日志文件,所以一旦某个成员受损,这个成员(也就是联机重做日志文件)就无法被还原,但是却能够使用其他成员进行替换。
方法一:
如果只有文件受损而磁盘未受损,使用clear logfile命令删除已有的日志文件,并创建新的日志文件。
alter database clear logfile group 1;
方法二:
如果磁盘受损,那么由于oralce无法再原有位置创建文件,因此clear logfile命令将会失败。在这种情况下,需要先使用DROP命令清除原始的成员,如果该成员依然存在,则进行物理删除,然后使用ADD命令在不同的磁盘位置添加一个替换的成员。
alter database drop logfile member
'D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\REDO01.LOG';
在操作系统下,如果该成员依然存在,则进行物理删除:
del D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\REDO01.LOG
alter database add logfile member
'D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\NEWDIR\REDO01.LOG' to group 1;
26-3 恢复受损的索引表空间
如果某个索引不可用,那么几乎所有的DML操作都会锁定相应的表:也就是说,无法执行任何插入或者删除的操作,并且影响被索引的列的更新操作会失败。
虽然如此,但是在某些情况下重建索引比还原与恢复包含这些索引的表空间更为快捷。此时,索引可以视为“不重要的” 数据,并且不必包含在备份与恢复例程中。
尽管索引被视为不重要的数据,但是专门为索引段创建一个或多个表空间却是至关重要的。总之,这种做法通常被认为是一种良好的习惯。
可以用下面的语句检查索引数据是不是索引表空间内的唯一数据(假定索引表空间名为INDX):
select owner,segment_name,segment_type,tablespace_name from dba_segments
where tablespace_name='INDX' and segment_type<>'INDEX';
索引表空间数据文件受损会在告警日志和后台跟踪文件显示消息以及在动态性能视图中插入条目。
select name,status from v$datafile;
select * from v$recover_file
实验:
创建一个索引表空间:
create tablespace indx datafile
'D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\indx01.DBF' size 10m;
新建一个表,并且创建索引:
create table indtest (c1 number);
create index ind1 on indtest(c1) tablespace indx;
仿真索引数据文件受损:
alter database datafile
'D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\indx01.DBF' offline drop;
如果索引不可用,那么针对此表的DML操作无法执行:
insert into indtest values(1);
这时会报错ORA-00376和ORA-01110。
删除新建的索引表空间:
drop tablespace indx including contents and datafiles;
重建索引表空间和索引:
create tablespace indx datafile
'D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\indx01.DBF' size 10m;
create index ind1 on indtest(c1) tablespace indx;
删除新建的表空间和表:
drop tablespace indx including contents and datafiles;
drop table indtest;
26-4 恢复受损的只读表空间
当将某个表空间设置为只读时(ALTER TABLESPACE tablespace_name READ ONLY),数据文件会执行检查点进程(所有的脏缓冲区都被写至磁盘),当前的系统改变号(SCN)会被标注,同时存储了SCN的数据文件头部被冻结。
某个文件可用的一个前提是:这个文件应当与数据库的其余部分同步,也就是说数据文件头部的SCN是最新的。只读表空间不适用于上述规则。即使SCN是过时的,Oracle仍然能够打开只读表空间数据文件。但是,我们无法对这种文件进行写操作。
为什么可以从只读表空间内清除对象?这是因为drop命令只是更新数据字典,但是不更新对象本身。
注意:在将某个只读表空间的状态从只读变化为读/写时,必须立即生成这个表空间的新备份。
26-5 恢复受损的口令文件
搜一下“重建口令文件”的命令。
第27章 数据库的不完全恢复
In this chapter you will learn how to
• Recover the controlfile
• Explain reasons for incomplete recovery
• Perform incomplete recovery using Enterprise Manager
• Perform incomplete recovery using RMAN
• Perform incomplete recovery using SQL
• Perform database recovery following a RESETLOGS operation
27.1 完全恢复
完全恢复具有下列4个步骤:
1、 使受损的数据文件脱机。
2、 还原受损的数据文件。
3、 恢复受损的数据文件。
4、 使已恢复的数据文件联机。
--完全恢复
run{
startup mount;
restore database;
recover database;
alter database open;
}
--完全恢复(针对单个表空间)
run{
sql "alter tablespace eygle offline immediate";
restore tablespace eygle example;
recover tablespace eygle example delete archivelog;
sql "alter tablespace eygle online";
}
--备份单个表空间的脚本
run{
backup as backupset
tag 'lvhj_rman_tablespace'
format 'd:\backup\lvhj_%d_%t_%r_%s_%u.dbf'
tablespace eygle;
}
--全备份脚本_plus_archivelog
run{
backup full tag 'lvhj_plus_archivelog' database
include current controlfile format 'd:\backup\lvhjfull_%d_%t_%r_%s'
plus archivelog format 'd:\backup\lvhjarch_%d_%t_%r_%s' delete all input;
}
27.2 需要进行不完全恢复的场合
通常,下列两种原因会导致执行不完全恢复:
无法进行完全恢复
有意丢失某些数据(用户误操作导致了错误的数据)。
27.3 不完全恢复的方法
不完全恢复具有下列4个步骤:
1、 加载数据库。
2、 还原所有数据文件,同时可以选择还原控制文件。
3、 将数据库恢复至某个时间点、序列或系统改变号SCN。
4、 使用RESETLOGS打开数据库。
5、 完整备份数据库
不完全恢复的最优方法:P526
在开始不完全恢复之前,要执行的操作时关闭数据库并进行完整备份。 … 一旦认定需要进行不完全恢复时就立即关闭数据库是至关重要的。
附对应的英文:
As with complete recovery, the best practice is indeed to practice. The procedure is
completely reliable, but the slightest mistake may be disastrous. It is vital to follow
all the steps with great care. When doing an incomplete recovery, you do not want
to have any doubts about the procedure to be followed; it is frequently said that
most problems with incomplete recovery are caused by the DBA making a mistake.
Before starting an incomplete recovery, if at all possible perform a whole closed
backup of the database. This means that whatever happens during the restore and
recover operation, you will be no worse off than before and can try again. At the very
least, back up all the archive logs. The backup should be closed in order to prevent
any users doing any work, because such work will be lost after the incomplete recovery.
For this reason, it is vital to close the database as soon as you decide that an incomplete
recovery is needed.
After a successful incomplete recovery, carry out another whole backup. With
release 10g of the database, this is not strictly speaking necessary (it was essential
with earlier releases) but is still good policy.
Check that the incomplete recovery really was successful. For example, it may be
that the user says the error occurred at 10:00, and so you recover until 09:59. But then
you find that the user’s watch is not synchronized with the server’s clock, and that in
fact as far as the database is concerned the error occurred at 09:58, and your recovery
has repeated it. Check that the operation was successful before allowing users to
connect, perhaps by opening the database with STARTUP RESTRICT. You do not
want them to lose more work, if you have to repeat the exercise.
Remove any archive logs from the previous incarnation of the database (you
should have backed them up already) to prevent any possibility of mixing up logs
from before and after the recovery.
27.4 使用用户托管的备份进行不完全恢复
略
27.5 使用RMAN的不完全恢复
--不完全恢复
run{
shutdown immediate;
startup mount;
sql "alter session set NLS_DATE_FORMAT=''dd-mm-yy hh24:mi:ss''";
set until time '29-12-09 17:17:55';
restore database;
recover database;
alter database open resetlogs;
}
27.6 控制文件的恢复
需要强调的一点是:我们极少进行控制文件的恢复。控制文件受到(或者应当受到)不同设备上不同复用副本的保护。丢失控制文件的所有副本几乎是不可能的。
但是,如果当前的控制文件的所有副本已经丢失,那么我们可以从备份中还原控制文件,也可以重新创建控制文件。
即使控制文件未被损坏、但是需要还原控制文件的一种特殊情况是:需要将数据库恢复至数据库的物理结构与当前结构不同的时间点(也就是表空间被删除的情况)。
RMAN可以使用下列几种方式备份控制文件:
1、backup current controlfile format 'd:\backup\control_111.ctl';
backup as backupset current controlfile format 'd:\backup\control_222.ctl';
2、backup as copy current controlfile format 'd:\backup\control01.ctl';
3、backup tablespace system include current controlfile;
4、configure controlfile autobackup on;
RMAN> restore controlfile from autobackup;
未上机
27.7 使用RESETLOGS操作进行恢复
使用10g版本之前的Oracle数据库时,不完全恢复需要执行第(5)个步骤:完整备份。原因略:P538。
使用10g版本时,我们可以使用在不完全恢复之前生成的备份。对于当前场景来说,来自前一个场景的备份与重做都是有效的。
不过,最好的策略仍然是在不完全恢复后立即生成一个完整备份。
对于使用RESETLOGS命令进行恢复的操作来说,至关重要的一点是:为归档日志生成名称时,应当使Oracle能够区分不同场景产生的日志。这些名称由实例参数LOG_ARCHIVE_FORMAT控制。下面给出了一个合理的设置:
alter system set log_archive_format='arch_%d_%t_%r_%s.log';
各变量的意义如下:
• %d The DBID, in hexadecimal
• %t The thread number (always 1, unless it is a clustered database)
• %r The incarnation number
• %s The log switch sequence number
查看每个归档日志所属的特定场景,通过V$ARCHIVED_LOG视图。
select name,resetlogs_id from v$archived_log;
第28章 使用Oracle Flashback Database
In this chapter you will learn how to
• Determine which flashback technology to use for each recovery situation
• Configure and use Flashback Database
• Monitor the Flashback Database
• Use the Enterprise Manager Recovery Wizard to flash back a database
• Manage (or maintain) the llash recovery area
本章讨论了Flashback Database,这是一种功能强大但是十分极端的功能,其作用等价于不完全恢复。
Flashback Database是Oracle10g的新增功能。在启用Flashback Database功能之后,数据库会定期将发生变化数据块的前镜像写入闪回日志的日志文件中,在进行数据库闪回时,这些数据块可是被直接复制回来以满足数据库的恢复需求,同时Redo Log可以被应用用于辅助数据库恢复到更精确的时间点,从而极大缩短了数据库的恢复时间。
注意:Flashback Database不能保证成功,只是有可能实现闪回。
28.1 不同的闪回方法
可用的闪回方法共有3种,每种方法都是使用一种不同的底层体系结构实现的。这几种不同的闪回方法具有不同的性能与局限性。读者需要理解修正不同错误类型所适用的闪回方法类型,这是至关重要的问题。
1、 Flashback Database数据库级闪回
2、 Flashback Query(Versions、Transactioin、Table)
3、 Flashback Drop
28.2 Flashback Database的体系结构
Flashback Database是Oracle10g的新增功能。在启用Flashback Database功能之后,数据库会定期将发生变化数据块的前镜像写入闪回日志的日志文件中,在进行数据库闪回时,这些数据块可是被直接复制回来以满足数据库的恢复需求,同时Redo Log可以被应用用于辅助数据库恢复到更精确的时间点,从而极大缩短了数据库的恢复时间。(摘自盖国强P348)
与重做日志不同的是,闪回日志不是变化的日志,而是将要发生变化的数据块的前镜像的日志。
Unlike the redo log, flashback logging is not a log of changes; it is a log of complete block images.
Flashback Database要求数据库位于archivelog模式中,并且还需要使用ALTER DATABASE OPEN RESETLOGS命令创建数据库的一个新场景
28.3 配置Flashback Database
闪回数据库特性默认是关闭的。
SQL> select flashback_on from v$database;
FLASHBACK_ON
------------
NO
1、确保数据库位于archivelog模式中
select log_mode from v$database;
2、建立一个闪回恢复区
SQL> show parameter recovery
NAME TYPE VALUE
------------------------------------ -----------
db_recovery_file_dest string …\flash_recovery_area
db_recovery_file_dest_size big integer 2G
3、为闪回保留目标设置生存期
SQL> show parameter flashback
NAME TYPE VALUE
------------------------------------ -----------
db_flashback_retention_target integer 1440
4、 干净的关闭和加载数据库
5、 启用闪回数据库特性
SQL> alter database flashback on;
6、 打开数据库。
28.4 监视Flashback Database
select RETENTION_TARGET,
ESTIMATED_FLASHBACK_SIZE,
FLASHBACK_SIZE
from v$flashback_database_log;
select OLDEST_FLASHBACK_SCN,
OLDEST_FLASHBACK_TIME,
from v$flashback_database_log;
select END_TIME,
FLASHBACK_DATA,
DB_DATA,
REDO_DATA,
ESTIMATED_FLASHBACK_SIZE
from v$flashback_database_stat;
select * from v$sgastat where name='flashback generation buff';
28.5 使用Flashback Database
SQL*Plus、RMAN、Database Control都是与Flashback Database的接口。不管选择哪一种工具,Flashback Database的使用方法都是相同的:
1、 关闭数据库
2、 加载数据库
3、 闪回至某个时间点、SCN或者日志切换序列号。
4、 使用RESETLOGS命令打开数据库。
一、 使用SQL*Plus进行闪回
flashback database to timestamp
to_timestamp('2009-12-01 10:00:00','yyyy-mm-dd hh24:mi:ss');
过程略P554(注意书中使用了折半查找法?需要查一下术语)
二、 使用RMAN进行闪回
RMAN>flashback database to time
= to_date('2009-12-01 10:00:00','yyyy-mm-dd hh24:mi:ss');
RMAN> flashback database to scn = 2728665;
RMAN> flashback database to sequence = 2123 thread = 1;
28.6 管理闪回恢复区
略P557
第29章 恢复用户错误
In this chapter you will learn how to
• Recover a dropped table using Flashback technology
• Manage the recycle bin
• Perform a Flashback Table operation
• Recover from user errors using Flashback Versions Query
• Perform transaction-level recovery using Flashback Transaction Query
上一章讨论了Flashback Database,这是一种功能强大但是十分极端的功能,其作用等价于不完全恢复。本章将介绍Oracle 10g数据库中可用的其他闪回方法,这些闪回方法不像Flashback Database一样极端,并且不会导致停机或丢失数据。
29.1 Flashback drop
有时候删除一个表极为容易。我们有可能删除一个存在输入错误的表,而且还可能在连接至错误模式或登录错误实例时误删表。通过在SQL*Plus提示符下进行如下设置,我们可以减少错误删除的可能性。
SQL> set sqlprompt "_user'@'_connect_identifier> "
SYS@OCP10G> conn eygle/eygle
已连接。
EYGLE@OCP10G>
在ORACLE_HOME/sqlplus/admin目录内的glogin.sql文件中植入前面给出的命令,就可以为所有的SQL*Plus会话自动设置SQL提示符。
Flashback Drop允许将先前删除的表(而不是被截断TRUNCATE的表)正确的恢复至其被删除前的状态,同时还会恢复所有索引以及触发器和授权。此外,唯一约束、主键约束与非空约束也将被恢复,但是,外键约束无法被恢复。
在较早版本的Oracle数据库中,删除某个表的同时也会从数据字典中删除对这个表的所有引用。
在10g版本的Oracle数据库中,DROP TABLE的命令实现已经完全变化;指定的表不再被删除,而是被重命名RENAME;
注意:Flashback Drop不能保证成功,只是有可能实现闪回。在删除之后越早执行Flashback Drop,成功的希望就越大。
注意:在SYSTEM表空间中存储的表无法启用Flashback Drop,这些表会被立即彻底地删除。
例子:
作为用户SYSTME连接至数据库
Connected to Oracle Database 10g Enterprise Edition Release 10.1.0.2.0
Connected as system
创建一个用于本练习的用户
SQL> create user dropper identified by dropper;
User created
SQL> grant connect, resource to dropper;
Grant succeeded
SQL> connect dropper/dropper;
Connected to Oracle Database 10g Enterprise Edition Release 10.1.0.2.0
Connected as dropper
SQL> create table names (name varchar2(10));
Table created
SQL> create index name_idx on names(name);
Index created
SQL> alter table names add (constraint name_u unique (name));
Table altered
SQL> insert into names values ('John');
1 row inserted
SQL> commit;
Commit complete
确认制定模式中的内容;
select * from user_objects;
select * from user_constraints;
SQL> drop table names;
Table dropped
SQL> flashback table names to before drop;
Done
重新确认制定模式中的内容;可以看到索引与约束仍然保留它们的回收站名。
SQL> alter index "BIN$fIGjXvMsRnO99AXaVpbnPQ==$0" rename to name_idx_new;
Index altered
SQL> alter table names rename constraint "BIN$IcPnIdMMQXKinh0/9Tem6w==$0" to name_u_new;
Table altered
作为用户SYSTME重新连接至数据库,然后删除DROPPER模式。
SQL> conn system/oracle;
Connected to Oracle Database 10g Enterprise Edition Release 10.1.0.2.0
Connected as system
SQL> drop user dropper cascade;
User dropped
查询dba_recyclebin视图,确认DROPPER的所有对象都被真正的删除。
SQL> select * from dba_recyclebin where owner = 'DROPPER';
29.2 管理回收站
使用PURGE 命令可以永久的删除对象.这个命令具有多种形式。
drop table table_name purge;
purge table table_name;
purge index index_name;
purge tablespace tablespace_name;
29.3 Flashback Query
create table emp
(empno VARCHAR2(10) not null primary key,
name varchar2(10),
deptno VARCHAR2(10));
create table dept
(deptno VARCHAR2(10) not null primary key,
name varchar2(10));
alter table emp
add constraint emp_f
foreign key (deptno) references dept(deptno);
insert into dept values(50,'support');
insert into emp values(8000,'Watson',50);
commit;
select sysdate from dual;
SYSDATE
2010-1-11 10:09:03
or:
select dbms_flashback.get_system_change_number from dual;--9750309
delete from emp where empno=8000;
delete from dept where deptno=50;
commit;
select * from dept;
select * from emp;
SQL> flashback table emp to timestamp to_timestamp('2010-01-11 10:09:03',
2 'yyyy-mm-dd hh24:mi:ss');
flashback table emp to timestamp to_timestamp('2010-01-11 10:09:03',
'yyyy-mm-dd hh24:mi:ss')
ORA-08189: 因为未启用行移动功能, 不能闪回表
因为没有启用行移动(row movement)特性,所以操作失败。
alter table dept enable row movement;
alter table emp enable row movement;
SQL> flashback table emp to timestamp to_timestamp('2010-01-11 10:09:03',
2 'yyyy-mm-dd hh24:mi:ss');
flashback table emp to timestamp to_timestamp('2010-01-11 10:09:03',
'yyyy-mm-dd hh24:mi:ss')
ORA-02091: 事务处理已回退
ORA-02291: 违反完整约束条件 (EYGLE.EMP_F) - 未找到父项关键字
因为违反完整约束条件,所以操作失败
SQL> flashback table emp,dept to timestamp to_timestamp('2010-01-11 10:09:03',
2 'yyyy-mm-dd hh24:mi:ss');
Done
or:
SQL> flashback table emp,dept to scn 9750309;
Done
select * from dept;
select * from emp;
表闪回可能因为下列原因失败:P577。
29.4 Flashback Version Query
update emp set name='aaa' where empno=8000;
commit;
update emp set name='bbb' where empno=8000;
commit;
update emp set name='ccc' where empno=8000;
commit;
delete emp where empno=8000
select * from emp;
select empno,
name,
versions_xid,
versions_startscn,
versions_endscn,
versions_operation
from emp
versions between scn minvalue and maxvalue
where empno=8000;
-----------
EMPNO NAME VERSIONS_XID VERSIONS_STARTSCN VERSIONS_ENDSCN VERSIONS_OPERATION
1 8000 ccc 060022004C1E0000 9766349 D
2 8000 ccc 060005004C1E0000 9763458 9766349 U
3 8000 bbb 06000B004C1E0000 9763455 9763458 U
4 8000 aaa 03001800161A0000 9763452 9763455 U
5 8000 xxx 06000A004C1E0000 9763441 9763452 I
6 8000 ccc 06002B004B1E0000 9757709 D
7 8000 ccc 060029004B1E0000 9757689 9757709 U
8 8000 bbb 060022004B1E0000 9757686 9757689 U
9 8000 aaa 06001F004B1E0000 9757683 9757686 U
10 8000 eygle 9757683
29.5 Flashback Transaction Query
SQL> desc flashback_transaction_query
Name Type Comments
---------------- -------------- -----------------------------------------
XID RAW(8) Transaction identifier
START_SCN NUMBER Transaction start SCN
START_TIMESTAMP DATE Transaction start timestamp
COMMIT_SCN NUMBER Transaction commit SCN
COMMIT_TIMESTAMP DATE Transaction commit timestamp
LOGON_USER VARCHAR2(30) Logon user for transaction
UNDO_CHANGE# NUMBER 1-based undo change number
OPERATION VARCHAR2(32) forward operation for this undo
TABLE_NAME VARCHAR2(256) table name to which this undo applies
TABLE_OWNER VARCHAR2(32) owner of table to which this undo applies
ROW_ID VARCHAR2(19) rowid to which this undo applies
UNDO_SQL VARCHAR2(4000) SQL corresponding to this undo
查询视图flashback_transaction_query需要具有 SELECT ANY TRANSACTION权限,默认这种权限被授予给SYS和DBA角色。
SQL> select operation,undo_sql from flashback_transaction_query
2 where xid='060022004C1E0000';
OPERATION UNDO_SQL
--------------------------------
DELETE insert into "EYGLE"."EMP"("EMPNO","NAME","DEPTNO") values ('8000','ccc','50');
BEGIN
通过UNDO语句,就可以撤销该事物。
第30章 检测与恢复数据库的讹误
第31章 用于调整Oracle 10g的工具
第32章 监视与管理存储结构
第33章 使用ASM管理存储结构
第34章 监视与管理内存
第35章 管理数据库资源
第36章 自动化管理任务
http://docs.google.com/View?id=dcbw3pcm_39hdwhvkfm
http://docs.google.com/View?id=dcbw3pcm_40d48v3bc8
注1:该笔记为未完成版
注2:转帖请注明出处(笔记作者:城市行走者)
第1章 Oracle的基本概念
第2章 安装Oralce Database 10g
2.1安装Oralce Database 10g
第3章 创建Oracle数据库
3.1 Oracle服务器的体系结构
3.2 创建数据库的步骤
3.2 使用DBCA创建一个数据库
3.3 数据库创建脚本
第4章 接合Oracle数据库(Interfacing with the Oracle Database)
4.1调用SQL*Plus
4.2 连接iSQL*Plus
第5章 管理Oracle进程
5.1 启动SQL*Plus
5.2 启动iSQL*Plus
5.3 启动Database Listener
5.4 启动Database Control端口监控程序
5.5 数据库的启动与关闭
第6章 管理Oracle存储结构
6.1 基本的Oracle存储结构
6.2 创建与管理表空间
6.3 查看表空间
第7章 管理数据库用户
7.1 创建与管理数据库用户
7.2 权限的授予(系统权限、对象权限、角色)
7.3 利用配置文件控制资源的使用
第8章 管理数据库对象
8.1 用户、模式以及模式对象
8.2 数据类型
8.3 创建表
8.4 创建约束
8.5 创建索引
8.6 创建视图
8.7 创建序列
第9章 操纵数据库数据
9.1 事物的隔离性、读一致性以及提交
9.2 DML与完整性约束
9.3 Data Pump
9.4 SQL*Loader
第10章 使用PL/SQL进行Oracle编程
第11章 保护Oracle数据库的安全
第12章 配置Oracle互联
12.1 Oracle客户/服务器的实现
12.2 创建与管理侦听器
12.3 数据库注册(静态注册、动态注册)
12.4 侦听器控制实用程序(lsnrctl)
12.5 名称解析技术
12.6 配置服务别名
12.7 高级的连接选项
12.8 测试Oracle Net连接
第13章 管理共享服务器
第14章 管理数据库性能
14.1 修正无效的对象(Invalid Objects)
14.2 修正无用的索引(Unusable Indexes)
14.3 优化器统计(Optimizer Statistics)
14.4 性能指标(Performance Metrics)
第15章 监视Oracle
15.1 自动工作负荷仓库(Automatic Workload Repository, AWR)
15.2 诊断与调整顾问程序
15.3 服务器生成的告警
第16章 管理撤销
16.1 撤销数据的原因与实质
16.2 创建撤销表空间
16.3 管理撤销
第17章 处理锁定
17.1 共享锁与排他锁
17.2 DML锁与DDL锁
17.3 排队机制(The Enqueue Mechanism)
17.4 锁定争用(Lock Contention)
17.5 死锁(Deadlocks)
第18章 配置数据库的备份与恢复
18.1 备份与恢复问题
18.2 失败类别
18.3 实例恢复
18.4 实例恢复与MTTR
18.5 MTTR顾问程序
18.6 配置数据库的可恢复性
18.6.1 复用控制文件
18.6.2 保护联机重做日志
18.6.3 将数据库转换至归档(archivelog)模式
第19章 备份Oracle数据库
19.1 备份工具
19.2 概念与术语
19.2.1 全部备份与部分部分(Whole or Partial Backups)
19.2.2 完整备份与增量备份(Full or Incremental Backups)
19.2.3 脱机备份与联机备份(Offline or Online Backups)
19.2.4 映像副本与备份集(Image Copies or Backup Sets)
19.3 RMAN的设置
19.3.1 设备的设置
19.3.2 备份集的设置
19.3.3 策略的设置
19.4 运行数据库的一个完整备份
19.5 控制文件的备份(使用SQL*Plus备份控制文件以便进行跟踪)
19.6 管理RMAN备份
第20章 恢复Oracle数据库
20.1 回复结构与进程
20.2 恢复受损的控制文件
20.3 恢复受损的复用联机重做日志
20.4 恢复受损的数据文件
第21章 管理Oracle数据库中的全球化特性
21.1 全球化特性
21.1.1字符集(Character Sets)
21.1.2语言支持
21.1.3地区支持
21.1.4 其他NLS设置
21.2 使用全球化支持功能
21.2.1 选择字符集
21.2.2 改变数据库字符集
21.2.3 数据库内的全球化
21.2.4 实例级别的全球化
21.2.5 客户端环境设置
21.2.6 会话级别的全球化设置
21.2.7 语句级别的全球化设置
21.3 语言排序与选择
21.4 使用时区
第22章 配置侦听器的安全性
22.1 保护侦听器的安全
22.1.1 侦听器的操作系统身份验证
22.1.2 侦听器的口令身份验证
22.2 控制对数据库的访问
22.3 外部过程
第23章 开始使用Recovery Manager
23.1 RMAN特性
23.2 RMAN的组件
23.2.1 RMAN可执行程序
23.2.2目标数据库
23.2.3 服务器进程与通道
23.2.4 RMAN存储仓库(repository)
23.2.5 恢复目录(Recovery Catalog)
23.2.6 介质管理器(Media Management Library)
23.2.7 辅助数据库(Auxiliary Database)
23.2.8 闪回恢复区(Flash Recovery Area)
23.3 配置RMAN
23.3.1 环境变量与实例参数
23.3.2 连接数据库
23.3.3 配置RMAN的永久设置
23.3.4 通道分配
23.3.5 RMAN备份的内容
23.3.6 配置备份的保留
23.3.7 重写默认配置
第24章 使用RMAN备份数据库
24-1 创建备份集
24-2管理与监视RMAN备份(list、report与delete命令)
第25章 诊断Oracle数据库的问题
25.1 告警日志
25.2 后台跟踪文件(Background Trace Files)
25.3 服务器生成的告警
25.3.1 告警的类型
25.3.2 告警系统的体系结构
25.3.3 查看告警信息
25.3.4 建立通知规则
25.3.5 编辑阈值
25.4 用户跟踪文件(User Trace Files)
第26章 恢复非关键的损失
26-1 恢复受损的临时表空间
26-2 恢复受损的联机重做日志
26-3 恢复受损的索引表空间
26-4 恢复受损的只读表空间
26-5 恢复受损的口令文件
第27章 数据库的不完全恢复
27.1 完全恢复
27.2 需要进行不完全恢复的场合
27.3 不完全恢复的方法
27.4 使用用户托管的备份进行不完全恢复
27.5 使用RMAN的不完全恢复
27.6 控制文件的恢复
27.7 使用RESETLOGS操作进行恢复
第28章 使用Oracle Flashback Database
28.1 不同的闪回方法
28.2 Flashback Database的体系结构
28.3 配置Flashback Database
28.4 监视Flashback Database
28.5 使用Flashback Database
28.6 管理闪回恢复区
第29章 恢复用户错误
29.1 Flashback drop
29.2 管理回收站
29.3 Flashback Query
29.4 Flashback Version Query
29.5 Flashback Transaction Query
第30章 检测与恢复数据库的讹误
第31章 用于调整Oracle 10g的工具
第32章 监视与管理存储结构
第33章 使用ASM管理存储结构
第34章 监视与管理内存
第35章 管理数据库资源
第36章 自动化管理任务
第1章 Oracle的基本概念
In this chapter you will learn
• What a database is and what makes a database relational
• What SQL is
• Which database objects are supported in Oracle 10g
• What a database administrator does
• How the Oracle database fits into the Oracle product family
第2章 安装Oralce Database 10g
In this chapter you will learn how to
• Identify system requirements
• Use Optimal Flexible Architecture
• Install software with the Oracle Universal Installer
• Identify and configure commonly used environment variables
2.1安装Oralce Database 10g
ok
第3章 创建Oracle数据库
In this chapter you will learn how to
• Create an Oracle database
• Explain the Oracle database architecture
• Explain the instance architecture
• Use the management framework
• Use DBCA to create a database
• Use DBCA to configure a database
• Use DBCA to drop a database
• Use DBCA to manage templates
图 Oracle服务器的体系结构
3.1 Oracle服务器的体系结构
详见我的笔记,略
3.2 创建数据库的步骤
To create a database, there are a number of steps that must be followed in the correct
order:
1. Create a parameter file and a password file.
2. Use the parameter file to build an instance in memory.
3. Issue the CREATE DATABASE command. This will generate, at a minimum,
a controlfile; two online redo log files; two datafiles for the SYSTEM and
SYSAUX tablespaces, and a data dictionary.
4. Run SQL scripts to generate the data dictionary views and the supplied PL/SQL
packages.
5. Run SQL scripts to generate Enterprise Manager Database Control, along with
any options (such as Java) that the database will require.
On Windows systems, there is an additional step because Oracle runs as a Windows
service. Oracle provides a utility, ORADIM.EXE, to assist you in creating this service.
3.2 使用DBCA创建一个数据库
ok
3.3 数据库创建脚本
略。
第4章 接合Oracle数据库(Interfacing with the Oracle Database)
In this chapter you will learn how to
• Use SQL*Plus and iSQL*Plus to access Oracle Database 10g
• Use SQL*Plus and iSQL*Plus to describe the logical structure of tables
• Use SQL to query, manipulate, and define data using SELECT, UPDATE/INSERT/
DELETE, and CREATE/ALTER/DROP
• Identify common database interfaces
• Describe a database transaction
4.1调用SQL*Plus
ok
4.2 连接iSQL*Plus
ok
第5章 管理Oracle进程
In this chapter you will learn how to
• Control the database
• Start and stop iSQL*Plus
• Start and stop Enterprise Manager Database Control
• Start and stop the Oracle Listener
• Start up and shut down Oracle Database 10g
• Describe startup and shutdown options for the Oracle database
• Handle parameter files
• Locate and view the database alert log
5.1 启动SQL*Plus
SQL*Plus只是一个向数据库发出特定SQL命令的基本进程,这是一个客户/服务器工具。
C:\>sqlplus /nolog
SQL*Plus: Release 10.1.0.2.0 - Production on 星期一 1月 11 23:23:51 2010
Copyright (c) 1982, 2004, Oracle. All rights reserved.
SQL> conn /as sysdba
已连接。
5.2 启动iSQL*Plus
iSQL*Plus是图形形式的SQL*Plus,这种工具作为一种Application Server服务运行。终端用户可以从Web浏览器连接iSQL*Plus。
使用命令isqlplusctl start,可以启动iSQL*Plus。
C:\>isqlplusctl start
iSQL*Plus 10.1.0.2.0
Copyright (c) 2004 Oracle. All rights reserved.
Starting iSQL*Plus ...
iSQL*Plus started.
为了连接iSQL*Plus,需要在浏览器中输入下面的URL:
http://<hostname.domain>:<port>/isqlplus
其中默认端口号是5560。
5.3 启动Database Listener
这一部分将在第12章详细讨论。
如果没有运行侦听程序Database Listener,那么Database Control就无法连接数据库。
C:\>lsnrctl start
C:\>lsnrctl stop
C:\>lsnrctl status
C:\>lsnrctl status
LSNRCTL for 32-bit Windows: Version 10.1.0.2.0 - Production on 12-1月 -2010 00:0
3:21
Copyright (c) 1991, 2004, Oracle. All rights reserved.
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC)))
LISTENER 的 STATUS
------------------------
别名 LISTENER
版本 TNSLSNR for 32-bit Windows: Version 10.1.0.2.0 - Produ
ction
启动日期 11-1月 -2010 18:34:00
正常运行时间 0 天 5 小时 29 分 23 秒
跟踪级别 off
安全性 ON: Local OS Authentication
SNMP OFF
监听程序参数文件 D:\oracle\product\10.1.0\db_1\network\admin\listener.o
ra
监听程序日志文件 D:\oracle\product\10.1.0\db_1\network\log\listener.log
监听端点概要...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROCipc)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=lenovo-fe3b8a55)(PORT=1521)))
服务摘要..
服务 "PLSExtProc" 包含 1 个例程。
例程 "PLSExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
服务 "ocp10g" 包含 1 个例程。
例程 "ocp10g", 状态 READY, 包含此服务的 1 个处理程序...
命令执行成功
5.4 启动Database Control端口监控程序
如果希望启动、停止Database Control进程,需要使用emctl实用程序。
C:\>emctl start dbconsole
C:\>emctl stop dbconsole
C:\>emctl status dbconsole
C:\>set oracle_sid=OCP10G
C:\>emctl status dbconsole
Oracle Enterprise Manager 10g Database Control Release 10.1.0.2.0
Copyright (c) 1996, 2004 Oracle Corporation. All rights reserved.
http://lenovo-fe3b8a55:5500/em/console/aboutApplication
Oracle Enterprise Manager 10g is running.
--------------------------------------------------------------
Logs are generated in directory D:\oracle\product\10.1.0\db_1/lenovo-fe3b8a55_OC
P10G/sysman/log
一旦这个进程运行中,就可以使用如下的URL来连接数据库
http://<host.domain>:<port>/em
其中默认的端口是5500。
5.5 数据库的启动与关闭
1、使用正确的权限进行连接
CONNECT的语法为:
connect user/pass[@db]
connect user/pass[@db] as sysdba
connect user/pass[@db] as sysoper
connect / as sysdba
connect / as sysoper
第一个示例是标准的数据字典身份验证。此时数据库必须是打开状态,任何用户只要使用这种语法连接数据库,那么就无法执行启动或关闭命令。
第二、第三个示例指示Oracle进入外部口令文件验证用户名/口令组合。
第四、第五个示例使用了操作系统身份验证。
2、SYSOPER与SYSDBA
需扩充,暂时略
3、startup命令
详见我的笔记,略
第6章 管理Oracle存储结构
In this chapter you will learn how to
• Define the purpose of tablespaces and datafiles
• Create tablespaces
• Manage tablespaces (alter, drop, generate DDL, take offline, put online, add datafiles,
make read-only or read/write)
• Obtain tablespace information from Enterprise Manager and the data dictionary
• Drop tablespaces
• Describe the default tablespace
图 Oracle数据库存储结构的实体关系模型
6.1 基本的Oracle存储结构
1、物理存储结构
物理结构是从操作系统角度观察Oracle数据库时看到的的结构。 (The physical structure is what the operating system sees when “looking” at an Oracle database.) 它由一个或多个数据文件组成,每个数据文件由若干个操作系统块组成。
数据库物理结构有三类物理文件组成:数据文件、重执行日志文件、控制文件。
重执行日志文件记录数据库做的所有改变。
控制文件用来维护数据库物理结构的信息。
2、逻辑存储结构
2.1 表空间(TABLESPACE)
表空间的类型:第一种标准基于表空间存储的对象的类型:SYSTEM类型或非SYSTEM类型。在Oracle 10g中,SYSTEM与SYSAUX表空间由SYSTEM类型对象组成,其他表空间都被分类为非SYSTEM类型。
SYSTEM表空间包含数据字典。数据字典是描述数据库自身结构、数据库中所有对象、用户以及角色的若干内部表。某个用户查询或执行DML语句时,数据字典被用于验证这个用户的权限以及查找属于被查询或修改的段的数据。执行DDL语句(包括CREATE、ALTER或DROP)后,这些表的内容也会被改变以反映相应的变化。
SYSAUX表空间用于存储统计信息以及其他信息。
表空间可以存储下列3种段中的一种:永久段、临时段以及撤销段。
2.2 段(SEGMENT)
表空间内的空间被分配给若干段。段(SEGMENT)是数据库中要求存储的对象,如一个表或一个索引。
SELECT DISTINCT segment_type FROM DBA_SEGMENTS;
SEGMENT_TYPE
1 CLUSTER
2 INDEX
3 INDEX PARTITION
4 LOB PARTITION
5 LOBINDEX
6 LOBSEGMENT
7 NESTED TABLE
8 ROLLBACK
9 TABLE
10 TABLE PARTITION
11 TYPE2 UNDO
2.3 区间(EXTENT)
为表空间内的段分配空间时,每次只能分配一个区间(EXTENT)。
区间管理可以是本地管理或者字典管理。
2.4 数据库块
数据库块是数据库最小的I/O单位。数据库需要读取数据时,无法只读取一条记录,而是必须读取整个数据块。写操作也会出现同样的问题:即使数据块中只有一条记录发生变化,DBWn进程都必须在检查点期间写入整个数据块。
默认的数据块的大小在数据库创建阶段设置,并且无法修改。
创建表空间时可以设置本表空间数据块的大小,并且无法修改。
6.2 创建与管理表空间
ok
创建表空间的语法:
CREATE [BIGFILE | SMALLFILE] [TEMPORARY] TABLESPACE tablespace name
DATAFILE datafile spec | TEMPFILE tempfile spec
[MINIMUM EXTENT minimum extent size]
[BLOCKSIZE blocksize]
[COMPRESS|NOCOMPRESS] DEFAULT STORAGE (default storage clause)]
[LOGGING|NOLOGGING]
[FORCE LOGGING]
[ONLINE|OFFLINE]
[EXTENT MANAGEMENT DICTIONARY |
LOCAL [AUTOALLOCATE|UNIFORM SIZE size]
[SEGMENT SPACE MANAGEMENT MANUAL|AUTO]
[FLASHBACK ON|OFF]
创建表空间,所需的是这个表空间的名称以及数据文件信息,其他所有的设置都可以使用Oracle的默认值。如下所示:
CREATE TABLESPACE default_demo
DATAFILE '$ORACLE_BASE/oradata/default_demo01.dbf' SIZE 10M;
删除表空间:
DROP TABLESPACE tablespace_name;
如果下删除的表空间存在某些对象,那么会得到如下所示的错误信息:
DROP TABLESPACE tablespace_name
*
ORA-01549: tablespace not empty, use INCLUDING CONTENTS option
DROP TABLESPACE OCP10GDATA INCLUDING CONTENTS CASCADE CONSTRAINTS;
如果不指定INCLUDING CONTENTS和CASCADE CONSTRAINTS参数,那么只有在表空间不包括任何永久对象的前提下才能删除这个表空间。
删除表空间的结果是从参数文件和数据字典中删除这个表空间的所有引用。因为并没有真正删除数据文件,所以还需要手动删除数据文件的操作(不过最好还是通过EM来完成这个步骤)。
6.3 查看表空间
DBA_TABLESPACES V$TABLESPACE 视图
DBA_DATAFILES V$DATAFILE 视图
DBA_TEMP_FILES V$TEMPFILE 视图
第7章 管理数据库用户
In this chapter you will learn how to
• Create and manage database user accounts
• Create and manage roles
• Grant and revoke privileges
• Control resource usage by users
7.1 创建与管理数据库用户
详见我的笔记,作者给出了很好的例子,略
CREATE USER username
IDENTIFIED [BY password | EXTERNALLY | GLOBALLY AS extname]
[DEFAULT TABLESPACE tablespacename]
[TEMPORARY TABLESPACE tablespacename]
[ACCOUNT LOCK | UNLOCK]
[PROFILE profilename | DEFAULT]
[PASSWORD EXPIRE]
[QUOTA num [K|M] | UNLIMITED ON tablespace
[QUOTA num [K|M] | UNLIMITED ON tablespace] ... ]
盖国强的这里的例子很好(略)P120
创建用户的最简单语法如下:
CREATE USER <username> IDENTIFIED BY <password>;
这个字句已经过于简单,省略了空间分配的字句(请注意作为一个DBA,要尽量避免这样的语句),通常这是不推荐的写法,可是很多客户就是这样创建用户的。
需要理解一下的是,这个语句在不同的Oracle版本中会有不同的结果。
Oracle 8i:
Oracle 9i:
Oracle 10g中:Oracle最终解决了这个问题,这得益于全局缺省表空间的引入。
由于一直以来存在数据空间的分配和使用问题,我们建议在创建用户时就为用户制定缺省的表空间
完善后的语句为:
CREATE USER <username> IDENTIFIED BY <password>
DEFAULT TABLESPACE <tablespace_name>
TEMPORARY TABLESPACE <tablespace_name>;
删除用户:
DROP USER username [CASCADE]
Oracle不允许从数据库中删除其模式中包含对象的用户。
Oracle建议在删除某个用户之前,需要确定该用户是否拥有数据库中的对象,如果该用户拥有某些对象,那么只有在验证其他用户不依赖这些对象后才能删除该用户拥有的对象。
通过DBA_OBJECTS 和 DBA_DEPENDENCIES视图。
select * from DBA_OBJECTS where owner='EYGLE';
select * from DBA_DEPENDENCIES;
需要查一下,略,s user_constraints 之间的区别???
7.2 权限的授予(系统权限、对象权限、角色)
1、系统权限
表 Oracle 10g 中常见的系统权限
GRANT privilege [, privilege, ...]
TO username [, username, ...]
[WITH ADMIN OPTION];
REVOKE privilege [, privilege, ...]
FROM username [, username, ...];
注意:DBA可以使用WITH ADMIN OPTION 为某个用户授予权限,如果这个用户为其他用户授予了相同的权限,那么就无法级联的取消这些用户的权限。例如:略P137
…通过dba_sys_privs视图。
确定被授予的系统权限
查询权限,通过视图dba_sys_privs
select * from dba_sys_privs --(有488条记录)
2、对象权限
Privilege Granted On
SELECT Table, view, sequence
INSERT Table, view
UPDATE Table, view
DELETE Table, view
ALTER Table, sequence
INDEX Table
REFERENCES Table
EXECUTE Procedure, function, package
GRANT privilege [,privilege, ...]
ON objectname
TO user | role | PUBLIC
[WITH GRANT OPTION];
REVOKE privilege [,privilege, ...]
ON objectname
FROM user | role | PUBLIC
[CASCADE CONSTRAINTS];
与授予系统权限不同,授予对象权限时必须制定关键字ON,从而能够确定权限应用的对象。
一般不建议在列的级别上授予对象权限。
通常,在需要只为表中特定的某些列授予对象权限时,我们建议创建一个只包含这些列的视图,并在这个视图上授予适当的权限。
注意:取消对象权限时级联的,这一点与取消系统权限不同。
确定被授予的对象权限
• USER_TAB_PRIVS_MADE Object privileges the user has granted to others
on his schema objects
• USER_TAB_PRIVS_RECD Privileges granted to the user to objects in other
schemas
• ALL_TAB_PRIVS_MADE Object privileges the user has granted to others on
his and other schema objects
• ALL_TAB_PRIVS_RECD Privileges granted to the user to objects in his and
other schemas
• USER_COL_PRIVS_MADE Column privileges granted by the user to tables
in his schema
• USER_COL_PRIVS_RECD Column privileges granted to the user to columns
in tables in other schemas
• ALL_COL_PRIVS_MADE Column privileges granted by the user to tables in
his and other schemas
• ALL_COL_PRIVS_RECD Column privileges granted to the user to columns
in tables in his and other schemas
3、角色
角色是保存权限或者其他角色的容器。角色的主要优点是简化了为用户授权的过程。
表 Oracle 10g中的预定义角色及其被授予的权限
CREATE ROLE rolename
[NOT IDENTIFIED | IDENTIFIED
BY password | EXTERNALLY | GLOBALLY];
1. 创建角色
CREATE ROLE rolename
[NOT IDENTIFIED | IDENTIFIED
BY password | EXTERNALLY | GLOBALLY];
2. 修改角色
ALTER ROLE rolename
[NOT IDENTIFIED | IDENTIFIED
BY password | EXTERNALLY | GLOBALLY];
3.为角色授予和取消权限
为角色授予系统权限的语法:
GRANT system_priv [, system_priv, ...]
TO role | PUBLIC [, role | PUBLIC, ...]
[WITH ADMIN OPTION];
注意:我们可以使用WITH ADMIN OPTION为角色授予系统权限,但是无法使用WITH GRANT OPTION为角色授予对象权限。
为角色授予对象权限的语法:
GRANT ALL [PRIVILEGES] | object_priv [, object_priv, ...]
ON [schema_name.]object_name
TO role | PUBLIC [, role | PUBLIC, ...];
为角色取消系统权限的语法:
REVOKE system_priv | role_name [, system_priv | role_name, ...]
FROM role | PUBLIC [,role | PUBLIC, ...];
为角色取消对象权限的语法:
REVOKE ALL [PRIVILEGES] | object_priv [, object_priv, ...]
ON [schema_name.]object_name
FROM role | PUBLIC [,role | PUBLIC, ...]
[CASCADE CONSTRAINTS]
4. 为用户授予和取消角色
GRANT role_name [, role_name, ...]
TO user_name | role | PUBLIC [, user_name | role | PUBLIC, ...]
[WITH ADMIN OPTION];
5. 设置用户的默认角色
一旦为某个用户授予了一个角色,就会自动将这个角色配置为默认角色。
6. 启动与禁用角色
SET ROLE ALL [EXCEPT role_name [,role_name] | NONE |
role_name [IDENTIFIED BY password] [, role_name [IDENTIFIED BY password, ...];
7. 删除角色
DROP ROLE role_name;
盖国强的这里的例子很好(略。好例子,连贯、顺序好:先举例,后理论)P122。不像其他书,上来先是讲什么是权限,权限的分类以及其中的细节(比如转授),最后才是最重要的例子(导致的结果是,还没有看到重点就已经晕掉了)。
如果用户需要连接数据库并创建数据表,那么至少需要获得至少两个授权:
CREATE SESSION 和 CREATE TABLE。
grant create session to <username>;
grant create table to <username>;
这里需要继续授予用户使用其表空间的权限
alter user <username> quota 10M on <tablespace_name>;
Oracle的权限可以分为两种:
系统权限
对象权限
查询权限,通过视图dba_sys_privs
select * from dba_sys_privs --(有488条记录)
进一步,可以查询和TABLE有关的权限
select distinct privilege from dba_sys_privs
where privilege like '%TABLE';
-----------
PRIVILEGE
1 ALTER ANY TABLE
2 BACKUP ANY TABLE
3 COMMENT ANY TABLE
4 CREATE ANY TABLE
5 CREATE TABLE
6 DELETE ANY TABLE
7 DROP ANY TABLE
8 FLASHBACK ANY TABLE
9 INSERT ANY TABLE
10 LOCK ANY TABLE
11 SELECT ANY TABLE
12 UNDER ANY TABLE
13 UPDATE ANY TABLE
------------
可以想象,如果数据库中存在大量用户,如果我们将这些权限一一授予这些用户,操作将会极其繁琐,
于是Oracle设计了一个新的技术:角色(Role)。
定义:角色是一系列权限的集合。
(有个权限的概念后)通常一个用户创建之后,我们授予用户两个角色就足够使用了,这两个角色是:CONNECT和RESOURCE。(Oracle在10g版本中对角色重新进行了定义)
grant connect, resource to user_name;
select * from dba_sys_privs where grantee='CONNECT';
select * from dba_sys_privs where grantee='RESOURCE';
select * from dba_sys_privs where privilege='UNLIMITED TABLESPACE';
UNLIMITED TABLESPACE这一权限是为了向后兼容而保留的,如果使用不当,则会对数据库造成严重影响。
P126盖国强,并参考备份与恢复一章。
为了更严谨的管理,可以回收用户的UNLIMITED TABLESPACE权限,然后对用户的空间进行单独授权。
7.3 利用配置文件控制资源的使用
略
第8章 管理数据库对象
In this chapter you will learn how to
• Create and modify tables
• Define constraints
• View the attributes of a table
• View the contents of a table
• Create indexes and views
• Name database objects
• Select appropriate datatypes
• Create and use sequences
8.1 用户、模式以及模式对象
用户是存在于数据库内,通过用户名被唯一标识的人。创建一个用户的同时也会创建一个模式。
模式(schema)由某个用户拥有的对象组成,模式最初为空。
命名空间(namespace)定义略。
不同命名空间内的对象能够共享相同的名称。
8.2 数据类型
略
8.3 创建表
ok
8.4 创建约束
ok
8.5 创建索引
ok
索引具有下列双重目的:增强检索记录的性能,实施约束。
8.6 创建视图
ok
视图实际上是一个查询。
8.7 创建序列
ok
第9章 操纵数据库数据
In this chapter you will learn how to
• Manipulate data through SQL using INSERT, UPDATE, and DELETE
• Use Data Pump to export data
• Use Data Pump to import data
• Load data with SQL Loader
• Create directory objects
9.1 事物的隔离性、读一致性以及提交
略 ACID测试
ok
In brief, any relational
database must be able to pass the ACID test.
A Is for Atomicity
The principle of atomicity states that all parts。。。
The whole of the SQL language is only a dozen or so commands. The ones we are
concerned with here are
• SELECT
• INSERT
• UPDATE
• DELETE
• COMMIT
• ROLLBACK
Remember that from release 9i Oracle has included a very efficient and powerful
MERGE command, but since the end result of a merge is identical to a combination
of INSERT, UPDATE, and DELETE, there is no need to discuss it here.
9.2 DML与完整性约束
表 各种DML语句引发的不同约束错误以及错误消息。
9.3 Data Pump
略
9.4 SQL*Loader
上机没有成功。
第10章 使用PL/SQL进行Oracle编程
In this chapter you will learn how to
• Identify PL/SQL objects
• Describe triggers and triggering events
• Identify configuration options that affect PL/SQL performance
略
第11章 保护Oracle数据库的安全
In this chapter you will learn how to
• Apply the principal of least privilege
• Manage default user accounts
• Implement standard password security features
• Audit database activity
• Register for security updates
略
第12章 配置Oracle互联
In this chapter you will learn how to
• Use Database Control to create additional listeners
• Use Database Control to create Oracle Net service aliases
• Use Database Control to configure connect-time failover
• Use Listener features
• Use the Oracle Net Manager to configure client and middle-tier connections
• Use tnsping to test Oracle Net connectivity
• Describe Oracle Net services
• Describe Oracle Net names resolution methods
Oracle Net过去被称为sqlnet,至今许多DBA仍然沿用了这个称呼。
12.1 Oracle客户/服务器的实现
图 通过若干层的分离使数据库免受用户的破坏
12.2 创建与管理侦听器
ok
侦听器在listener.ora文件中定义。默认存储位置是ORACLE_HOME/network/admin
注意:与其他用于配置Oracle Net的文件一样,listener.oar文件非常在意看似很小的语法问题(例如区分大小写、空格以及缩写)。因此,尽管没有其他理由,许多DBA仍然不愿手工编辑这个文件。Oracle提供了下列3个管理Oracle Net的图形工具:Database Control、Net Manager以及Net Configuration Assistant。
12.3 数据库注册(静态注册、动态注册)
动态注册实验:
1. Using SQL*Plus, connect to your instance as user SYSTEM, and issue the
commands
SQL> alter system set local_listener='ocp10g_1522';
SQL> alter system register;
2. From an operating system prompt, use lsnrctl to check that your instance has
registered dynamically with your list2 listener.
C:\> lsnrctl services list2
3. Test the alias by connecting using SQL*Plus.
SQL> connect system/oracle@ocp10g_1522;
4. Reset your instance to use the default listener by putting the local_listener
parameter back to default, and re-register it.
SQL> alter system set local_listener='';
SQL> alter system register;
12.4 侦听器控制实用程序(lsnrctl)
略。
12.5 名称解析技术
Oracle提供了下列4中名称解析技术:
Easy Connect,
local naming --- 本地名称解析方法(tnsnames.ora)
directory naming,
external naming.
使用本地名称解析方法时,用户可以为连接串提供一个Oracle Net服务别名,该别名通过一个本地文件tnsnames.ora被解析为完整的网络地址(包括协议、地址、端口、服务名或实例名)。
例子:建立会话
SQL> CONNECT SCOTT/TIGER 请求连接本地机器上的一个实例
SQL> CONNECT SCOTT/TIGER@OCP10G 请求连接远程机器上的一个实例
(其中OCP10G为连接串)
12.6 配置服务别名
可以使用的两个工具为:Database Control(服务器端)以及Net Manger(客户端)。
Net Manger菜单属性结构具有3个分支:
概要文件-Profile
服务命名-Service Naming
监听程序-Listeners
Net Manger(客户端)。
概要文件-Profile
概要文件-Profile
服务命名-Service Naming
服务命名-Service Naming
监听程序-Listeners
监听程序-Listeners
12.7 高级的连接选项
略P263
12.8 测试Oracle Net连接
1、 SQL*Plus
2、 通过别名尝试登录
3、 Net Manger内的test命令
4、 tnsping
见我的笔记
第13章 管理共享服务器
略,暂时用不到
第14章 管理数据库性能
In this chapter you will learn how to
• Troubleshoot invalid and unusable objects
• Gather optimizer statistics
• View performance metrics
• React to performance issues
14.1 修正无效的对象(Invalid Objects)
如果某个过程对象(例如一个存储的PL/SQL函数或者一个视图)变为无效,那么DBA不必执行任何操作。首次访问这个对象时,Oracle会尝试重新进行编译,而且有可能编译成功。
查询数据库中无效的对象,可以通过DBA_OBJECT视图:
select owner,object_name,object_type,status
from dba_objects
where status='INVALID';
修正无效的对象,需要使用ALTER … COMPILE命令来编译对象。
如果编译失败,通常需要首先使用DBA_DEPENDENCIES视图来确定编译错误的原因。
需要编译所有的无效对的对象时,可以使用补充的实用程序脚本。
Unix下的,
SQL> @?/rdbms/admin/utlrp
Windows下的,
SQL> @?\rdbms\admin\utlrp
14.2 修正无用的索引(Unusable Indexes)
如果某个过程对象(例如一个存储的PL/SQL函数或者一个视图)变为无效,那么DBA不必执行任何操作。首次访问这个对象时,Oracle会尝试重新进行编译,而且有可能编译成功。
但是某个索引由于某种原因变得无用,那么必须在能够使用这个索引之前,执行显式的修复操作。
在旧版本的Oracle数据库中,执行SQL语句时,如果指定会话试图执行无用的索引,那么就会立即返回一条错误消息,同时语句执行失败。10g版本的数据库则改变了这种方式,在10g版本中,如果某条语句试图使用无用的索引,那么这条语句会重新使用不需要该索引的执行计划。这样SQL语句的执行总是会成功,不过代价可能是性能的显著降低。上述方式由实例参数SKIP_UNUSABLE_INDEX控制。
查询变得无用的索引,通过DBA_INDEXES视图:
select owner, index_name, status from dba_indexes
where status='UNUSABLE';
修复无用的索引,需要使用ALTER INDEX … REBUILD命令重新创建该索引。
14.3 优化器统计(Optimizer Statistics)
任何一条SQL语句都可以通过许多不同的方式执行。对于性能来说,执行计划(execution plan)的选择十分重要。在Oracle数据库中,标准的做法是使用优化器(Optimizer Statistics)来选择执行计划。
优化器紧密依赖于一些统计量(statistics),从而能够评价众多可行的执行计划的效率以及选择某个执行计划。
统计量具有许多类型,其中主要有:
表统计量:DBA_TABLES视图中
列统计量:DBA_COLUMNS视图中
索引统计量:DBA_INDEXES以及INDEX_STATS视图中
对象统计量不是实时的,而是静态的。使用ANALYZE命令或者执行DBMS_STATS程序包中的过程能够手动的收集统计量,此外通过Database Control也能实现同样的功能。
注意:Oracle深信不应当专门收集统计量,而是应当自动化统计量的收集工作。如果数据库时使用DBCA创建的,那么就会将自动化的统计量收集配置为Scheduler管理的一个作业(第36章将对Scheduler进行详细讨论)。
14.4 性能指标(Performance Metrics)
Oracle提供了大约三百个动态性能视图(V$视图)。我们可以通过动态性能视图来访问与实例相关的以及与数据库特定区域相关的信息。
The dynamic performance views give access to a phenomenal amount of information about the instance, and (to a certain extent) about the database.
动态性能视图填充了来自实例或控制文件的信息;前缀为DBA、ALL、USER的视图填充了来自数据字典的信息。
动态性能视图在数据库启动阶段被创建,在指定实例的生存期内更新,在数据库关闭阶段被删除。这意味着动态性能视图包含了从数据库启动开始积累的值。因为关心的是所有的数据,所以动态性能视图无法告知特定期间发生的情况,而这段期间可能出现某些性能问题。基于这个原因,动态性能视图通常提供的是统计量而非指标。将这些统计量转换为指标是一个有一定技巧且比较费时的任务,不过10g版本的数据库通过提供自调整和性能监视使该任务变得更为简单。
As an example of a dynamic performance view, you cannot do better than V$SYSSTAT,
described here:
ocp10g> desc v$sysstat;
Name Null? Type
--------------------------------- -------- -------------
STATISTIC# NUMBER
NAME VARCHAR2(64)
CLASS NUMBER
VALUE NUMBER
STAT_ID NUMBER
This shows over three hundred statistics that are fundamental to monitoring activity:
ocp10g> select name, value from v$sysstat;
NAME VALUE
------------------------------ ----------
logons cumulative 356
logons current 34
opened cursors cumulative 154035
opened cursors current 5490
user commits 2502
user rollbacks 205
user calls 37574
recursive calls 6446648
recursive cpu usage 39263
session logical reads 4613746
session stored procedure space 0
<output truncated...>
Another critical view is V$SYSTEM_WAIT_CLASS, which summarizes the various
categories of problems that can cause sessions, or the whole database, to run slowly:
ocp10g> select wait_class,time_waited from v$system_wait_class
2 order by time_waited;
WAIT_CLASS TIME_WAITED
-------------------- -----------
Network 32
Application 44
Configuration 1545
Concurrency 4825
Commit 5212
Other 10483
System I/O 41787
User I/O 102743
Idle 13087012
This query shows that the worst problems since the instance started have been
“Idle” events. These are not problems: they are events such as server processes waiting
to receive SQL statements from user processes. The worst real problem is disk I/O
caused by user sessions, followed by disk I/O by the instance itself.
第15章 监视Oracle
In this chapter you will learn how to
• Set warning and critical alert thresholds
• Collect and use baseline metrics
• Use tuning and diagnostic advisors
• Use the Automatic Database Diagnostic Monitor (ADDM)
• Manage the Automatic Workload Repository
• Describe server-generated alerts
本章只是简单介绍,后面的章节将详细讨论。
15.1 自动工作负荷仓库(Automatic Workload Repository, AWR)
Oracle收集了大量与性能和动作的相关的统计信息。这些信息在内存中累加,并且被有规律的写入磁盘(也就是构成AWR的表)。最终这些信息会过期并被重写。
统计量收集的级别由实例参数STATISTICS_LEVEL控制,默认值是TYPICAL。
统计量在内存中(也就是在SGA内的数据结构中)积累。统计量被定时(默认为每小时一次)写入磁盘,也就是写入AWR。这被称为一次快照(snapshot)。只要生成了一个快照,MMON就会运行ADDM生成一个报告。
AWR是位于SYSAUX表空间内的一组表。这些表不能被重新定位,并且存在于SYSMAN模式中。
默认情况下,AWR快照保存7天,ADDM报告保存30天。
15.2 诊断与调整顾问程序
Oracle数据库预配置了一组顾问程序。
The Automatic Database Diagnostic Monitor (the ADDM)
The SQL Tuning Advisor
The SQL Access Advisor
The Memory Advisor
The Mean Time to Recover (MTTR) Advisor
The Segment Advisor
The Undo Advisor
15.3 服务器生成的告警
MMON进程还实现了服务器告警系统。这个进程会监视实例和数据库,如果某种指标越过了特定阈值,那么就会引发经过某个排队系统的告警信息。
第16章 管理撤销
In this chapter you will learn how to
• Monitor and administer undo
• Configure undo retention
• Guarantee undo retention
• Use the Undo Advisor
• Describe the relationship between undo and transactions
• Size the undo tablespace
对于数据库管理员来说,在9i版本之前,撤销管理是一个非常繁琐的问题。从9i版本开始,DBA可以选择自动撤销管理。
16.1 撤销数据的原因与实质
Oracle使用撤销段保证关系数据库的“原子性”、“一致性”以及“隔离性”。
撤销段在视图DBA_SEGMNETS中作为“TYPE 2 UNDO”的段类型列出,其中的ROLLBACK段也就是“TYPE 1 UNDO”,回滚段(ROLLBACK SEGMENT)只被保留用于向后兼容。
16.2 创建撤销表空间
ok
16.3 管理撤销
1、与撤销相关的错误:
error ORA-1555, snapshot too old.
error ORA-30036, unable to extend segment in undo tablespace.
2、下列3个初始化参数可以控制撤销:
UNDO_MANAGEMENT,
UNDO_TABLESPACE,
UNDO_RETENTION.
SQL> show parameter UNDO
NAME TYPE VALUE
------------------- ------ --------
undo_management string AUTO
undo_retention integer 900
undo_tablespace string UNDOTBS1
3、调整与监视撤销表空间
1. Connect to your instance with SQL*Plus as user SYSTEM.
2. Set up your session for displaying dates conveniently.
alter session set nls_date_format='dd-mm-yy:hh24:mi:ss';
3. Query V$UNDOSTAT as follows:
select begin_time,
end_time,
undoblks,
maxquerylen,
ssolderrcnt,
nospaceerrcnt
from v$undostat;
4. Interpret the results of the query. Note that the view has one row per tenminute
interval, showing you how much undo was generated, in blocks; how
long the longest query was, in seconds; and whether there were any “snapshot
too old” errors, or errors from transactions running out of undo space.
5. Calculate the minimum necessary size in bytes for your undo tablespace that
will prevent errors, given your current activity data, with this query:
select
(select max(undoblks)/600 * max(maxquerylen) from v$undostat)
*
(select value from v$parameter where name='db_block_size')
from dual;
第17章 处理锁定
In this chapter you will learn how to
• Detect and resolve lock conflicts
• Manage deadlocks
• Describe the relationship between transactions and locks
• Explain lock modes within the Oracle Database 10g
17.1 共享锁与排他锁
排他锁,也叫独占锁(Exclusive Locks):“排他锁”锁定某条记录的的目的是为了防止其他会话对其进行更新,但是其他会话可以随时执行读取操作。
共享锁(Shared Locks):“共享锁”锁定某个表的目的是为了防止另一个会话获得这个表上的排他锁(再以存在共享锁的情况下无法再获得排他锁)。
17.2 DML锁与DDL锁
所有DML语句都至少需要两种锁定:受影响记录上的排他锁(独占锁),以及包含受影响记录的表上的共享锁。
执行DDL需要所涉及对象上的排他锁。
17.3 排队机制(The Enqueue Mechanism)
请求锁定需要排队。
如果不希望某个会话在无法获得锁定的情况下进行排队,那么避免排队的唯一方式是:SELECT … FOR UPDATE命令的WAIT或者NOWAIT子句。
17.4 锁定争用(Lock Contention)
锁定争用是由用户同时访问相同的数据而导致的。设计不当的软件会是这种问题更加严重,但是大体上锁定争用是正常数据库活动的一部分。
不过在紧急情况下,DBA能够通过终止过长时间拥有过多锁定的会话来解决锁定争用问题。
alter system kill session '138,6';
17.5 死锁(Deadlocks)
略
死锁是一种程序设计错误。发生死锁错误的原因是代码试图执行在逻辑上不可能的操作。
注意:除了报告死锁的发生之外,DBA不需要完成针对死锁的操作。死锁问题是由Oracle数据库自动解决的。
第18章 配置数据库的备份与恢复
In this chapter you will learn how to
• Describe the basics of database backup, restore, and recovery
• Identify the types of failure that may occur in an Oracle database
• Describe ways to tune instance recovery
• Identify the importance of checkpoints, redo logfiles, and archived logfiles
• Configure archivelog mode
• Configure a database for recoverability
18.1 备份与恢复问题
暂时略,
补充针对DBA的一些指导意见,非常重要,见我的笔记
18.2 失败类别
略 见我的笔记
1、 语句失败
2、 用户进程失败
3、 网络失败
4、 用户错误
5、 介质失败
6、 实例失败
实例失败是实例的无序关闭,通常称为崩溃(crash)。
18.3 实例恢复
大体上,实例恢复只不过是使用联机重做日志的内容将数据库高速缓存区重新构建至崩溃前的状态。完成上诉操作后,就能打开数据库。略,见我的笔记
实例恢复是自动完成的。怎么怎样才能调用实例恢复呢,答案是使用START UP命令。
与检查点的关系略,见我的笔记
18.4 实例恢复与MTTR
本练习实例说明了检查点对实例失败后MTTR的影响。
18.5 MTTR顾问程序
略
18.6 配置数据库的可恢复性
略,见我的笔记
为了保证数据库库具有最大程度的可靠性,必须复用控制文件与联机重做日志,必须在归档模式中运行数据库,同时也必须复用归档日志文件,此外还必须定期备份数据库(第19章详细介绍备份,第24章还将详细讨论)。
控制文件的任何副本损坏都会导致数据库崩溃。
If a member of a redo logfile group is damaged or missing, the database will remain
open if there is a surviving member. This contrasts with the controlfile, where damage
to any copy will crash the database immediately. Similarly, groups can be added or
removed and members of groups can be added or moved while the database is open,
as long as there are always at least two groups, and each group has at least one valid
member.
18.6.1 复用控制文件
这个地方需要仔细研究,暂时跳过
应该可以使用RMAN恢复???
未上机。报这个错误:
复用控制文件:
1、首先关闭数据库
2、使用操作系统命令复制或移动控制文件。
3、在nomount模式中启动数据库
4、执行alter system set control_files=… 命令.
5、打开数据库
SQL> conn /as sysdba
已连接。
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup nomount
ORACLE 例程已经启动。
Total System Global Area 121634816 bytes
Fixed Size 787748 bytes
Variable Size 95419100 bytes
Database Buffers 25165824 bytes
Redo Buffers 262144 bytes
SQL> alter system set control_files ="D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\CONTROL01.CTL, D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\CONTROL02.CTL, D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\CONTROL03.CTL, D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\CONTROLbk.CTL";
ORA-00972: 标识符过长
SQL> startup nomount
ORACLE 例程已经启动。
Total System Global Area 121634816 bytes
Fixed Size 787748 bytes
Variable Size 95419100 bytes
Database Buffers 25165824 bytes
Redo Buffers 262144 bytes
SQL> alter system set control_files ="D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\C
ONTROL01.CTL, D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\CONTROL02.CTL";
alter system set control_files ="D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\CONTRO
L01.CTL, D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\CONTROL02.CTL"
*
第 1 行出现错误:
ORA-02095: ????????????
SQL> startup mount
ORA-01081: ????????? ORACLE - ??????
SQL> alter database open;
alter database open
*
第 1 行出现错误:
ORA-01507: ??????
SQL> startup mount
ORA-01081: ????????? ORACLE - ??????
SQL>
书上的例子是:
18.6.2 保护联机重做日志
搜“复用重做日志”的相关命令 。大概是add redo log member …
18.6.3 将数据库转换至归档(archivelog)模式
ok
第19章 备份Oracle数据库
In this chapter you will learn how to
• Create consistent database backups
• Back up your database without shutting it down
• Create incremental backups
• Automate database backups
• Monitor the flash recovery area
• Describe the difference between image copies and backup sets
• Describe the different types of database backups
• Back up a controlfile to trace
• Manage backups
19.1 备份工具
直接使用操作系统实用程序(例如Windows操作系统中的copy或Winzip,Unix操作系统中的cp、tar、或者cpio)就可以进行备份操作。但是,Oracle强烈建议使用RMAN(Recovery Manager)。
19.2 概念与术语
19.2.1 全部备份与部分部分(Whole or Partial Backups)
通常,如果数据库没有在归档模式中运行,那么总是应当进行全部备份。
19.2.2 完整备份与增量备份(Full or Incremental Backups)
19.2.3 脱机备份与联机备份(Offline or Online Backups)
即冷备份与热备份;一致备份与不一致备份。
术语“一致”要求读者理解Oracle的体系结构:为了使某个数据文件是一致的,这个数据文件中的所有文件块必须都执行过检查点进程并被关闭。在正常的运行中,数据库是不一致的。许多被更行的数据被复制至数据库高速缓存区,但是尚未写回磁盘。只有使用IMMEDIATE、TRANSACTIONAL或者NORMAL关闭选项干净地关闭数据库,即有序地关闭数据库,才能保证数据文件的一致性。
19.2.4 映像副本与备份集(Image Copies or Backup Sets)
映像副本(Image Copies):是某个文件的备份,并且每个字节都与原文件相同。显然,映像副本不可能是增量备份,也不可能在磁带设备上生成。
备份集(Backup Sets):是由RMAN生成的一种专有结构。备份集可以拥有增量备份;备份集不会包含空的数据块;备份集可以启用数据压缩。
19.3 RMAN的设置
本节针对的是Database Control上的RMAN的设置。
19.3.1 设备的设置
19.3.2 备份集的设置
19.3.3 策略的设置
19.4 运行数据库的一个完整备份
--全备份脚本_plus_archivelog
run{
backup full tag 'lvhj_plus_archivelog' database
include current controlfile format 'd:\backup\lvhjfull_%d_%t_%r_%s'
plus archivelog format 'd:\backup\lvhjarch_%d_%t_%r_%s' delete all input;
}
19.5 控制文件的备份(使用SQL*Plus备份控制文件以便进行跟踪)
见我的笔记
Using SQL*Plus, perform a controlfile backup-to-trace, and inspect the generated file.
1. Connect with SQL*Plus as user SYSTEM.
2. Issue this command:
SQL> alter database backup controlfile to trace;
3. Locate your user dump destination.
SQL> show parameters user_dump_dest;
4. From an operating system prompt, change to the user dump destination
directory.
5. Identify the newest file in the directory. For example, on Windows use
dir /od
or on Unix,
ls -ltr
The newly generated trace fi le will be the last fi le listed.
6. Open the trace file with any editor you please and study the contents. The
critical section is the CREATE CONTROLFILE command, which will resemble
this:
CREATE CONTROLFILE REUSE DATABASE "OCP10G" NORESETLOGS ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 454
LOGFILE
GROUP 1 (
'C:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\REDO01.LOG',
'C:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\REDO01B.LOG'
) SIZE 10M,
GROUP 2 (
'C:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\REDO02.LOG',
'C:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\REDO02B.LOG'
) SIZE 10M,
GROUP 3 (
Chapter 19: Backing Up an Oracle Database
15
PART I
'C:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\REDO03.LOG',
'C:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\REDO03B.LOG'
) SIZE 10M
-- STANDBY LOGFILE
DATAFILE
'C:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\SYSTEM01.DBF',
'C:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\UNDOTBS01.DBF',
'C:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\SYSAUX01.DBF',
'C:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\USERS01.DBF',
'C:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\EXAMPLE01.DBF',
'C:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\UNDO2-01.DBF'
CHARACTER SET WE8MSWIN1252
;
19.6 管理RMAN备份
RMAN的默认备份地位闪回恢复区。
闪回恢复区受两个参数:
DB_RECOVERY_FILE_DEST 和DB_RECOVERY_FILE_DEST_SIZE的控制。这两个参数都不具有默认值,可是在使用DBCA创建数据库时,DBCA会将DB_RECOVERY_FILE_DEST参数设置为ORACLE_HOME主目录中的flash_recovery_erea目录,同时会将DB_RECOVERY_FILE_DEST_SIZE参数设置为2G字节。
通过视图v$recovery_file_dest可以监视闪回恢复区。
SQL> select * from v$recovery_file_dest;
NAME SPACE_LIMIT SPACE_USED SPACE_RECLAIMABLE NUMBER_OF_FILES
-------------------------------------------------------------------------------- ----------- ---------- ----------------- ---------------
D:\oracle\product\10.1.0\flash_recovery_area
这里有问题,和书上的查询结构不一样,需上网查一下
第20章 恢复Oracle数据库
In this chapter you will learn how to
• Recover from loss of a controlfile
• Recover from loss of a redo logfile
• Recover from loss of a system-critical datafile
• Recover from loss of a nonsystem-critical datafile
20.1 回复结构与进程
在介质失败后,根据受损文件的类型,存在不同的恢复方法。
恢复受损的控制文件
恢复受损的控制文件恢复受损的复用联机重做日志
恢复受损的数据文件
见我的笔记
In the Oracle environment, “restore” means to replace a damaged or missing file with a backup; “recover” means to synchronize the file with the rest of the database by use of archivelogs.
书P392
20.2 恢复受损的控制文件
事实上,控制文件受损时,实例会立即终止。此时,DBA第一反应依然是尝试启动崩溃的实例。启动将在NOMOUNT模式中失败,同时会给出相应的错误消息。
处理方法有多种,比较好的方法是:将幸存的控制文件复制至一个新的文件,然后编辑CONTROL_FILES初始化参数,从而将对受损文件的引用修改为对新文件的引用。
这个地方需要仔细研究,暂时跳过
应该可以使用RMAN恢复???
未上机。报这个错误:
复用控制文件:
1、首先关闭数据库
2、使用操作系统命令复制或移动控制文件。
3、在nomount模式中启动数据库
4、执行alter system set control_files=… 命令.
5、打开数据库
SQL> conn /as sysdba
已连接。
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup nomount
ORACLE 例程已经启动。
Total System Global Area 121634816 bytes
Fixed Size 787748 bytes
Variable Size 95419100 bytes
Database Buffers 25165824 bytes
Redo Buffers 262144 bytes
SQL> alter system set control_files ="D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\CONTROL01.CTL, D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\CONTROL02.CTL, D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\CONTROL03.CTL, D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\CONTROLbk.CTL";
ORA-00972: 标识符过长
SQL> startup nomount
ORACLE 例程已经启动。
Total System Global Area 121634816 bytes
Fixed Size 787748 bytes
Variable Size 95419100 bytes
Database Buffers 25165824 bytes
Redo Buffers 262144 bytes
SQL> alter system set control_files ="D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\C
ONTROL01.CTL, D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\CONTROL02.CTL";
alter system set control_files ="D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\CONTRO
L01.CTL, D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\CONTROL02.CTL"
*
第 1 行出现错误:
ORA-02095: ????????????
SQL> startup mount
ORA-01081: ????????? ORACLE - ??????
SQL> alter database open;
alter database open
*
第 1 行出现错误:
ORA-01507: ??????
SQL> startup mount
ORA-01081: ????????? ORACLE - ??????
SQL>
20.3 恢复受损的复用联机重做日志
ok
20.4 恢复受损的数据文件
第27、28章将详细讨论
见我的笔记。
第21章 管理Oracle数据库中的全球化特性
In this chapter you will learn how to
• Customize language-dependent behavior for the database and individual sessions
• Specify different linguistic sorts for queries
• Use datetime datatypes
• Query data using case-insensitive and accent-insensitive searches
• Obtain Globalization support configuration information
21.1 全球化特性
21.1.1字符集(Character Sets)
字符集(Character Sets)P408
21.1.2语言支持
21.1.3地区支持
21.1.4 其他NLS设置
21.2 使用全球化支持功能
我们可以在下列任一级别或全部5个级别上指定全球化:
The database
The instance
The client environment
The session
The statement
这些级别按照从低到高的顺序列出。
21.2.1 选择字符集
在数据库创建阶段,选择数据库字符集以及DB_BLOCK_SIZE参数是我们需要作出的最重要的两个决定。其余设置可以在数据库创建之后修改,而这两个参数DB_BLOCK_SIZE参数绝对不能改变,而数据库字符集虽然从理论上可以被改变,但是事实上不可行。
21.2.2 改变数据库字符集
数据库字符集虽然从理论上可以被改变,但是事实上不可行。
Oracle提供了两个有助于解决字符集修改的工具:数据库字符集扫描程序(Database Character Set Scanner)和语言与字符集文件扫描程序(Language and Character Set File Scanner)。在Unix系统中为csscan和lcsscan。
21.2.3 数据库内的全球化
select * from nls_database_parameters;
21.2.4 实例级别的全球化
select * from nls_instance_parameters;
两个视图的区别:
select * from nls_database_parameters
minus
select * from nls_instance_parameters;
PARAMETER VALUE
----------------- -------------------
NLS_CALENDAR GREGORIAN
NLS_CHARACTERSET ZHS16GBK
NLS_COMP BINARY
NLS_CURRENCY $
NLS_DATE_FORMAT DD-MON-RR
NLS_DATE_LANGUAGE AMERICAN
NLS_DUAL_CURRENCY $
NLS_ISO_CURRENCY AMERICA
NLS_NCHAR_CHARACTERSET AL16UTF16
NLS_NUMERIC_CHARACTERS .,
NLS_RDBMS_VERSION 10.1.0.2.0
NLS_SORT BINARY
NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM
NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZR
NLS_TIME_FORMAT HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZR
16 rows selected
21.2.5 客户端环境设置
注意:DBA完全不能控制终端用户对NLS_LANG环境变量的设置。如果应用程序容易受到全球化的影响,那么编程人员就应当考虑到这个问题,同时在会话内控制全球化设置。
21.2.6 会话级别的全球化设置
SQL> select * from nls_session_parameters;
PARAMETER VALUE
------------------------------ ---------------
NLS_LANGUAGE SIMPLIFIED CHINESE
NLS_TERRITORY CHINA
NLS_CURRENCY ¥
NLS_ISO_CURRENCY CHINA
NLS_NUMERIC_CHARACTERS .,
NLS_CALENDAR GREGORIAN
NLS_DATE_FORMAT DD-MON-RR
NLS_DATE_LANGUAGE SIMPLIFIED CHINESE
NLS_SORT BINARY
NLS_TIME_FORMAT HH.MI.SSXFF AM
NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZR
NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZR
NLS_DUAL_CURRENCY ¥
NLS_COMP BINARY
NLS_LENGTH_SEMANTICS BYTE
NLS_NCHAR_CONV_EXCP FALSE
17 rows selected
下面的两种方法可以得到相同的结果:
SQL> alter session set nls_date_format='dd.mm.yyyy';
Session altered.
SQL> execute dbms_session.set_nls('nls_date_format','''dd.mm.yyyy''');
PL/SQL procedure successfully completed.
21.2.7 语句级别的全球化设置
21.3 语言排序与选择
ok
21.4 使用时区
ok
第22章 配置侦听器的安全性
In this chapter you will learn how to
• Secure the listener
• Remove the default EXTPROC entry
• Add a separate listener to handle external procedure calls
22.1 保护侦听器的安全
22.1.1 侦听器的操作系统身份验证
侦听器管理命令默认的安全性基于操作系统用户ID。这种情况完全类似于数据库SYSDBA连接的操作系统身份验证,这种身份验证会跳过口令文件身份验证。
22.1.2 侦听器的口令身份验证
通过Net Manager、Database Control、lsnrctl实用程序或者手工编辑listener.ora文件都可以启用或者设置侦听器的口令。
22.2 控制对数据库的访问
ok
22.3 外部过程
暂时用不到。
第23章 开始使用Recovery Manager
In this chapter you will learn how to
• Configure database parameters that affect RMAN operations
• Change RMAN default settings with CONFIGURE
• Manage RMAN’s persistent settings
• Start RMAN utility and allocate channels
23.1 RMAN特性
23.2 RMAN的组件
略
23.2.1 RMAN可执行程序
23.2.2目标数据库
23.2.3 服务器进程与通道
P450
23.2.4 RMAN存储仓库(repository)
23.2.5 恢复目录(Recovery Catalog)
23.2.6 介质管理器(Media Management Library)
23.2.7 辅助数据库(Auxiliary Database)
23.2.8 闪回恢复区(Flash Recovery Area)
23.3 配置RMAN
23.3.1 环境变量与实例参数
SQL> alter session set NLS_DATE_FORMAT='yyyy-mm-dd hh24:mi:ss';
日期/时间格式不仅对于RMAN输出的显示十分重要,而且也作为格式掩码用于某些操作(例如还原与回复操作)的日期/时间参数。
另一个非常重要的参数是NLS_LANG。这个变量能够向RMAN通知数据库字符集。如果数据库被加载或打开,那么就不存在任何问题,RMAN能够通过读取控制文件发现所使用的数据库字符集。但是,如果数据库只处于nomount模式中,那么RMAN会认定数据库使用默认的US7ASCII,而这可能是错误的。为了避免可能出现的问题,就需要在启动RMAN之前设置
To avoid possible problems, set the variable
before launching RMAN. For example,
$ export NLS_LANG=american_america.we8iso8859p15
on Unix, or
C:> set NLS_LANG=american_america.we8iso8859p15
on Windows.
ok,需要再找一些资料扩充一下本实验
23.3.2 连接数据库
C:\Documents and Settings\Owner>rman target /
恢复管理器: 版本10.1.0.2.0 - Production
Copyright (c) 1995, 2004, Oracle. All rights reserved.
连接到目标数据库: OCP10G (DBID=3542321520)
RMAN>
一个更加详细的例子:
C:\> rman target sys/oracle@ocp10g catalog rman/rman@catdb
23.3.3 配置RMAN的永久设置
注意:SHOW命令被格式化为一个脚本。我们可以复制粘贴、编辑和执行这些行。
23.3.4 通道分配
23.3.5 RMAN备份的内容
控制文件的备份:
INCLUDE CURRENT CONTROLFILE
CONFIGURE CONTROLFILE AUTOBACKUP ON
控制文件的还原:
RESTORE CONTROLFILE FROM AUTOBACKUP
23.3.6 配置备份的保留
保留策略存在两种选项:冗余级别、恢复窗口。
默认为冗余级别
CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
23.3.7 重写默认配置
第24章 使用RMAN备份数据库
In this chapter you will learn how to
• Use the RMAN BACKUP command to create backup sets and image copies
• Enable block change tracking
• Manage the backups and image copies taken with RMAN with the LIST and REPORT commands
24-1 创建备份集
--备份单个表空间的脚本
run{
backup as backupset
tag 'lvhj_rman_tablespace'
format 'd:\backup\lvhj_%d_%t_%r_%s_%u.dbf'
tablespace eygle;
}
--全备份脚本_plus_archivelog
run{
backup full tag 'lvhj_plus_archivelog' database
include current controlfile format 'd:\backup\lvhjfull_%d_%t_%r_%s'
plus archivelog format 'd:\backup\lvhjarch_%d_%t_%r_%s' delete all input;
}
--RMAN可以使用下列几种方式备份控制文件:
1、backup current controlfile format 'd:\backup\control_111.ctl';
backup as backupset current controlfile format 'd:\backup\control_222.ctl';
2、backup as copy current controlfile format 'd:\backup\control01.ctl';
3、backup tablespace system include current controlfile;
4、configure controlfile autobackup on;
--增量备份
首先执行0级备份:
RMAN> configure channel 1 device type disk format 'd:\backup\bk_incremental_%u';
RMAN> backup incremental level=0 database plus archivelog delete input;
然后修改数据,进行一些变动
再来执行1级备份:
RMAN> backup incremental level=1 database plus archivelog delete input;
24-2管理与监视RMAN备份(list、report与delete命令)
list:
list backup;
list copy;
list backup of database;
list backup of datafile1;
list backup of tablespace eygle;
list backup of archivelog all;
在上面的示例中,最后都可以添加关键字VERBOSE(这是默认应用的关键字)或SUMMARY。
为了修改LIST命令输出中日期与时间格式,需要在启动RMAN可执行程序之前,设置环境变量NLS_DATA_FORMAT。
$ export NLS_DATE_FORMAT='dd-mm-yy hh24:mi:ss'
C:\> set NLS_DATE_FORMAT='dd-mm-yy hh24:mi:ss'
report与delete:
report schema;
report need backup;
组合命令:
第一条命令能够应用已配置的保留策略并列出不再需要的所有备份集与映像副本;
第二条命令则可以删除认为不再需要的备份。
report obsolete;
delete obsolete;
report obsolete redundancy 2;
delete bosolete redundancy 2;
delete命令可以通过数字或标记来删除单独的备份
delete backupset 5;
第25章 诊断Oracle数据库的问题
In this chapter you will learn how to
• Use the alert log and database trace files for diagnostic purposes
• View alerts using Enterprise Manager
• Adjust thresholds for tracked metrics
• Control the size and location of trace files
25.1 告警日志
告警日志的位置由实例参数BACKGROUND_DUMP_DEST确定;告警日志的名称为alert_<SID>.log,其中SID是实例的名称。
告警日志中的报告消息包含了下列内容:
All startup and shutdown commands, with the time and mode of the operation. The startup times will include the timings of the transitions from NOMOUNT to MOUNT to OPEN, which are of vital importance for assessing whether the mean-time-to-recover figure matches standards agreed with the users.
All operations involving physical structures: ALTER DATABASE commands such as creating, dropping, and renaming datafiles and redo logs. Resize operations on datafiles and taking datafiles on and offline are also recorded.
Tablespace operations, such as DROP and CREATE. Also putting tablespaces into and out of hot backup mode for user-managed backups.
All log switches and archives, including the names of the affected files.
The nondefault initialization parameters used to start the instance. Also any subsequent ALTER SYSTEM commands that change parameters.
因此,告警日志包含了影响数据库和实例的各种操作的连续历史记录以及告警与错误。
25.2 后台跟踪文件(Background Trace Files)
Oracle实例的后台进程会在遇到问题时将跟踪文件写至BACKGROUND
_DUMP_DEST参数所指定的目录。
与告警日志不同的是,跟踪文件始终意味着错误(通常是重要的错误)。
25.3 服务器生成的告警
25.3.1 告警的类型
告警具有两种形式:阈值告警和非阈值告警。阈值告警(threshold)是指经过一段时间积累而导致的情景(例如表空间告警)。因为这些告警会一直持续直至被清除,所以也被称为有状态(stateful)告警。非阈值(nonthreshold)告警会通知所发生的不可预期时间(例如快照过旧)。出现这种错误时,错误需要被立即解决,同时告警也将成为历史。因为这些告警不会持续(一旦出现就会消失),所以也被称为无状态(stateless)告警。
V$ALERT_TYPE视图列出了能够配置的告警的指标。
SQL> select distinct(internal_metric_category)
from v$alert_types;
INTERNAL_METRIC_CATEGORY
---------------------------------Database_Resource_Usage
Recovery_Area
Snap_Shot_Too_Old
Suspended_Session
UserBlock
configuration
file
instance_efficiency
instance_throughput
problemTbsp
rac_global_cache
service
sga_pool_wastage
system_response_time_per_call
wait_bottlenecks
wait_sess_cls
17 rows selected
25.3.2 告警系统的体系结构
服务器告警系统非常有效的原因在于——服务器告警系统使用了内存中能够直接访问的统计量,而不需要向查询视图一样将信息通过某个V$视图转移至会话。告警写入任何订阅客户都能够读取的队列,并且这些客户能够基于所读取的告警执行适当的动作。因此,服务器能够在内部自动地监视自身。
最后需要指出的一点是,如果队列存在问题,那么告警系统仍然能够运行,此时消息会被写入告警日志。只有在这个时候,告警日志和服务器告警系统才会发生联系。
也就是说,告警日志和服务器告警系统完全分离。
25.3.3 查看告警信息
查看告警信息,可以通过两个视图:dba_outstanding_alerts 和dba_alert_history。
25.3.4 建立通知规则
25.3.5 编辑阈值
DBMS_SERVER_ALERT能够提供接口,这个程序包所包含的SET_THRESHOLD过程能够为发出警告告警(warning alert)和临界告警(critical alert)设置标准(set the criteria)。
25.4 用户跟踪文件(User Trace Files)
后台跟踪文件时发生问题时自动生成的。用户跟踪文件只能在需要跟踪会话实际操作的时候根据要求生成。通常,用户跟踪文件用来调整应用程序。
有两个级别的跟踪:实例级别的SQL跟踪、会话级别的SQL跟踪。
通过Database Control启用跟踪更为容易。
第26章 恢复非关键的损失
In this chapter you will learn how to
• Recover temporary tablespaces
• Recover a redo log group member
• Recover index tablespaces
• Recover read-only tablespaces
• Re-create the password file
在Oralce中,某些文件受损不必使用还原与恢复例程,并且不会导致实例终止。这样的损失被认为是“非关键的” ,非关键的文件不必还原,而是可以被替换。
关键文件是组成SYSTEM表空间以及当前活动的撤销表空间。
26-1 恢复受损的临时表空间
我们不需要备份临时表空间,事实上RMAN从不会备份临时表空间。
处理临时数据时不会生成撤销或重做。
查看临时表空间的及其临时文件的大小
select * from dba_temp_files
查看用户的临时表空间
select username,temporary_tablespace from dba_users
虽然无法备份临时文件,但是可以重建临时文件。
方法一:
1、在受损的临时表空间内添加另一个临时文件。
alter tablespace temp add tempfile
'D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\TEMP02.DBF' size 1024m;
2、将受损的临时文件脱机。
alter database tempfile
'D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\TEMP01.DBF' offline;
3、删除受损的临时文件。
alter database tempfile
'D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\TEMP01.DBF' drop;
方法二:
1、创建一个新的临时表空间。
create temporary tablespace temp_new tempfile
'D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\TEMP03.DBF' size 1024m;
2、通过ALTER DATABASE命令将用户切换到这个新的临时表空间。
alter database default temporary tablespace temp_new;
3、删除受损的临时表空间。
drop tablespace temp including contents and datafiles;
26-2 恢复受损的联机重做日志
查询联机重做日志文件组(针对文件组)
select * from v$log;
查询联机重做日志文件(针对每个成员)
select * from v$logfile order by group#
因为无法备份联机重做日志文件,所以一旦某个成员受损,这个成员(也就是联机重做日志文件)就无法被还原,但是却能够使用其他成员进行替换。
方法一:
如果只有文件受损而磁盘未受损,使用clear logfile命令删除已有的日志文件,并创建新的日志文件。
alter database clear logfile group 1;
方法二:
如果磁盘受损,那么由于oralce无法再原有位置创建文件,因此clear logfile命令将会失败。在这种情况下,需要先使用DROP命令清除原始的成员,如果该成员依然存在,则进行物理删除,然后使用ADD命令在不同的磁盘位置添加一个替换的成员。
alter database drop logfile member
'D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\REDO01.LOG';
在操作系统下,如果该成员依然存在,则进行物理删除:
del D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\REDO01.LOG
alter database add logfile member
'D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\NEWDIR\REDO01.LOG' to group 1;
26-3 恢复受损的索引表空间
如果某个索引不可用,那么几乎所有的DML操作都会锁定相应的表:也就是说,无法执行任何插入或者删除的操作,并且影响被索引的列的更新操作会失败。
虽然如此,但是在某些情况下重建索引比还原与恢复包含这些索引的表空间更为快捷。此时,索引可以视为“不重要的” 数据,并且不必包含在备份与恢复例程中。
尽管索引被视为不重要的数据,但是专门为索引段创建一个或多个表空间却是至关重要的。总之,这种做法通常被认为是一种良好的习惯。
可以用下面的语句检查索引数据是不是索引表空间内的唯一数据(假定索引表空间名为INDX):
select owner,segment_name,segment_type,tablespace_name from dba_segments
where tablespace_name='INDX' and segment_type<>'INDEX';
索引表空间数据文件受损会在告警日志和后台跟踪文件显示消息以及在动态性能视图中插入条目。
select name,status from v$datafile;
select * from v$recover_file
实验:
创建一个索引表空间:
create tablespace indx datafile
'D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\indx01.DBF' size 10m;
新建一个表,并且创建索引:
create table indtest (c1 number);
create index ind1 on indtest(c1) tablespace indx;
仿真索引数据文件受损:
alter database datafile
'D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\indx01.DBF' offline drop;
如果索引不可用,那么针对此表的DML操作无法执行:
insert into indtest values(1);
这时会报错ORA-00376和ORA-01110。
删除新建的索引表空间:
drop tablespace indx including contents and datafiles;
重建索引表空间和索引:
create tablespace indx datafile
'D:\ORACLE\PRODUCT\10.1.0\ORADATA\OCP10G\indx01.DBF' size 10m;
create index ind1 on indtest(c1) tablespace indx;
删除新建的表空间和表:
drop tablespace indx including contents and datafiles;
drop table indtest;
26-4 恢复受损的只读表空间
当将某个表空间设置为只读时(ALTER TABLESPACE tablespace_name READ ONLY),数据文件会执行检查点进程(所有的脏缓冲区都被写至磁盘),当前的系统改变号(SCN)会被标注,同时存储了SCN的数据文件头部被冻结。
某个文件可用的一个前提是:这个文件应当与数据库的其余部分同步,也就是说数据文件头部的SCN是最新的。只读表空间不适用于上述规则。即使SCN是过时的,Oracle仍然能够打开只读表空间数据文件。但是,我们无法对这种文件进行写操作。
为什么可以从只读表空间内清除对象?这是因为drop命令只是更新数据字典,但是不更新对象本身。
注意:在将某个只读表空间的状态从只读变化为读/写时,必须立即生成这个表空间的新备份。
26-5 恢复受损的口令文件
搜一下“重建口令文件”的命令。
第27章 数据库的不完全恢复
In this chapter you will learn how to
• Recover the controlfile
• Explain reasons for incomplete recovery
• Perform incomplete recovery using Enterprise Manager
• Perform incomplete recovery using RMAN
• Perform incomplete recovery using SQL
• Perform database recovery following a RESETLOGS operation
27.1 完全恢复
完全恢复具有下列4个步骤:
1、 使受损的数据文件脱机。
2、 还原受损的数据文件。
3、 恢复受损的数据文件。
4、 使已恢复的数据文件联机。
--完全恢复
run{
startup mount;
restore database;
recover database;
alter database open;
}
--完全恢复(针对单个表空间)
run{
sql "alter tablespace eygle offline immediate";
restore tablespace eygle example;
recover tablespace eygle example delete archivelog;
sql "alter tablespace eygle online";
}
--备份单个表空间的脚本
run{
backup as backupset
tag 'lvhj_rman_tablespace'
format 'd:\backup\lvhj_%d_%t_%r_%s_%u.dbf'
tablespace eygle;
}
--全备份脚本_plus_archivelog
run{
backup full tag 'lvhj_plus_archivelog' database
include current controlfile format 'd:\backup\lvhjfull_%d_%t_%r_%s'
plus archivelog format 'd:\backup\lvhjarch_%d_%t_%r_%s' delete all input;
}
27.2 需要进行不完全恢复的场合
通常,下列两种原因会导致执行不完全恢复:
无法进行完全恢复
有意丢失某些数据(用户误操作导致了错误的数据)。
27.3 不完全恢复的方法
不完全恢复具有下列4个步骤:
1、 加载数据库。
2、 还原所有数据文件,同时可以选择还原控制文件。
3、 将数据库恢复至某个时间点、序列或系统改变号SCN。
4、 使用RESETLOGS打开数据库。
5、 完整备份数据库
不完全恢复的最优方法:P526
在开始不完全恢复之前,要执行的操作时关闭数据库并进行完整备份。 … 一旦认定需要进行不完全恢复时就立即关闭数据库是至关重要的。
附对应的英文:
As with complete recovery, the best practice is indeed to practice. The procedure is
completely reliable, but the slightest mistake may be disastrous. It is vital to follow
all the steps with great care. When doing an incomplete recovery, you do not want
to have any doubts about the procedure to be followed; it is frequently said that
most problems with incomplete recovery are caused by the DBA making a mistake.
Before starting an incomplete recovery, if at all possible perform a whole closed
backup of the database. This means that whatever happens during the restore and
recover operation, you will be no worse off than before and can try again. At the very
least, back up all the archive logs. The backup should be closed in order to prevent
any users doing any work, because such work will be lost after the incomplete recovery.
For this reason, it is vital to close the database as soon as you decide that an incomplete
recovery is needed.
After a successful incomplete recovery, carry out another whole backup. With
release 10g of the database, this is not strictly speaking necessary (it was essential
with earlier releases) but is still good policy.
Check that the incomplete recovery really was successful. For example, it may be
that the user says the error occurred at 10:00, and so you recover until 09:59. But then
you find that the user’s watch is not synchronized with the server’s clock, and that in
fact as far as the database is concerned the error occurred at 09:58, and your recovery
has repeated it. Check that the operation was successful before allowing users to
connect, perhaps by opening the database with STARTUP RESTRICT. You do not
want them to lose more work, if you have to repeat the exercise.
Remove any archive logs from the previous incarnation of the database (you
should have backed them up already) to prevent any possibility of mixing up logs
from before and after the recovery.
27.4 使用用户托管的备份进行不完全恢复
略
27.5 使用RMAN的不完全恢复
--不完全恢复
run{
shutdown immediate;
startup mount;
sql "alter session set NLS_DATE_FORMAT=''dd-mm-yy hh24:mi:ss''";
set until time '29-12-09 17:17:55';
restore database;
recover database;
alter database open resetlogs;
}
27.6 控制文件的恢复
需要强调的一点是:我们极少进行控制文件的恢复。控制文件受到(或者应当受到)不同设备上不同复用副本的保护。丢失控制文件的所有副本几乎是不可能的。
但是,如果当前的控制文件的所有副本已经丢失,那么我们可以从备份中还原控制文件,也可以重新创建控制文件。
即使控制文件未被损坏、但是需要还原控制文件的一种特殊情况是:需要将数据库恢复至数据库的物理结构与当前结构不同的时间点(也就是表空间被删除的情况)。
RMAN可以使用下列几种方式备份控制文件:
1、backup current controlfile format 'd:\backup\control_111.ctl';
backup as backupset current controlfile format 'd:\backup\control_222.ctl';
2、backup as copy current controlfile format 'd:\backup\control01.ctl';
3、backup tablespace system include current controlfile;
4、configure controlfile autobackup on;
RMAN> restore controlfile from autobackup;
未上机
27.7 使用RESETLOGS操作进行恢复
使用10g版本之前的Oracle数据库时,不完全恢复需要执行第(5)个步骤:完整备份。原因略:P538。
使用10g版本时,我们可以使用在不完全恢复之前生成的备份。对于当前场景来说,来自前一个场景的备份与重做都是有效的。
不过,最好的策略仍然是在不完全恢复后立即生成一个完整备份。
对于使用RESETLOGS命令进行恢复的操作来说,至关重要的一点是:为归档日志生成名称时,应当使Oracle能够区分不同场景产生的日志。这些名称由实例参数LOG_ARCHIVE_FORMAT控制。下面给出了一个合理的设置:
alter system set log_archive_format='arch_%d_%t_%r_%s.log';
各变量的意义如下:
• %d The DBID, in hexadecimal
• %t The thread number (always 1, unless it is a clustered database)
• %r The incarnation number
• %s The log switch sequence number
查看每个归档日志所属的特定场景,通过V$ARCHIVED_LOG视图。
select name,resetlogs_id from v$archived_log;
第28章 使用Oracle Flashback Database
In this chapter you will learn how to
• Determine which flashback technology to use for each recovery situation
• Configure and use Flashback Database
• Monitor the Flashback Database
• Use the Enterprise Manager Recovery Wizard to flash back a database
• Manage (or maintain) the llash recovery area
本章讨论了Flashback Database,这是一种功能强大但是十分极端的功能,其作用等价于不完全恢复。
Flashback Database是Oracle10g的新增功能。在启用Flashback Database功能之后,数据库会定期将发生变化数据块的前镜像写入闪回日志的日志文件中,在进行数据库闪回时,这些数据块可是被直接复制回来以满足数据库的恢复需求,同时Redo Log可以被应用用于辅助数据库恢复到更精确的时间点,从而极大缩短了数据库的恢复时间。
注意:Flashback Database不能保证成功,只是有可能实现闪回。
28.1 不同的闪回方法
可用的闪回方法共有3种,每种方法都是使用一种不同的底层体系结构实现的。这几种不同的闪回方法具有不同的性能与局限性。读者需要理解修正不同错误类型所适用的闪回方法类型,这是至关重要的问题。
1、 Flashback Database数据库级闪回
2、 Flashback Query(Versions、Transactioin、Table)
3、 Flashback Drop
28.2 Flashback Database的体系结构
Flashback Database是Oracle10g的新增功能。在启用Flashback Database功能之后,数据库会定期将发生变化数据块的前镜像写入闪回日志的日志文件中,在进行数据库闪回时,这些数据块可是被直接复制回来以满足数据库的恢复需求,同时Redo Log可以被应用用于辅助数据库恢复到更精确的时间点,从而极大缩短了数据库的恢复时间。(摘自盖国强P348)
与重做日志不同的是,闪回日志不是变化的日志,而是将要发生变化的数据块的前镜像的日志。
Unlike the redo log, flashback logging is not a log of changes; it is a log of complete block images.
Flashback Database要求数据库位于archivelog模式中,并且还需要使用ALTER DATABASE OPEN RESETLOGS命令创建数据库的一个新场景
28.3 配置Flashback Database
闪回数据库特性默认是关闭的。
SQL> select flashback_on from v$database;
FLASHBACK_ON
------------
NO
1、确保数据库位于archivelog模式中
select log_mode from v$database;
2、建立一个闪回恢复区
SQL> show parameter recovery
NAME TYPE VALUE
------------------------------------ -----------
db_recovery_file_dest string …\flash_recovery_area
db_recovery_file_dest_size big integer 2G
3、为闪回保留目标设置生存期
SQL> show parameter flashback
NAME TYPE VALUE
------------------------------------ -----------
db_flashback_retention_target integer 1440
4、 干净的关闭和加载数据库
5、 启用闪回数据库特性
SQL> alter database flashback on;
6、 打开数据库。
28.4 监视Flashback Database
select RETENTION_TARGET,
ESTIMATED_FLASHBACK_SIZE,
FLASHBACK_SIZE
from v$flashback_database_log;
select OLDEST_FLASHBACK_SCN,
OLDEST_FLASHBACK_TIME,
from v$flashback_database_log;
select END_TIME,
FLASHBACK_DATA,
DB_DATA,
REDO_DATA,
ESTIMATED_FLASHBACK_SIZE
from v$flashback_database_stat;
select * from v$sgastat where name='flashback generation buff';
28.5 使用Flashback Database
SQL*Plus、RMAN、Database Control都是与Flashback Database的接口。不管选择哪一种工具,Flashback Database的使用方法都是相同的:
1、 关闭数据库
2、 加载数据库
3、 闪回至某个时间点、SCN或者日志切换序列号。
4、 使用RESETLOGS命令打开数据库。
一、 使用SQL*Plus进行闪回
flashback database to timestamp
to_timestamp('2009-12-01 10:00:00','yyyy-mm-dd hh24:mi:ss');
过程略P554(注意书中使用了折半查找法?需要查一下术语)
二、 使用RMAN进行闪回
RMAN>flashback database to time
= to_date('2009-12-01 10:00:00','yyyy-mm-dd hh24:mi:ss');
RMAN> flashback database to scn = 2728665;
RMAN> flashback database to sequence = 2123 thread = 1;
28.6 管理闪回恢复区
略P557
第29章 恢复用户错误
In this chapter you will learn how to
• Recover a dropped table using Flashback technology
• Manage the recycle bin
• Perform a Flashback Table operation
• Recover from user errors using Flashback Versions Query
• Perform transaction-level recovery using Flashback Transaction Query
上一章讨论了Flashback Database,这是一种功能强大但是十分极端的功能,其作用等价于不完全恢复。本章将介绍Oracle 10g数据库中可用的其他闪回方法,这些闪回方法不像Flashback Database一样极端,并且不会导致停机或丢失数据。
29.1 Flashback drop
有时候删除一个表极为容易。我们有可能删除一个存在输入错误的表,而且还可能在连接至错误模式或登录错误实例时误删表。通过在SQL*Plus提示符下进行如下设置,我们可以减少错误删除的可能性。
SQL> set sqlprompt "_user'@'_connect_identifier> "
SYS@OCP10G> conn eygle/eygle
已连接。
EYGLE@OCP10G>
在ORACLE_HOME/sqlplus/admin目录内的glogin.sql文件中植入前面给出的命令,就可以为所有的SQL*Plus会话自动设置SQL提示符。
Flashback Drop允许将先前删除的表(而不是被截断TRUNCATE的表)正确的恢复至其被删除前的状态,同时还会恢复所有索引以及触发器和授权。此外,唯一约束、主键约束与非空约束也将被恢复,但是,外键约束无法被恢复。
在较早版本的Oracle数据库中,删除某个表的同时也会从数据字典中删除对这个表的所有引用。
在10g版本的Oracle数据库中,DROP TABLE的命令实现已经完全变化;指定的表不再被删除,而是被重命名RENAME;
注意:Flashback Drop不能保证成功,只是有可能实现闪回。在删除之后越早执行Flashback Drop,成功的希望就越大。
注意:在SYSTEM表空间中存储的表无法启用Flashback Drop,这些表会被立即彻底地删除。
例子:
作为用户SYSTME连接至数据库
Connected to Oracle Database 10g Enterprise Edition Release 10.1.0.2.0
Connected as system
创建一个用于本练习的用户
SQL> create user dropper identified by dropper;
User created
SQL> grant connect, resource to dropper;
Grant succeeded
SQL> connect dropper/dropper;
Connected to Oracle Database 10g Enterprise Edition Release 10.1.0.2.0
Connected as dropper
SQL> create table names (name varchar2(10));
Table created
SQL> create index name_idx on names(name);
Index created
SQL> alter table names add (constraint name_u unique (name));
Table altered
SQL> insert into names values ('John');
1 row inserted
SQL> commit;
Commit complete
确认制定模式中的内容;
select * from user_objects;
select * from user_constraints;
SQL> drop table names;
Table dropped
SQL> flashback table names to before drop;
Done
重新确认制定模式中的内容;可以看到索引与约束仍然保留它们的回收站名。
SQL> alter index "BIN$fIGjXvMsRnO99AXaVpbnPQ==$0" rename to name_idx_new;
Index altered
SQL> alter table names rename constraint "BIN$IcPnIdMMQXKinh0/9Tem6w==$0" to name_u_new;
Table altered
作为用户SYSTME重新连接至数据库,然后删除DROPPER模式。
SQL> conn system/oracle;
Connected to Oracle Database 10g Enterprise Edition Release 10.1.0.2.0
Connected as system
SQL> drop user dropper cascade;
User dropped
查询dba_recyclebin视图,确认DROPPER的所有对象都被真正的删除。
SQL> select * from dba_recyclebin where owner = 'DROPPER';
29.2 管理回收站
使用PURGE 命令可以永久的删除对象.这个命令具有多种形式。
drop table table_name purge;
purge table table_name;
purge index index_name;
purge tablespace tablespace_name;
29.3 Flashback Query
create table emp
(empno VARCHAR2(10) not null primary key,
name varchar2(10),
deptno VARCHAR2(10));
create table dept
(deptno VARCHAR2(10) not null primary key,
name varchar2(10));
alter table emp
add constraint emp_f
foreign key (deptno) references dept(deptno);
insert into dept values(50,'support');
insert into emp values(8000,'Watson',50);
commit;
select sysdate from dual;
SYSDATE
2010-1-11 10:09:03
or:
select dbms_flashback.get_system_change_number from dual;--9750309
delete from emp where empno=8000;
delete from dept where deptno=50;
commit;
select * from dept;
select * from emp;
SQL> flashback table emp to timestamp to_timestamp('2010-01-11 10:09:03',
2 'yyyy-mm-dd hh24:mi:ss');
flashback table emp to timestamp to_timestamp('2010-01-11 10:09:03',
'yyyy-mm-dd hh24:mi:ss')
ORA-08189: 因为未启用行移动功能, 不能闪回表
因为没有启用行移动(row movement)特性,所以操作失败。
alter table dept enable row movement;
alter table emp enable row movement;
SQL> flashback table emp to timestamp to_timestamp('2010-01-11 10:09:03',
2 'yyyy-mm-dd hh24:mi:ss');
flashback table emp to timestamp to_timestamp('2010-01-11 10:09:03',
'yyyy-mm-dd hh24:mi:ss')
ORA-02091: 事务处理已回退
ORA-02291: 违反完整约束条件 (EYGLE.EMP_F) - 未找到父项关键字
因为违反完整约束条件,所以操作失败
SQL> flashback table emp,dept to timestamp to_timestamp('2010-01-11 10:09:03',
2 'yyyy-mm-dd hh24:mi:ss');
Done
or:
SQL> flashback table emp,dept to scn 9750309;
Done
select * from dept;
select * from emp;
表闪回可能因为下列原因失败:P577。
29.4 Flashback Version Query
update emp set name='aaa' where empno=8000;
commit;
update emp set name='bbb' where empno=8000;
commit;
update emp set name='ccc' where empno=8000;
commit;
delete emp where empno=8000
select * from emp;
select empno,
name,
versions_xid,
versions_startscn,
versions_endscn,
versions_operation
from emp
versions between scn minvalue and maxvalue
where empno=8000;
-----------
EMPNO NAME VERSIONS_XID VERSIONS_STARTSCN VERSIONS_ENDSCN VERSIONS_OPERATION
1 8000 ccc 060022004C1E0000 9766349 D
2 8000 ccc 060005004C1E0000 9763458 9766349 U
3 8000 bbb 06000B004C1E0000 9763455 9763458 U
4 8000 aaa 03001800161A0000 9763452 9763455 U
5 8000 xxx 06000A004C1E0000 9763441 9763452 I
6 8000 ccc 06002B004B1E0000 9757709 D
7 8000 ccc 060029004B1E0000 9757689 9757709 U
8 8000 bbb 060022004B1E0000 9757686 9757689 U
9 8000 aaa 06001F004B1E0000 9757683 9757686 U
10 8000 eygle 9757683
29.5 Flashback Transaction Query
SQL> desc flashback_transaction_query
Name Type Comments
---------------- -------------- -----------------------------------------
XID RAW(8) Transaction identifier
START_SCN NUMBER Transaction start SCN
START_TIMESTAMP DATE Transaction start timestamp
COMMIT_SCN NUMBER Transaction commit SCN
COMMIT_TIMESTAMP DATE Transaction commit timestamp
LOGON_USER VARCHAR2(30) Logon user for transaction
UNDO_CHANGE# NUMBER 1-based undo change number
OPERATION VARCHAR2(32) forward operation for this undo
TABLE_NAME VARCHAR2(256) table name to which this undo applies
TABLE_OWNER VARCHAR2(32) owner of table to which this undo applies
ROW_ID VARCHAR2(19) rowid to which this undo applies
UNDO_SQL VARCHAR2(4000) SQL corresponding to this undo
查询视图flashback_transaction_query需要具有 SELECT ANY TRANSACTION权限,默认这种权限被授予给SYS和DBA角色。
SQL> select operation,undo_sql from flashback_transaction_query
2 where xid='060022004C1E0000';
OPERATION UNDO_SQL
--------------------------------
DELETE insert into "EYGLE"."EMP"("EMPNO","NAME","DEPTNO") values ('8000','ccc','50');
BEGIN
通过UNDO语句,就可以撤销该事物。
第30章 检测与恢复数据库的讹误
第31章 用于调整Oracle 10g的工具
第32章 监视与管理存储结构
第33章 使用ASM管理存储结构
第34章 监视与管理内存
第35章 管理数据库资源
第36章 自动化管理任务
有关键情节透露