当前位置:文档之家› Oracle笔记

Oracle笔记



-------------------------------------------------------------------------------------------------------
Oracle 数据库简介
-------------------------------------------------------------------------------------------------------
Oracle 10g/11g 9i 8i
Sql server 2000/2005/2008
-------------------------------------------------------------------------------------------------------
Oracle 10g 安装/卸载
-------------------------------------------------------------------------------------------------------
Oracle -- Oracle Universal Install (java 图形界面)
Unix, Linux ,Windows 2000/2003

安装注意事项 : 安装盘 (多份), 管理权限 ,计算机/服务器配置(名,ip等)
清除原有Oracle 安装变量, 记住安装过程中设置的值(密码等)
安装后验证

建议安装数据库后,不要修改计算机名称,否则会导致相关服务启动失败。(dbconsole服务)

全局数据库名:用于分布式数据库系统中区分不同的数据库,由数据库名和数据库域名组成。
SID:system identity,用于区分同一台计算机上的同一个数据库的不同实例。
裸设备:也叫裸分区(原始分区),是一种没有经过格式化,不被Unix通过文件系统来读取的特殊字符设备。它由应用程序负责对它进行读写操作。不经过文件系统的缓冲。
裸设备没有文件系统,因在设备的读取时就不会利用UNIX的内核进行管理,而是直接对设备进行读取,这样自然的就提高了I/O的性能,加上LV在多硬盘上的读取,可以大大的提高I/O的性能。


察看/验证安装结果:
程序组 , 文件系统结构 ,服务/进程 ,注册表项值 ,环境变量

iSQL*Plus URL: sql 语句管理工具
http://pc-name:5560/isqlplus

Enteprise Manager 10g Database Control URL: 图形的管理工具
http://pc-name:5500/em

Enterprise Manager Database Control URL - (panda) :http://pc-name:1158/em
iSQL*Plus URL 为:http://pc-name:5560/isqlplusi
SQL*Plus DBA URL 为:http://pc-name:5560/isqlplus/dba
如果上面的地址,访问有问题,查看 c:\oracle\product\10.2.0\db_1\install\portlist.ini


安装纪录文件: C:\Program Files\Oracle\Inventory\logs\installActions2009-02-11_01-07-06PM.log


Oracle 系统路径
Oracle 的系统目录 D:\oracle\product\10.2.0
D:\oracle\product\10.2.0\admin\panda(db_name)\bdump 后台进程跟踪文件
\cdump 内核转存文件
\create 数据库创建文件
\pfile 初始化参数文件
\udump 用户进程生成的跟踪文件
练习时,你可以将 bdump目录,udump目录中不需要的文件删除,以免占用太多空间


Oracle 数据库路径 D:\oracle\product\10.2.0\oradata\panda(db_name)\*.ctl 控制文件
\*.log 日志文件
\*.dbf 数据文件

个人备份

: D:\oracle\product\10.2.0\db_1\database (初始化参数和口令文件)
D:\oracle\product\10.2.0\db_1\NETWORK\ADMIN (网络连接与监听)
D:\oracle\product\10.2.0\oradata (数据库物理文件)
复制这些目录/文件, 当出问题时,粘贴回去


批处理脚本 启动/关闭数据库 start / stop
net start OracleServicePANDA
net start OracleOraDb10g_home2TNSListener
net start OracleOraDb10g_home2iSQL*Plus
net start OracleDBConsolepanda
net start OracleCSServicePanda

删除Oracle 数据库
step 1: 添加/删除程序 --〉oracle 相关
step 2: services.msc -->停止oracle 相关服务
step 3: regedit.exe --> 删除oracle 相关项值
step 4: 我的电脑 -->属性 --〉环境变量 -->oracle
step 5: 开始--〉菜单--〉Oracle 相关
step 6: 删除 C:\Program Files\Oracle\
step 7: 重起, 删除 C:\Oracle\ 目录,文件
step 8: 先删除子目录,在删父目录
-----------------------------------------------------
Oracle 10g服务器更改IP地址或是机器名后的服务启动问题 ?
Oracle 10g服务器在更改IP地址或是机器名后,会出现OracleService*、OracleDBConsole*、及监听服务(**是数据库名,也就是SID)无法启动的现象,错误如下:
Windows 不能在 本地计算机 启动 OracleDBConsoleprod。有关更多信息,查阅系统事件日志。如果这是非 Microsoft 服务,请与服务厂商联系,并参考特定服务错误代码 2。

解决OracleService*、OracleDBConsole*无法启动方法:
启动CMD,在命令行输入如下命令
emca -repos recreate
然后按照提示进行操作,完成后再分别启动两个服务。
注:OracleDBConsole*可以通过浏览器启动OEM管理器对Oracle进行管理;

解决监听服务无法启动方法:
%ORACLE_HOME%\NETWORK\ADMIN目录下编辑listener.ora文件中的HOST值更改为修改后的机器名即可。
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = HOSTNAME)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
)
)
-----------------------------------------------------------------------------------------------------
Oracle 体系架构与存储结构
-----------------------------------------------------------------------------------------------------

初始化参数文件
参数文件(parameter files)用于在启动实例时配置数据库。
文本参数文件 (pfile) 可编辑 C:\oracle\product\10.2.0\admin\panda\pfile
服务器参数文件 (spfile) 不可编辑的二进制文件 C:\oracle\product\10.2.0\db_1\database
在线修改,不需重起服务。 (oracle 9i以后)
两者间可以相互转换, 默认使用spfile

密码文件(password file) 身份验证
C:\oracle\product\10.2.0\db_1\database


控制文件(control file)
是Oracle服务器在启动期间用来标

识物理文件和数据库结构的二进制文件。控制文件提供了建立新实例时所需要的文件目录。Oracle系统可以在常规的数据库操作期间,更新控制文件,以便下次使用。
C:\oracle\product\10.2.0\oradata\panda\
文件很小, 1-7M 大, 为二进制
控制文件内容:数据库名,数据文件/日志文件 (名称,联机/脱机,大小等)
发生磁盘故障或用户错误,用于恢复数据库的信息(日志序列号,检查点等) SCN

数据文件(data file): 用来存放用户数据的地方。每一个数据库至少有一个与之相关的数据文件。通常情况下,一个数据库有多个数据文件。
一个表空间在物理上对应若干个数据文件.而一个数据文件只能对应一个表空间. v$datafile dba_tablespaces

重做日志文件(redo file): 记录用户对数据库进行的操作。 内存修改,日志,写硬盘 v$logfile

归档日志(archive log): 数据库可以自动对日志备份。

SGA(system global area): 系统全局区 (SGA) 是一组共享内存结构, 其中包含一个 Oracle 数据库的数据和控制信息。启动 Oracle 数据库实例时, 将在内存中分配 SGA。
数据高速缓存: 最近从数据文件中读取的数据块或最近常使用的.
重做日志高速缓存:使用insert,update,delete 修改等.
共享池:最近使用sql, pl/sql ,包,数据字典等.
大池: 为需要大内存的操作提供相对独立的内存空间. 提高操作性能.
show parameter large_pool_size -- show parameter
alter system set large_pool_size=4M;
Java 池:存放java 代码等
show parameter java


