转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 数据库 >> ORACLE >> 正文
我的oracle笔记四(DBA管理)         ★★★★

我的oracle笔记四(DBA管理)

作者:闵涛 文章来源:闵涛的学习笔记 点击数:4055 更新时间:2009/4/22 22:03:42
-------
redo synch writes 2
redo synch time 0
redo entries 76
redo size 19412
redo buffer allocation retries 0
redo wastage 5884
redo writer latching time 0
redo writes 22
redo blocks written 51
redo write time 0
redo log space requests 0
redo log space wait time 0
redo log switch interrupts 0
redo ordering marks 0
SQL> select (19412+5884)/51 + 16 ''''"Redo black(byte)" from dual;
Redo black(byte)
------------------
512

86.如果发现表中有坏块,如何检索其它未坏的数据
[A]首先需要找到坏块的ID(可以运行dbverify实现),假设为,假定文件编码为。运行下面的查询查找段名:
SELECT segment_name,segment_type,extent_id,block_id, blocks
from dba_extents t
where
file_id =
AND between block_id and (block_id + blocks - 1)
一旦找到坏段名称,若段是一个表,则最好建立一个临时表,存放好的数据。若段是索引,则删除它,再重建。
create table good_table
as
select from bad_table where rowid not in
(select rowid
from bad_table where substr(rowid,10,6) = )
在这里要注意8以前的受限ROWID与现在ROWID的差别。
还可以使用诊断事件10231
SQL> ALTER SYSTEM SET EVENTS ''''10231 trace name context forever,level 10'''';
创建一个临时表good_table的表中除坏块的数据都检索出来
SQL>CREATE TABLE good_table as select * from bad_table;
最后关闭诊断事件
SQL> ALTER SYSTEM SET EVENTS ''''10231 trace name context off '''';
关于ROWID的结构,还可以参考dbms_rowid.rowid_create函数

87.怎么样备份控制文件
在线备份为一个二进制的文件
alter database backup controlfile to ''''$BACKUP_DEPT/controlfile.000'''' [reuse];
备份为文本文件方式
alter database backup controlfile to trace [resetlogs|noresetlogs];

88.控制文件损坏如何恢复
<1>、如果是损坏单个控制文件
只需要关闭数据库,拷贝一个好的数据文件覆盖掉坏的数据文件即可
或者是修改init.ora文件的相关部分
<2>、如果是损失全部控制文件,则需要创建控制文件或从备份恢复
创建控制文件的脚本可以通过alter database backup controlfile to trace获取。

89.怎么样热备份一个表空间
<1>Alter tablespace 名称 begin backup;
host cp 这个表空间的数据文件 目的地;
Alter tablespace 名称 end backup;
如果是备份多个表空间或整个数据库,只需要一个一个表空间的操作下来就可以了。

90.怎么快速得到整个数据库的热备脚本
<1>可以写一段类似的脚本
SQL>set serveroutput on
begin
dbms_output.enable(10000);
for bk_ts in (select distinct t.ts#,t.name from v$tablespace t,v$datafile d where t.ts#=d.ts#) loop
dbms_output.put_line(''''--''''||bk_ts.name);
dbms_output.put_line(''''alter tablespace ''''||bk_ts.name||'''' begin backup;'''');
for bk_file in (select file#,name from v$datafile where ts#=bk_ts.ts#) loop
dbms_output.put_line(''''host cp ''''||bk_file.name||'''' $BACKUP_DEPT/'''');
end loop;
dbms_output.put_line(''''alter tablespace ''''||bk_ts.name||'''' end backup;'''');
end loop;
end;
/

91.丢失一个数据文件,但是没有备份,怎么样打开数据库
如果没有备份只能是删除这个数据文件了,会导致相应的数据丢失。
SQL>startup mount
--ARCHIVELOG模式命令
SQL>Alter database datafile ''''file name'''' offline;
--NOARCHIVELOG模式命令
SQL>Alter database datafile ''''file name'''' offline drop;
SQLl>Alter database open;
注意:该数据文件不能是系统数据文件

92.丢失一个数据文件,没有备份但是有该数据文件创建以来的归档怎么恢复
保证如下条件
a. 不能是系统数据文件
b. 不能丢失控制文件
如果满足以上条件,则
SQL>startup mount
SQL>Alter database create datafile ''''file name'''' as ''''file name'''' size ... reuse;
SQL>recover datafile n; -文件号
或者
SQL>recover datafile ''''file name'''';
或者
SQL>recover database;
SQL>Alter database open;

93.联机日志损坏如何恢复
<1>、如果是非当前日志而且归档,可以使用
Alter database clear logfile group n来创建一个新的日志文件
如果该日志还没有归档,则需要用
Alter database clear unarchived logfile group n
<2>、如果是当前日志损坏,一般不能clear,则可能意味着丢失数据
如果有备份,可以采用备份进行不完全恢复
如果没有备份,可能只能用_allow_resetlogs_corruption=true来进行强制恢复了,但是,这样的方法是不建议的,最好在有Oracle support的指导下进行。

94.怎么样创建RMAN恢复目录
首先,创建一个数据库用户,一般都是RMAN,并给予recovery_catalog_owner角色权限
sqlplus sys
SQL> create user rman identified by rman;
SQL> alter user rman default tablespace tools temporary tablespace temp;
SQL> alter user rman quota unlimited on tools;
SQL> grant connect, resource, recovery_catalog_owner to rman;
SQL> exit;
然后,用这个用户登录,创建恢复目录
rman catalog rman/rman
RMAN> create catalog tablespace tools;
RMAN> exit;
最后,你可以在恢复目录注册目标数据库了
rman catalog rman/rman target backdba/backdba
RMAN> register database;

95.怎么样在恢复的时候移动数据文件,恢复到别的地点
给一个RMAN的例子
run {
set until time ''''Jul 01 1999 00:05:00'''';
allocate channel d1 type disk;
set newname for datafile ''''/u04/oracle/prod/sys1prod.dbf''''
to ''''/u02/oracle/prod/sys1prod.dbf'''';
set newname for datafile ''''/u04/oracle/prod/usr1prod.dbf''''
to ''''/u02/oracle/prod/usr1prod.dbf'''';
set newname for datafile ''''/u04/oracle/prod/tmp1prod.dbf''''
to ''''/u02/oracle/prod/tmp1prod.dbf'''';
restore controlfile to ''''/u02/oracle/prod/ctl1prod.ora'''';
replicate controlfile from ''''/u02/oracle/prod/ctl1prod.ora'''';
restore database;
sql "alter database mount";
switch datafile all;
recover database;
sql "alter database open resetlogs";
release channel d1;
}
96.怎么从备份片(backuppiece)中恢复(restore)控制文件与数据文件
可以使用如下方法,在RMAN中恢复备份片的控制文件
restore controlfile from backuppiecefile;
如果是9i的自动备份,可以采用如下的方法
restore controlfile from autobackup;
但是,如果控制文件全部丢失,需要指定DBID,如SET DBID=?
自动备份控制文件的默认格式是%F,这个格式的形式为
c-IIIIIIIIII-YYYYMMDD-QQ,其中IIIIIIIIII就是DBID
至于恢复(restore)数据文件,oracle 816开始有个包dbms_backup_restore
在 nomount 状态下就可以执行,可以读 815甚至之前的备份片,读出来的文件用于恢复
可以在SQLPLUS中运行,如下
SQL>startup nomount
SQL> DECLARE
2 devtype varchar2(256);
3 done boolean;
4 BEGIN
5 devtype := dbms_backup_restore.deviceallocate('''''''', params=>'''''''');
6 dbms_backup_restore.restoresetdatafile;
7 dbms_backup_restore.restorecontrolfileto(''''E:\Oracle\oradata\penny\control01.ctl'''');
8 dbms_backup_restore.restoreDataFileto(1,''''E:\Oracle\oradata\penny\system01.dbf'''');
9 dbms_backup_restore.restoreDataFileto(2,''''E:\Oracle\oradata\penny\UNDOTBS01.DBF'''');
10 dbms_backup_restore.restoreDataFileto(3,''''E:\ORACLE\ORADATA\PENNY\USERS01.DBF'''');
11 dbms_backup_restore.restorebackuppiece(''''D:\orabak\BACKUP_1_4_04F4IAJT.PENNY'''',done=>done);
12 END;
13 /
PL/SQL 过程已成功完成。
SQL> alter database mount;
[Q]Rman的format格式中的%s类似的东西代表什么意义
[A]可以参考如下
%c 备份片的拷贝数
%d 数据库名称
%D 位于该月中的第几天 (DD)
%M 位于该年中的第几月 (MM)
%F 一个基于DBID唯一的名称,这个格式的形式为c-IIIIIIIIII-YYYYMMDD-QQ,其中IIIIIIIIII为该数据库的DBID,YYYYMMDD为日期,QQ是一个1-256的序列
%n 数据库名称,向右填补到最大八个字符
%u 一个八个字符的名称代表备份集与创建时间
%p 该备份集中的备份片号,从1开始到创建的文件数
%U 一个唯一的文件名,代表%u_%p_%c
%s 备份集的号
%t 备份集时间戳
%T 年月日格式(YYYYMMDD)

97.执行exec dbms_logmnr_d.build(''''Logminer.ora'''',''''file directory''''),提示下标超界,怎么办
完整错误信息如下,
SQL> exec dbms_logmnr_d.build(''''Logminer.ora'''',''''file directory'''')
BEGIN dbms_logmnr_d.build(''''Logminer.ora'''',''''file directory''''); END;
*
ERROR 位于第 1 行:
ORA-06532: 下标超出限制
ORA-06512: 在"SYS.DBMS_LOGMNR_D", line 793
ORA-06512: 在line 1
解决办法为:
<1>.编辑位于"$ORACLE_HOME/rdbms/admin"目录下的文件"dbmslmd.sql"
改变行:
TYPE col_desc_array IS VARRAY(513) OF col_description;

TYPE col_desc_array IS VARRAY(700) OF col_description;
并保存文件
<2>. 运行改变后的脚本
SQLPLUS> Connect internal
SQLPLUS> @$ORACLE_HOME/rdbms/admin/dbmslmd.sql
<3>.重新编译该包
SQLPLUS> alter package DBMS_LOGMNR_D compile body;

98.执行execute dbms_logmnr.start_logmnr(DictFileName=>''''DictFileName'''')提示ORA-01843:无效的月份,这个是什么原因
我们分析start_logmnr包
PROCEDURE start_logmnr(
startScn IN NUMBER default 0 ,
endScn IN NUMBER default 0,
startTime IN DATE default TO_DATE(''''01-jan-1988'''',''''DD-MON-YYYY''''),
endTime IN DATE default TO_DATE(''''01-jan-2988'''',''''DD-MON-YYYY''''),
DictFileName IN VARCHAR2 default '''''''',
Options IN BINARY_INTEGER default 0 );
可以知道,如果TO_DATE(''''01-jan-1988'''',''''DD-MON-YYYY'''')失败,将导致以上错误
所以解决办法可以为
<1>、Alter session set NLS_LANGUAGE=American
<2>、用类似如下的方法执行
execute dbms_logmnr.start_logmnr (DictFileName=> ''''f:\temp2\TESTDICT.ora'''', starttime => TO_DATE(
''''01-01-1988'''',''''DD-MM-YYYY''''), endTime=>TO_DATE(''''01-01-2988'''',''''DD-MM-YYYY''''));

上一页  [1] [2] [3] [4] [5] [6] 


[网页制作]为 DBA 推荐几个邮件列表  [SyBase][推荐]对 Sybase ASE DBA 的建议!你能做到吗?
[ORACLE]ORACLE DBA常用SQL脚本工具-管理篇(1)  [ORACLE]Oracle DBA Interview Questions
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · Sql Server  · MySql
    · Access  · ORACLE
    · SyBase  · 其他
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台