PGA(program global area)为单独的服务器进程存储私有数据的内存区域。与所有服务器进程都可以访问的共享内存区域SGA不同,数据库写入器、日志写入器和许多其他的后台进程,都只为各个服务器进程提供一个PGA。PGA只能由他们的服务器进程访问。
排序区,会话区,游标状态区,堆栈区


Oracle 存储结构

表空间(table space): 是用户可以在Oracle系统中使用的最大的逻辑存储结构。用户在数据库中建立的所有内容都会存储在表空间中。每个Oracle数据库都提前配置了system表空间,它存储了数据字典和系统管理信息。
任何数据库对象都被存储在表空间中,或存储在数据文件中.
EXAMPLE :非系统表空间, 实例表空间.
SYSTEM: 系统表空间. 存放关于表空间的名称,控制文件,数据文件等管理信息.
SYSAUX: oracle 10g 新引进的表空间,辅助系统表空间,减少系统表空间负荷,提高系统作业效率。存储oracle供给特性相关的方案对象。
TEMP: 临时表空间,存放临时表,临时数据,用于排序.
USERS: 用户表空间, 非系统表空间,存放永久性用户对象和私有信息.数据表空间.
UNDOTBS1 :重做表空间. 存放数据库有关重做的信息和数据.

一个

小型数据库,只需要system,sysaux,temp就可以工作了。但建议使用使用多个表空间分散数据。

段(segment): 用于存储表空间中某一种特定的,具有独立存储结构的数据库对象的数据,由一个或多个连续的区组成。一个段中的多个区可分别在多个数据文件中。
段随着存储数据的增加而逐渐变大。段的增大过程是通过增加区的个数实现的。
建立表,索引等数据库对象时,为这些对象分配的存储空间(段)。
索引分区段,表分区段,表段,簇段,索引段,回退段,撤销段,临时段,高速缓存段,二进制大对象段等

conn scott/password
select segment_name,tablespace_name,bytes,blocks from user_extents;

conn scott/password
select index_name,table_owner,table_name,tablespace_name from user_indexes;


区(extent): 由物理上连续存放的块组成。区是oracle 存储分配最小的单位。由一个或多个块组成。

conn system/password
select file_id,block_id,blocks from dba_free_space where tablespace_name='users';

块(block): 最小的数据管理单元。块大小是操作系统块的整数倍。数据库输入输出的最小单位。
块是最小的存储单元。oracle 9i之后准许表空间使用各自不同的块大小。建立表空间使用blocksize子句。否则使用db_block_size初始化参数。

区是一组连续的块。
段由一组数据扩展 (extent)构成,这些数据扩展位于同一表空间(tablespace)中,但在一个表空间内,属于同一个段的数据扩展可以分布 在多个数据文件(datafile)上,即段可以跨文件存储。
但是每个数据扩展只能包含于同一个数据文件中。一个段内的数据扩展在磁盘上未必是连续的。


----------------------------------------------------------------------------------------------------
建立/删除数据库

一个完整的数据库包括: 物理结构 一系列的与该数据库相关的操作系统文件
逻辑结构 表,索引,视图,序列等
内存结构 SGA,PGA等
进程结构 如dbwr,lgwr 等进程

创建数据库方式: DBCA , 使用脚本创建, 移植或升级

检查条件: 权限,充足内存 ,磁盘空间 ,软件 ,目录 ,环境变量

规划数据库: 1) 对数据库中可能包含的表,索引等方案对象的大小,数量进行估算。
2) 对数据库所包含的操作系统文件的布局进行规划。结合数据库的特点,确定他们在磁盘中的位置,均衡i/0,提高性能。
3) 选择全局数据库名
4) 数据库相关初始化参数
5) 数据库字符集
6) 数据库块大小
7) 使用撤销表空间,避免使用回退段。 rollback segment
8) 开发一套备份/还原 策略
9) 熟悉启动/关闭 例程
10) 对以存在的数

据库进行备份。

使用 DBCA

--------------------------------------------------------------
sys 拥有数据字典的所有基础表和用户可访问的视图。

system 用于创建显示管理信息的其他表和视图,以及各种oracle组件和工具使用的内部表和视图。

sysman 代表oem 超级管理员帐号

dbsnmp 用dbsnmp用户监视数据库

数据字典: 各个方案对象定义:表,视图等 view
存储空间分配信息
安全信息
例程运行时性能/统计信息
其他数据库信息

数据字典创建脚本 C:\oracle\product\10.2.0\db_1\RDBMS\ADMIN



手动删除数据库
step 1: sqlplus sys/password as sysdba
step 2: select * from global_name;
step 3: shutdown immediate
step 4: startup restrict mount
step 5: drop database;
一些内容需要手动删除(注册表, 文件 ,目录)




关闭/启动数据库
sysdba , sysoper 身份 , normal 身份无此功能

create pfile from spfile; -- 导出服务器参数
create pfile='c:\initORCL.ora' from spfile;
create spfile='c:\spfile' from pfile='c:\initORCL.ora'; -- 创建服务器参数文件 ,不能创建正在使用的

更改初始化参数
show parameters spfile -- 查看参数文件内容
alter system set job_queue_processes=50 comment='tempory change on 2008.10.26' scope=memory;
(spfile;服务器参数, memory; 内存参数,both )

select name, value ,update_comment from v$parameter where name='job_queue_processes';

alter system set db_recovery_file_dest='C:\oracle\product\10.1.0\new_flash_recovery_area' comment='add new destination on 2008.10.26' scope=spfile;

select name, value , update_comment from v$parameter where name='db_recovery_file_dest';
show parameter db_recovery_file_dest
更改数据库启动时使用的参数模式
SHOW PARAMETER SPFILE
CREATE PFILE FROM SPFILE;
SHUTDOWN IMMEDIATE
STARTUP PFILE ='C:\oracle\product\10.1.0\Db_1\database\INITorcl.ORA'
SHOW PARAMETER SPFILE
更改数据库启动时使用的参数
show parameter spfile
create pfile from spfile;
shutdown immediate
startup pfile='c:\oracle\product\10.1.0\Db_1\database\INITorcl.ORA' 从pfile 启动数据库
alter system set db_recovery_file_dest='c:\oracle\' scope=spfile; 出现错误提示
show parameters;
show parameters db_recovery_file_dest;
v$parameter 系统数据字典, 当前正在使用的值,内存
select isses_modifiable, issys_modifiable,ismodified from v$parameter where
可否用alter session 修改 ; 可否用alter system 修改; 是否已经被修改
name='job_queue_processes';
v$spparameter 数据字典表, 察看服务器参数文件中的值
select name,value from v$spparameter where name='db_recovery_file_dest';
使用OEM 察看初始化参数 Oracle Enterprise Manager

启动/关闭数据库
1.启动

例程 读取参数文件 (spfile ,pfile) startup nomount
SGA,PGA
根据参数文件中参数,启动后台进程
打开跟踪文件,报警文件
2.装载数据库 例程打开数据库的控制文件,根据初始化参数 control_files. alter database mount;
找到控制文件,获取相关信息.未打开物理文件. startup mount
执行下列任务,需要处于装载:
数据库重命名, 添加,删除,数据文件,日志文件.执行数据库完全恢复
更改数据库归档模式
参数文件---〉控制文件
3.打开数据库 startup , alter database open; 打开物理文件。使用
参数文件--->控制文件 ---> 联机状态数据文件
联机状态日志文件
关闭数据库
关闭数据库 日志高速缓存中的内容写日志文件.数据高速缓存中内容写数据文件.用户不能连接.
卸载数据库 关闭控制文件. 例程存在
终止例程
sql*plus
startup nomount 启动实例/ 运行创建新库脚本, 重建控制文件
startup mount 挂载
startup open 打开
startup force 强制启动
startup restrict 受限制启动 restricted session 权限
alter system disable restricted session;
startup mount restrict

shutdown normal 正常关闭, 阻断新连接,等待旧连接结束 shutdown
shutdown transactional 等待未提交事务完成
shutdown immediate
shutdown abort 以上三种无法关闭.

转换启动模式或修改数据库状态
startup nomount
alter database mount;
startup mount
alter database open;
当数据库处于mount 状态时,可以利用alter database 改变数据库运行方式
archive log list
alter database archivelog;
archive log list
alter database noarchivelog;
改变只读模式
alter database open read only;
connect scott/password;
delete from emp where deptno=30;
drop table emp;

暂停/开始数据库
alter system suspend;
alter system resume;

OracleTNSListener 数据库监听程序
OracleService 数据库例程
OracleDBConsole 对应oracle enterprise manage
Oracleisql*plus 对应isql*plus

管理会话
set pagesize 30 linesize 120
desc v$session
select username, sid, serial#, status,type from v$session;
alter system kill session '161,69'; -- 'sid , serial#'
使用OEM管理会话
OEM-->数据库-->主目录-->性能-->其他监视连接-->topsessions
---------------------------------------------------------------------------
管理控制文件
---------------------------------------------------------------------------
1.更改数据库物理结构
2.CKPT , LGWR , ARCn ,RMAN
这两种操作,会对控制文件产生影响
oracle 建议每个数据库有(2-8)控制文件
control files ='c:\oracle\.

.....\control.ctl' show parameter control_files
------------------------------
实验:使用spfile 初始化参数文件进行多路复用控制文件的方法
1. sqlplus sys/password as sysdba
2. 修改spfile 中的初始化参数 control_files
alter system set control_files ='1', '2' ,'3', '4' scope =spfile;
3.shutdown immediate
4.host copy c:\oracle\....\control01.ctl c:\CONTROL04.CTL
5.startup
6.select sysdate from dual;
-------------------------------
控制文件损坏
1.shutdown immediate
2.host del c:\CONTROL04.CTL
3.startup 出错
4.startup nomount
5.alter system set control_files='C:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\CONTROL01.CTL',
'C:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\CONTROL02.CTL'
, 'C:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\CONTROL03.CTL' scope=spfile;
6.shutdown immediate
7.startup
-------------------------------
备份控制文件
控制文件, 2进制文件
alter database backup controlfile to 'c:\control.bkp';
host copy c:\control.bkp C:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\CONTROL01.CTL
控制文件 --> 文本文件
show parameter user_dump_dest 跟踪备份
alter database backup controlfile to trace; (create controlfile 创建基本步骤 )

修改数据库物理结构后,备份控制文件
conn sys/password as sysdba
alter tablespace users
add datafile 'c:\users02.dbf' size 5M;
alter database backup controlfile to trace;
---------------------------------
创建控制文件: 创建初始控制文件
select member from v$logfile;
select name from v$datafile;
select name from v$controlfile;
创建新控制文件
损坏,改参数,名

1.制作 数据文件/日志文件列表
2. 修改初始化参数文件 spfile 中control_files
3.shutdown immediate
4.startup nomunt
5. create controlfile reuse database "orcl" noresetlogs
noarchivelog
maxlogfiles 16
maxlogmembers 3
maxdatafiles 100
maxinstances 8
maxloghistory 454
logfile
group 1 'C:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\REDO01.LOG',
group 2 'C:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\REDO02.LOG',
group 3 'C:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\REDO03.LOG'
datafile
'C:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\SYSTEM01.DBF',
'C:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\UNDOTBS01.DBF',
'C:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\SYSAUX01.DBF',
'C:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\EXAMPLE01.DBF',
'C:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\DATA1',
'C:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\USER02.DBF',
character set zhs16gbk;
6. open alter database open ;
7. alter tablespace temp add tempfile 'C:\oracle\product\10.1.0\oradata\orcl\TEMP01.DBF'; ****
8. connect scott/password
select * from dept order by

detpno;

resetlogs命令表示一个数据库逻辑生存期的结束和另一个数据库逻辑生存期的开始,每次使用resetlogs命令的时候,SCN不会被重置,不过oracle会重置日志序列号,而且会重置联机重做日志内容.
这样做是为了防止不完全恢复后日志序列会发生冲突(因为现有日志和数据文件间有了时间差)。



--------------------------------------
修改数据库名
1.create pfile='c:\initORCL.ORA' from spfile; 改名
2. create spfile='c:\spfileORCL.ora' from pfile='c:\initORCL.ORA';
3. shutdown immediate
4. 新spfile 替换 旧spfile
5. startup nomount
6.create controlfile reuse set database "orcl" resetlogs
noarchivelog
maxlogfiles 16
maxlogmembers 3
maxdatafiles 100
maxinstances 8
maxloghistory 454
logfile
group 1 'C:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\REDO01.LOG' size 10M,
group 2 'C:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\REDO02.LOG' size 10M,
group 3 'C:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\REDO03.LOG' size 10M
datafile
'C:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\SYSTEM01.DBF',
'C:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\UNDOTBS01.DBF',
'C:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\SYSAUX01.DBF',
'C:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\EXAMPLE01.DBF',
'C:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\DATA1',
'C:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\USER02.DBF',
'C:\oracle\product\10.1.0\oradata\orcl\USERS02.DBF'
character set zhs16gbk;
7.alter database open resetlogs;
8. 创建临时表空间临时文件
alter tablespace temp add tempfile 'C:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\TEMP01.DBF';
9. connect scott/password
select * from dept;
10. oracle net manager --> 本地-->服务名 --> 新 网络服务

v$controlfile
v$controlfile_record_section
v$parameter

使用oem管理控制文件
-----------------------------------------------------
管理表空间
-----------------------------------------------------
表空间是oracle 数据库中最大的逻辑结构.
表空间可以联机或脱机;system表空间不可以脱机;可以将一个表的数据和索引分别放置在不同的表空间;通过将不同表的数据,分区表中不同分区的数据放置在不同的表空间中,提高i/o;
表空间可以在只读和读写状态下切换

表空间类型 系统表空间:system ,sysaux , oracle 数据字典等
临时表空间:排序,分组,索引等。所有用户共享使用。如未指定用户使用那个临时表空间,那么使用system表空间创建临时段.临时文件可临时创建. v$sort_segment v$sort_usage
撤销表空间:撤销段。回退事务。 dba_rollback_segs
用rollback语

句明确回退一个事务;隐含回退一个事务;重构数据的读一致图像;从逻辑错误中恢复;可建立多个撤销 表空间,但同一时刻只能激活一个;undo_tablespace
大文件表空间:超大型数据库使用。默认放一个数据文件。 数据块 8k,4G个数据块. 32TB数据.减少超大数据库检查更新数据文件头部信息的操作
小文件表空间:默认。system,sysaux. 放多个数据文件。用户表空间


区管理方式 字典管理方式
本地管理方式


Create Smallfile Tablespace mytbs1
Datafile 'c:\mytbs1.dbf' Size 10M
Segment Space Management Auto;
go

Create Bigfile Tablespace mytbs2
Datafile 'c:\mytbs2.dbf' Size 10M
Segment Space Management Auto;
go

Create Smallfile Temporary Tablespace mytbs3
Tempfile 'c:\mytbs3.dbf' Size 10M
Uniform Size 64k;

表空间脱机,数据文件脱机
表空间脱机状态:正常:默认脱机方式。执行检查点(SGA).在脱机时确保所有数据文件联机。
临时:不比保证所有数据文件联机,部分(SGA)无法写入数据文件。将表空间联机
可能进行数据库恢复。
立即: 在次联机,必须进行数据库恢复。
用于恢复:基于时间恢复,用于恢复模式切换到脱机模式。

Create Tablespace loc_tbs01 -- 定义表空间
Datafile 'c:\loc_tbs01.dbf' Size 5M
Extent Management Local;

select tablespace_name from dba_tablespaces; -- 查看表空间

Create User jack Identified By welcome
Default Tablespace loc_tbs01
Temporary Tablespace temp
Quota 2M On loc_tbs01;
go

grant create session to jack;

表空间脱机
alter tablespace loc_tbs01 offline ;
alter tablespace loc_tbs01 online;

Create Table person
(pid Number(9) Not Null,
Name Varchar2(15),
Constraint pk_id Primary Key (pid) Validate)
Tablespace loc_tbs01;
删除表空间
alter tablespace loc_tbs01 Offline ;
drop tablespace loc_tbs01;
Drop Tablespace loc_tbs01 Including Contents;

Drop Tablespace my1 Including Contents And Datafiles;

create tablespace mytbs3
datafile 'c:\mytbs3.dbf' size 1M
autoextend on next 2M maxsize 11M;

select tablespace_name , extent_management , allocation_type ,segment_space_management, status
,contents ,block_size from dba_tablespaces;

向表空间添加数据文件
alter tablespace mytbs1
add datafile 'c:\mytbs02.dbf' size 4M;

修改默认表空间
alter database default tablespace mytbs1;
alter database default temporary mytbs2;

修改表空间读/写
alter tablespace MYTBS3 read only;

Create Table person1
(pid Number(9) Not Null,
Name Varchar2(15),
Constraint pk_id Primary Key (pid) Validate)
Tablespace MYTBS3;
alter tablespace MYTBS3 read write;

建立撤销表空间
create undo tablespace my01
datafile 'c

:\my01.dbf' size 4M
autoallocate;

alter system set undo_tablespace='my01' scope=spfile;
show parameter undo

向表空间中添加数据文件
alter tablespace mytbs1
add datafile 'c:\aaa.dbf' size 3M ;

alter tablespace mytmp
add tmpfile 'c:\,....' size 3M;

alter database datafile 'c:\mytbs1.dbf' resize 4M;
alter database datafile 'c:\mytbs1.dbf' autoextend on next 1M maxsize 20M;

数据字典表
dba_tablespaces
dba_data_files
dba_free_space
select tablespace_name,sum(bytes/1024/1024) from dba_free_space group by tablespace_name;

----------------------------------------------------------
管理数据文件
----------------------------------------------------------
处于性能或速度的考虑,在oracle 存取数据时,首先在内存结构中的sga区的数据高速缓存中查找,如果要存取的数据不在数据高速缓存区中,才会从相应的数据文件中读取数据,并将其存储在数据高速缓存中,以便使用.

确定数据文件的数量和大小
初始化参数文件 DB_FILES,一个例程所支持的最大的数据文件的个数
操作系统中一个进程能够同时打开的文件数量是有限制的,限制取决于操作系统本身.
每创建一个数据文件,都会在数据库的控制文件中添加一条记录.
进行模块化管理,表空间及其数据文件的个数一般是与应用程序的个数对应的.

合理放置数据文件
将并发访问的数据文件分散放置
将数据文件与重做日志文件分散放置
要考虑数据文件本身的大小及其增长情况,并结合磁盘的剩余空间的大小,合理的放置数据文件.



connect sys/password as sysdba
create tablespsace mytbs01
datafile 'c:\mytbs01_1.dbf' size 2M;

alter tablespace mytbs01
add datafile ' c:\mytbs01_2.dbf' size 2M;

create temporary tablespace mytmptbs
tempfile 'c:\mytmptbs_1.dbf' size 3M
uniform size 64k;

alter tablespace mytmptbs
add tempfile 'c:\mytmptbs_2.dbf' size 4M;

查询 dba_data_files , dba_temp_files 视图

create Tablespace mytbs4
datafile 'c:\mytbs4.dbf' size 1M;

Create Table person3
(pid Number(9) Not Null,
Name Varchar2(15),
Constraint pk_id Primary Key (pid) Validate)
tablespace mytbs4;

begin
for i in 1 .. 50000 loop
insert into person3(pid ,name)
values (i, '这是填充数据');
end loop
commit ;
end;
/
填满,有提示

设置数据文件自动扩展
alter database datafile 'c:\mytbs01_1.dbf' autoextend on; (off)

create tablespace mytbs02
datafile 'c:\mytbs03_1.dbf' size 2M
autoextend on next 3M maxsize 8M;

手动改变数据文件大小
alter database datafile 'c:\mytbs03_1.dbf' resize 3M;


在archivelog 模式下修改数据文件的可用性
一般情况下,oracle 在写入某个数据文件时发生错误,oracle 会自动将该数据文件设置为脱机状态,

并且记录在警告文件中.排除故障后,在将数据文件恢复为联机状态.

connect sys/password as sysdba
archive log list
shutdown immediate
startup mount
alter database archivelog;
archive log list


alter tablespace mytbs datafile offline ; (alter database datafile 'c:\myts.dbf' offline)
alter tablespace mytbs datafile online ; 错误提示

recover datafile 'c:\myts.dbf'; 介质还原
alter database datafile 'c:\myts.dbf' online;




移动数据文件 数据库迁移

A. 在open 状态下移动数据文件

1. alter tablespace mytbs offline ;
2. host copy C:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\ZHENGYONG.DBF c:\ZHENGYONG.dbf
3. alter tablespace mytbs rename datafile
'C:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\ZHENGYONG.DBF'
to
'c:\ZHENGYONG.DBF';
4.alter tablespace mytbs online;
5.alter database backup controlfile to 'c:\control.bkp';
alter database backup controlfile to trace;

B. 在mount 状态下移动系统数据文件

系统表空间不能被脱机,为了移动(system,sysaux) 表空间中的数据文件,只能在mount 状态下
1.shutdown immediate
start mount
2. host copy C:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\SYSTEM01.DBF c:\SYSTEM01.DBF
3. alter database rename file
'C:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\SYSTEM01.DBF'
to
'c:\SYSTEM01.DBF';
4. alter database open;
5. alter database backup controlfile to 'c:\control.bkp';
alter database backup controlfile to trace;

将只读表空间中的数据文件移动到只读介质上

表空间可以设置为只读状态,所以其中数据文件可以移动到只读介质中,如cd-rom 等设备
1. 创建读写表空间,将不需要更改的只读记录移动到该表空间中
2. 将表空间设置为只读.将在所有数据文件上启动一个检查点
3. 在操作系统上,将只读表空间中数据复制,刻录到只读介质上
4. 将表空间脱机
5. 执行alter database rename file
6. 将表空间设为联机

只读表空间中的数据文件的延迟打开
将初始化参数 READ_ONLY_OPEN_DELAYED 设置为 true, oracle 将在第一次访问该只读表空间时,才检查其中的数据文件的可用性,并打开它.


删除数据文件
alter tablespace mytmptbs01 tempfile offline;
drop tablespace mytmptbs01;

drop tablespace mytmptbs01 including contents;

drop tablespace mytmptbs01 including contents and datafiles;

只删除一个数据文件
alter database datafile 'e:\mytbs01_2.dbf' offline drop;
执行语句后,将该数据文件状态变为 recover, 并没有从数据库中,磁盘中删除该数据文件.
可重用
recover datafile 'e:\mytbs01_2.dbf';
alter database datafile 'e:\mytbs01_2.dbf' online;


查询数据文件信息
db

a_data_files , dba_temp_files ,dba_extents , user_extents ,dba_free_space , user_free_space ,v$datafile ,v$datafile_header , v$filestat

在OEM中管理数据文件



--------------------------------------------------
管理重做日志文件
---------------------------------------------------
重做日志文件在数据库的恢复中起着非常重要的作用,可以用来进行例程恢复和介质恢复,以及事务的撤销.
数据库运行不正常,如由于断电而出现例程失败,磁盘损坏而出现介质失败时,都能够实现例程恢复或介质恢复.介质恢复要借助归档日志文件.
数据库正常运行,由不正当操作误删除,修改数据,能够实现事务的撤销.在撤销时要借助撤销表空间或撤销段.

重做记录:重做日志由重做记录组成.重做记录由一个个修改向量组成.每个修改向量记录了对数据库中某个数据块所做的修改.

当重做记录成批写入重做日志文件中,此时认为事务已经提交成功.可以进行事务回退.然后将sga 中数据写入数据文件.


系统更改号(system change number):由oracle 自动生成,随时间不断增大,永远不会重复的一个整数,并且自动分配给事务和语句.
scn是标示数据库变化的唯一标示号.oracle 使用scn来确定数据库某个指定时间点的状态.
scn被记录在控制文件,数据文件的头部,数据块的头部和重做记录中.


如何写入重做日志文件
写入的次序要严格按并发事务的执行次序
必须先写入重做日志在写入数据文件
日志文件 循环写入 , 日志序列号
oracle 数据库至少包含两个以上的重做日志文件。lgwr后台进程以循环方式将记录写入其中。
lgwr后台进程在开始写入下一个日志文件前,必须确认要覆盖的重做日志文件已经完成下列工作:
数据库处于noarchivelog模式,该重做日志的所有重做记录所对应的修改结果,必须全部被写入数据文件中,成为永久保存数据库中的修改结果。
如果数据库处于archivelog模式,该重做日志的所有重做记录所对应的修改结果,必须全部写入数据文件中,并且后台ARCn后台进程已经将该
日志进行归档。

日志切换/日志序列号

alter system switch logfile; 手动切换日志组

检查点 checkpoint
检查点是一个触发将sga数据高速缓存中已经修改得数据块写入数据文件,并更新控制文件与数据文件头部的事件。被用于同步数据文件,控制文件,重做日志文件。
当oracle 发出一个检查点时,ckpt后台进程会促使dbwn后台进程将脏块写数据文件。同时促使lgwr写日志。确保数据文件,日志文件,控制文件中的scn号完全相同,使物理文件完全同步。
当执行commit语句时,只有lgwr后台进程会将重做日志重做日志高速缓存中的脏缓存块写入日志。
dbw

n后台进程只有在检查点时才将数据高速缓存中的脏缓存写入数据文件。
当出现下面情况时,oracle发出检查点:
重做日志切换,当日志写满达到90%,切换发生
关闭数据库
表空间脱机或设置为backup模式
手动检查点 alter system checkpoint;
时间检查点 log_checkpoint_timeout ,log_checkpoint_interval , log_checkpoint_to_alert

redolog的状态有哪些?什么意思?

有6种状态:

1. UNUSED 表示联机重做日志文件从来没有写入过。如果不是当前重做日志,这是在刚增加的或刚好在RESETLOGS 后的重做日志的状态。

2. CURRENT 指出这是当前重做日志。这表示此重做日志是活动的。这个重做日志打开或关闭的。

3. ACTIVE 表示此日志是活动的,但不是当前日志。需要进行崩溃恢复。有可能正用于块恢复。它能够或不能够归档。

4. CLEARING 表示此日志在ALTER DATABASE CLEAR LOGFILE 命令后正在作为空日志重建。在清除此日志后,这个状态变为UNUSED。

5. CLEARINGCURRENT 表示当前日志正由于关闭线程而被清除。如果在切换中存在某种故障(如写新日志标题的I/O 错误),此日志可保持这种状态。

6. INACTIVE 表示实例恢复不再需要这个日志。它可能在用于介质恢复。它有可能归档,也有可能不归档。

日志切换如何判断是频繁的?

一般来说切换频率在5分钟之内就可以判断为日志切换过于频繁。

如何确定日志切换是有问题的?

除了看日志的切换频率以外,还需要看闩锁的等待时间和logfileswitch的等待时间,一般来说,logfileswitch的等待时间较高,基本可以确定日志切换是有问题的。首先建议的是增大日志文件,再增加日志文件组数量。

log buffer的作用?写入日志文件中的条件?

将日志写入redolog物理文件之前存放的缓冲区。

写入日志文件的条件有三:

1. commit

2. 日志缓冲区使用超过三分之一

3. 日志缓冲区使用大于1M

19. 如何判断log buffer是否有问题,查看哪个等待事件?

log file sync等待事件。

log buffer space的等待事件。



归档就是在重做日志文件被覆盖前,将该文件保存到指定位置的操作。

归档日志
非归档日志
archive log list
shutdown immediate
startup mount
alter database archivelog; alter database noarchivelog;

管理重做日志文件的准则
多路复用重做日志文件
合理放置重做日志文件
合理设置重做日志文件组,文件的数量大小


添加重做日志文件组

alter database add logfile
group 4 ('c:\redo04_1.log','c:\redo04_2.log')
size 10M;
alter database backup controlfile to trace;
Select * From v$log;
Select * From v$logfile;

添加日志成员
alter d

atabase add logfile member 'c:\redo04_3.log' to group 4; 成员大小,由现有成员决定


删除重做日志文件
select group# ,members ,archived, status from v$log;
alter system switch logfile ;

alter database drop logfile group 4;

alter database drop logfile member 'c:\redo04_3.log' ;

清除重做日志文件组, 如果重做日志文件损坏,数据库无法归档日志,可以在不关闭数据库情况下,清除
alter database clear logfile group 3; 相当于删除重建


在open 状态下移动重做日志文件
1.确保 inactive 状态
select group# ,members ,archived, status from v$log;
alter system switch logfile ;
2.host copy C:\oracle\product\10.1.0\oradata\orcl\REDO01.LOG c:\REDO01.LOG
3.alter database rename file
'C:\oracle\product\10.1.0\oradata\orcl\REDO01.LOG' to 'c:\REDO01.LOG';
4. alter database backup controlfile to 'c:\control.bkp';
alter database backup controlfile to trace;
在mount 状态下移动重做日志文件
1.shutdown immediate
startup mount
2. host copy C:\oracle\product\10.1.0\oradata\orcl\REDO01.LOG c:\REDO01.LOG
3. alter database rename file
'C:\oracle\product\10.1.0\oradata\orcl\REDO01.LOG' to 'c:\REDO01.LOG';
4. alter database open;
5. alter database backup controlfile to 'c:\control.bkp';
alter database backup controlfile to trace;

Select * From v$log;
Select * From v$logfile;
Select * From v$log_history;

在OEM中管理重做日志文件

----------------------------------------------------------
使用logminer分析重做日志文件
----------------------------------------------------------
使用 logminer 对重做日志文件和归档日志文件进行分析,挖掘其中的价值。
由一组pl/sql包和动态性能视图组成。

DBMS_LOGMNR
DBMS_LOGMNR_D.BUILD

-- dbms_logmnr.add_logfile() : to register logfiles to be analyzed
-- dbms_logmnr.remove_logfile() : to remove logfiles from being analyzed
-- dbms_logmnr.start_logmnr() : to provide window of analysis and
-- meta-data information
-- dbms_logmnr.end_logmnr() : to end the analysis session
-- dbms_logmnr.column_present() : whether a particular column value
-- is presnet in a redo record
-- dbms_logmnr.mine_value() : extract data value from a redo record

v$logmnr_contents
v$logmnr_dictionary
v$logmnr_logs

step1 提取logminer使用的数据字典 可选
step2 指定logminer要分析的重做日志文件
step3 启动logminer 会话
step4 查看,使用分析结果
step5 结束logminer会话



提取logminer使用的数据字典
修改参数文件,指定分析数据的存放位置
UTL_FILE_DIR='d:\share\'
SQL> alter system set UTL_FILE_DIR = 'd:\share\' scope = spfile;
S

QL> shutdown immediate;
SQL> startup;

创建数据字典文件,将数据字典提取到平面数据字典文件
以SYS用户运行以下命令:
SQL>EXECUTE dbms_logmnr_d.build('logmnr_dict.ora','d:\share\', options=>DBMS_LOGMNR_D.STORE_IN_FLAT_FILE);
一旦将数据字典提取到一个平面数据字典文件后,就可以在当前平台上或将它和要分析的重要重做日志文件复制到logminer 平台分析.

指定要分析的重做日志文件
execute dbms_logmnr.add_logfile ('c:\redo01.log', Options=>dbms_logmnr.NEW);
一次只能选取一个文件。若要增加文件,使用下例:
execute dbms_logmnr.add_logfile ('c:\redo02.log', Options=>dbms_logmnr.ADDFILE);

若想去掉一个已经选取或增加的文件,使用REMOVEFILE:
execute dbms_logmnr.add_logfile ('c:\redo01.log', Options=>dbms_logmnr.REMOVEFILE);
如此反复操作,可以把所有要分析的文件都选取进去。

set pagesize 40 linesize 120
column log_id format 999999
column filename format a50
column db_id format 999999
column db_name format a10
select log_id, filename ,db_id ,db_name from v$logmnr_logs; 了解要分析的日志

启动logmnr会话
execute dbms_logmnr.start_logmnr ('logmnr_dict.ora');

查看分析结果


案例操作


connect scott/tiger
create table personnel
(pid number(9) not null,
name varchar2(15),
constraint pk_pid primary key (pid) validate);


insert into personnel (pid ,name) values(1,'aaa');
commit;

insert into personnel (pid ,name) values(2,'bbb');
insert into personnel (pid ,name) values(3,'ccc');
delete from personnel where pid=3;
commit;

select * from personnel;


select ename ,sal from emp where empno=7788;
update emp set sal=100000 where empno=7788;
commit;

select ename , sal from emp where empno=7788;

insert into emp (empno,ename,job) values (1234,'jack','clerk');
commit;

delete from scott.emp where empno=1234;
commit;


conn sys/password as sysdba
execute dbms_logmnr.add_logfile ('c:\redo01.log', Options=>dbms_logmnr.NEW);

execute dbms_logmnr.add_logfile ('c:\redo02.log', Options=>dbms_logmnr.ADDFILE);

execute dbms_logmnr.add_logfile ('c:\redo03.log', Options=>dbms_logmnr.ADDFILE);

execute dbms_logmnr.start_logmnr (DictFileName=>'d:\share\logmnr_dict.ora');


启动logmnr会话
execute dbms_logmnr.start_logmnr (DictFileName=>'d:\share\logmnr_dict.ora');

set pagesize 40 linesize 120
column operation format a10
column sql_redo format a30
column sql_undo format a30
column db_name format a10
select scn,operation ,sql_redo,sql_undo from v$logmnr_contents where seg_name ='PERSONNEL';


set pagesize 40 linesize 120
column operatopn format a10
column sql_redo format a30
column sql_undo format a30
select scn,operation ,sql_redo,sql_undo from v$logmnr_contents where seg_name ='EMP';


execute dbms_logmnr.start_logmnr (DictFileName=>'d:\share\logmnr_dict.ora' ,Option

s=>dbms_logmnr.NO_ROWID_IN_STMT); 输出中取消row_id

set pagesize 40 linesize 120
column operatopn format a10
column sql_redo format a30
column sql_undo format a30
select scn,operation ,sql_redo,sql_undo from v$logmnr_contents where seg_name ='EMP';



execute dbms_logmnr.start_logmnr (DictFileName=>'d:\share\logmnr_dict.ora',Options=>dbms_logmnr.NO_ROWID_IN_STMT+dbms_logmnr.DICT_FROM_ONLINE_CATALOG); 使用联机数据字典,显示ddl
set pagesize 40 linesize 120
column operatopn format a10
column sql_redo format a30
column sql_undo format a30
select scn,operation ,sql_redo,sql_undo from v$logmnr_contents where seg_name ='personnel';


execute dbms_logmnr.start_logmnr (startScn=>1002196 ,endScn=>1002200, DictFileName=>'d:\share\logmnr_dict.ora',Options=>dbms_logmnr.NO_ROWID_IN_STMT);
set pagesize 40 linesize 120
column operatopn format a10
column sql_redo format a30
column sql_undo format a30
select scn,operation ,sql_redo,sql_undo from v$logmnr_contents;

execute dbms_logmnr.start_logmnr (startScn=>843979,endScn=>843980, DictFileName=>'d:\share\logmnr_dict.ora' ,Options=>dbms_logmnr.NO_ROWID_IN_STMT+dbms_logmnr.DICT_FROM_ONLINE_CATALOG); scn 范围
set pagesize 40 linesize 120
column operatopn format a10
column sql_redo format a30
column sql_undo format a30
select scn,operation ,sql_redo,sql_undo from v$logmnr_contents;


select group#, members,sequence# ,archived,status,first_change#, to_char(first_time,'dd-mm-yy hh24:mi:ss') first_change_time from v$log;

select sequence# ,to_char(first_time,'dd-mm-yy hh24:mi:ss') first_change_time,first_change#,next_change# from v$log_history where sequence# between 45 and 55

如果scn范围不在被分析的重做日志范围中,则分析时会出错.


select group#, members,sequence# ,archived,status,first_change#, to_char(first_time,'dd-mm-yy hh24:mi:ss') first_change_time from v$log;

execute dbms_logmnr.start_logmnr (startTime=>to_date('03-09-06 10:00:32','DD-MM-YY HH:MI:SS'),endTime=>to_date('03-09-06 11:18:27','DD-MM-YY HH:MI:SS'), DictFileName=>'d:\share\logmnr_dict.ora' Options=>dbms_logmnr.NO_ROWID_IN_STMT+dbms_logmnr.DICT_FROM_ONLINE_CATALOG);
set pagesize 40 linesize 120
column operatopn format a10
column sql_redo format a30
column sql_undo format a30
select scn,operation ,sql_redo,sql_undo from v$logmnr_contents where operation='update' and seg_owner='SCOTT';

如果时间范围不在被分析的重做日志范围中,则分析时会出错.


execute dbms_logmnr.start_logmnr (Options=>dbms_logmnr.NO_ROWID_IN_STMT+dbms_logmnr.DICT_FROM_ONLINE_CATALOG);
set pagesize 40 linesize 120
column seg_name format a20
select seg_name,count(*) as hits from v$logmnr_contents where seg_owner='scott' group by seg_name; 某对象访问次数

结束logminer 会话

execute dbms_logmnr.end_logmnr; 释放资源


---------------------------------------------------------
管理归档

日志文件
----------------------------------------------------------
归档日志文件(archivedlog file)是对处于非活动(inactive)状态的重做日志文件(redo log file)的备份。

如果将数据库设置为archivelog模式,oracle 将启用arcn后台进程,在旧日志被覆盖前,将处于inactive状态的日志进行归档(自动或手动归档)。
archivelog 模式特点:
当出现介质故障时,可以恢复数据库。
可以进行联机的热备份
出现数据文件损坏,除了system数据文件,其他数据文件都可以在数据库open状态恢复
将数据库还原到某时间点
需要额外的归档日志空间。归档日志空间不够,无法归档,数据库停顿。最后一次冷备份之前的归档日志可删除。


归档参数
归档目标位置参数 默认归档的重做日志文件被存放在快速恢复区中. db_recovery_file_dest
log_archive_dest / log_archive_dupliex_dest (淘汰) , log_archive_dest_n

log_archive_dest_n n=1-10个 , 其中一个位置可以是网络中其他服务器 . 希望具有2个以上副本

归档日志文件命名规则参数
log_archive_format 指定归档日志文件命名格式 ARC%S_%R.%T
%s log sequence number
%S log sequence number, zero filled
%tthread number
%Tthread number, zero filled
%a activation ID
%d database ID
%r resetlogs ID that ensures unique names are constructed for the archived log files across multiple incarnations of the database

例程启动时 启用/禁用自动归档
alter system set log_archive_start = true scope=spfile;
例程启动后, 启用/禁用自动归档
alter system archive log start;
alter system archive log stop;

执行手动日志归档
alter system archive log all; 所有未归档的日志归档
alter system archive log current ; 当前归档
alter system archive log sequence 56; 按日志序列号归档
alter system archive log group 2; 按文件组归档

alter system archive log logfile 'c:\redo.log'; 将指定联机日志归档
alter system archive log next ; 将下一个没有归档的重做日志归档

ARCn 后台进程最大个数的参数
默认情况,例程只启动一个归档日志,即arc0.
为了加快重做日志文件的归档速度,避免发生lgwr后台进程需要等待的情况,oracle 自动启动多个(10)arcn后台进程.
log_archive_max_processes 可动态更改

alter system set log_archive_max_processes=3;
通过v$archive_processes视图查看各个arcn后台进程情况

最小成功归档的目标数量参数与归档目标参数的选项
log_archive_min_succeed_dest

log_archive_dest_1='location=d:\ mandatory reopen'
log_archive_dest_2='location=e:\share optional'
log_archive_dest_3='service=backupserver mandatory reopen=400'

log_archive_min_succeed_dest参数的值大于具有mandatory选项的归档日志目标位置的数量,则说明必须有一个或多个optional 选项的

归档目标位置成功归档.

启用或禁用归档目标位置的参数
log_archive_dest_state_n

log_archive_dest_state_2=defer
log_archive_dest_state_2=enable
某个强制的归档目标位置由于硬件故障无法使用,lgwr进程仍进行归档,不成功,等待.出现数据库挂起的现象.

归档进程的跟踪级别参数
log_archive_trace 设置arcn进程跟踪级别
0: Disable archivelog tracing (this is the default)
1: Track archival of redo log file
2: Track archival status of each archivelog destination
4: Track archival operational phase
8: Track archivelog destination activity
16: Track detailed archivelog destination activity
32: Track archivelog destination parameter modifications
64: Track ARCn process state activity
128: Track FAL (fetch archived log) server related activities

改变数据库的归档模式
archive log list
shutdown immediate
startup mount
alter database archivelog;
alter database open;

select log_mode from v$database ;

一个归档的案例与分析归档日志文件
在初始化参数文件中编辑归档参数
1. conn sys/password as sysdba
create pfile='d:\initpanda.ora' from spfile;
2.修改参数
url_file_dir='d:\share\'
log_archive_dest_1='location=d:\ mandatory reopen=120'
log_archive_dest_2='location=d:\share\ optional'
log_archive_format='ARC_%t_%s_%r.dbf'
log_archive_min_succeed_dest=2
log_archive_trace=12
3. create spfile='d:\spfilepanda.ora' from pfile='d:\initpanda.ora';
4. shutdown immediate 替换参数文件

5. startup mount
alter database archivelog;
6. alter database open;
archive log list

7. 使用scott用户, 建立表personnel
conn scott/password
create table personnel
(pid number(9) not null,
name varchar2(15),
constraint pk_pid primary key (pid) validate);
8. 手动归档
conn sys/password as sysdba
alter system archive log current;
alter system archive log current;
alter system archive log current;

找到归档日志 目录

分析归档日志文件
1. sql>execute dbms_logmnr_d.build('logmnr_dict.ora', -
>'d:\share\', -
>options=>DBMS_LOGMNR_D.STORE_IN_FLAT_FILE);

2. sql>execute DBMS_LOGMNR.ADD_LOGFILE( -
>'d:\share\ARC_1_51_582718630.dbf', -
>Options=>dbms_logmnr.NEW);

sql>execute DBMS_LOGMNR.ADD_LOGFILE( -
>'d:\share\ARC_1_52_582718630.dbf', -
>Options=>dbms_logmnr.ADDFILE);

sql>execute DBMS_LOGMNR.ADD_LOGFILE( -
>'d:\share\ARC_1_53_582718630.dbf', -
>Options=>dbms_logmnr.ADDFILE);

3. sql>execute DBMS_LOGMNR.START_LOGMNR( -
DictFileName=>'d:\share\logmnr_dict.ora');

4. set pagesize 40 linesize 120
column operation format a10
column sql_redo format a30
column sql_undo format a30
select scn,operation ,sql_redo,sql_undo from v$logmnr_contents where seg_name='PERSONNEL';

查询有关归档信息
archive log list

使用数据字典

视图

v$database select log_mode from v$database ;
v$instance select archiver from v$instance;
v$archived_log
v$archive_dest
v$archive_processes
v$log
v$log_history
v$backup_redolog

在oem中管理归档

-------------------------------------------------------------------------
管理撤销表空间
-------------------------------------------------------------------------
在oracle 8i 之前版本,通过在普通永久表空间中创建回退段(rollback segment)来保存当前对数据库的操作,以撤销(还原)该操作.
oracle 9i之后,引进全新的撤销表空间(undo tablespace).实现自动撤销管理.
在oracle 数据库中,设置一个专门的存储空间,用来保存操作过程及被操作的数据,即撤销记录.准许用户撤销针对数据库执行的最后操作.
undo_management string AUTO
undo_retention integer 900
undo_tablespace string UNDOTBS1

撤销的目的:
事务的回退,读一致性,闪回查询,事务的恢复

事务的回退
在oracle 数据库中,对数据库的操作被划分成事务,一个事务由一条或多条sql语句组成.一个事物中的sql语句要么全部执行,要么全部不执行.
即可以回退.
当用户回退一个事物时,oracle 使用撤销段中的撤销数据来撤销自这个事物开始以来发生的全部更改,并释放这个事物所涉及到的表上的任何锁,然后结束事务.

connect scott/password
create table person
(pid number(9) not null,
name varchar2(15),
constraint pk_pid primary key(pid) validate);

rollback; 无法回退ddl语句

select table_name from user_tables;


insert into person
(pid,name) values(1,'aaa');

insert into person
(pid,name) values(2,'aaa');

select * from person;
commit;

update person set name='bbb'
where pid=2;

select * from person ;
commit;

insert into person
(pid,name) values(3,'ccc');

select * from person;

delete from person;
select * from person ;

rollback;

select * from person ;


读一致性
用户查看到的数据是提交后的,为提交数据修改不会看到.

conn scott/password
update person set name='AAA' where pid=1;
select * from person;

conn sys/password as sysdba
update person set name='BBB' where pid=2;
select * from scott.person;
commit;

select * from person ;
commit;
select * from scott.person;


闪回查询

sqlplus sys/password as sysdba 查看登陆时间

conn scott/password

select ename ,sal from emp where empno=7788;

update emp set sal=5000 where empno=7788;
commit;


conn sys/password as sysdba
select ename ,sal from scott.emp where empno=7788;

select ename ,sal from scott.emp as of TIMESTAMP(systimestamp-interval '15' minute) where empno=7788;

select ename ,sal from scott.emp as of TIMESTAMP(to_timestamp('3-30-09 15:48:26','DD-MM-YY HH24:MI:SS')) where empno=7788;


select ename ,sal from scott.emp as of TIMESTAMP(to_timestamp('现在时间','DD-MM-YY HH24:MI:SS')) where empno=7788;


事务恢复

conn scott/password
insert into person
(pid ,name) values(3,'ccc');

insert into person
(pid ,name) values(4,'ddd');

select * from scott.person;

不要退出sqlplus , 机器断电 (退出sqlplus ,隐式提交)

conn scott/password

select * from person

事务恢复是例程恢复的一部份,由oracle 自动完成.
数据库运行时,做大量事务,一些事务未提交,出现例程失败,
当重起数据库时,smon后台进程会从撤销段中找到未提交事务,回退在故障时间出现的任何未提交事务.即smon 进程自动执行例程恢复.


oracle 推荐使用自动撤销管理方式

undo_management 不是动态参数,spfile 中改

undo_tablespace 指定撤销表空间,否这使用system中的回退段

undo_retention 动态参数 , 指定已经提交的事务的撤销数据在能够被覆盖前应该保留多长时间.默认900秒.设为0,即自动调整.建议性时间,非强制性.
保留的目的,支持长查询和支持闪回查询.


撤销数据种类: 未提交撤销数据,已提交未过期撤销数据(undo_retention),过期撤销数据

撤销表空间解决方案

select to_char(END_TIME,'dd-mm-yy hh24:mi:ss') end_time,to_char(BEGIN_TIME,'dd-mm-yy hh24:mi:ss') begin_time,
(end_time-begin_time)*24*60*60 endtime_begintime, undoblks from v$undostat;

select sum(undoblks)/sum((end_time-begin_time)*24*60*60) undoblks_per_second from v$undostat; ups 值 每秒产生的撤销数据的oracle 块

show parameter undo_retention ur值

show parameter db_block_size bs值

overhead 撤销表空间中保留系统信息所需的额外开销(5%--10%)

undosize=ur*ups*bs(1+overhead)=900*1.1037234*(8192/1024/1024)*(1+10%)
=8.536MB

关于撤销表空间问题的方法与忠告
不断提交事务,以减少撤销数据
在删除表中内容时,如不需要恢复,使用truncate语句替代delete
监控撤销活动
限制撤销表空间数据文件最大大小,或禁用数据文件自动扩展功能.


管理撤销表空间

create undo tablespace undotbs_1
datafile 'c:\undotbs_1_01.dbf' size 3m reuse
autoextend on next 2m maxsize 15m
extent management local
autoallocate;

create undo tablespace undotbs_2
datafile 'c:\undotbs_2_01.dbf' size 2m
autoextend off;


alter undo tablespace undotbs_2
add datafile 'c:\undotbs_2_02.dbf' size 2m
autoextend off;

alter tablespace undotbs_2
datafile 'c:\undotbs_2_02.dbf' offline drop;

alter system set undo_tablespace=undotbs_1 scope=both;

drop tablespace undotbs_2;
drop tablespace undotbs_2 including contents and datafile;

使用oem管理撤销表空间


查询与监控有关撤销的信息
v$undostat 所有撤销表空间统计信息
v$rollstat 撤销表空间中各个撤销段信息
v$tran

相关主题
文本预览
相关文档 最新文档