网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > Oracle教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
本月文章推荐
.在Oracle 9i里基于函数的仅索引扫.
.ORACLE ERP导数据.
.ORACLE索引与高性能SQL介绍.
.如何调试oracle, sql server存储.
.Linux 档案属性与目录配置.
.实例讲解Oracle数据库自带的几个.
.按照顺序或依赖关系重新编译失效.
.Oracle在Solaris下的性能与调整简.
.Oracle数据库密码文件的使用和维.
.oracle10g,又遭遇了04031错误.
.Oracle作业(JOB)更新next_date的.
.ORACLE常见错误代码的分析与解决.
.在listener.ora文件中tcp协议和i.
.postfix 的 sasl 支持.
.简单谈谈Oracle 10G中的闪回恢复.
.oracle OCCI 的一个简单的包装类.
.各种索引的结构分析 BTree索引与.
.Oracle基本数据类型存储格式浅析.
.在Oracle中查看各个表、表空间占.
.索引性能优化实例.

Oracle FAQ 之备份与恢复篇

发表日期:2008-2-9



  [Q]如何开启/关闭归档
  [A]假如开启归档,请保证log_archive_start=true开启自动归档,否则只能手工归档,假如是关闭了归档,则设置该参数为false
  注重:假如是OPS/RAC环境,需要先把parallel_server = true注释掉,然后执行如下步骤,最后用这个参数重新启动
  1、开启归档
  a. 关闭数据库shutdown immediate
  b. startup mount
  c. alter database archivelog
  d. alter database opne
  2、禁止归档
  a. 关闭数据库shutdown immediate
  b. startup mount
  c. alter database noarchivelog
  d. alter database open
  归档信息可以通过如下语句查看
  SQL> archive log list
  Database log mode Archive Mode
  Automatic archival Enabled
  Archive destination E:\Oracle\ora92\database\archive
  Oldest online log sequence 131
  Next log sequence to archive 133
  Current log sequence 133
  
  [Q]怎样设置定时归档
  [A]9i以上版本,保证归档的最小间隔不超过n秒
  设置Archive_lag_target = n
  单位:秒 范围:0~7200
  
  [Q]不同版本怎么导出/导入
  [A]导出用低版本,导入用当前版本
  假如版本跨越太大,需要用到中间版本过渡
  
  [Q]不同的字符集之前怎么导数据
  [A]a.前条件是保证导出/导入符合其他字符集标准,如客户环境与数据库字符集一致。
  b.修改dmp文件的2、3字节为目标数据库的字符集,注重要换成十六进制。
  参考函数(以下函数中的ID是十进制的):
  nls_charset_name 根据字符集ID获得字符集名称
  nls_charset_id 根据字符集名称获得字符集ID
  
  [Q]怎么样备份控制文件
  [A]再线备份为一个二进制的文件
  alter database backup controlfile to '$BACKUP_DEPT/controlfile.000' [reuse];
  备份为文本文件方式
  alter database backup controlfile to trace [resetlogsnoresetlogs];
  
  [Q]控制文件损坏如何恢复
  [A]1、假如是损坏单个控制文件
  只需要关闭数据库,拷贝一个好的数据文件覆盖掉坏的数据文件即可
  或者是修改init.ora文件的相关部分
  2、假如是损失全部控制文件,则需要创建控制文件或从备份恢复
  创建控制文件的脚本可以通过alter database backup controlfile to trace获取。
  
  [Q]怎么样热备份一个表空间
  [A]Alter tablespace 名称 begin backup;
  host cp 这个表空间的数据文件 目的地;
  Alter tablespace 名称 end backup;
  假如是备份多个表空间或整个数据库,只需要一个一个表空间的操作下来就可以了。
  
  [Q]怎么快速得到整个数据库的热备脚本
  [A]可以写一段类似的脚本
  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;
  /
  
  [Q]丢失一个数据文件,但是没有备份,怎么样打开数据库
  [A]假如没有备份只能是删除这个数据文件了,会导致相应的数据丢失。
  SQL>startup mount
  --ARCHIVELOG模式命令
  SQL>Alter database datafile 'file name' offline;
  --NOARCHIVELOG模式命令
  SQL>Alter database datafile 'file name' offline drop;
  SQLl>Alter database open;
  注重:该数据文件不能是系统数据文件
  
  [Q]丢失一个数据文件,没有备份但是有该数据文件创建以来的归档怎么恢复
  [A]保证如下条件
  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;
  
  [Q]联机日志损坏如何恢复
  [A]1、假如是非当前日志而且归档,可以使用
  Alter database clear logfile group n来创建一个新的日志文件
  假如该日志还没有归档,则需要用
  Alter database clear unarchived logfile group n
  2、假如是当前日志损坏,一般不能clear,则可能意味着丢失数据
  假如有备份,可以采用备份进行不完全恢复
  假如没有备份,可能只能用_allow_resetlogs_corruption=true来进行强制恢复了,但是,这样的方法是不建议的,最好在有Oracle support的指导下进行。

  
  [Q]怎么样创建RMAN恢复目录
  [A]首先,创建一个数据库用户,一般都是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;
  
  [Q]怎么样在恢复的时候移动数据文件,恢复到别的地点
  [A]给一个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;
  }
  
  [Q]怎么从备份片(backuppiece)中恢复(restore)控制文件与数据文件
  [A]可以使用如下方法,在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)
上一篇:9iDBMS_STATS包收集统计信息 人气:734
下一篇:双机容错方案 人气:646
浏览全部Oracle教程的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐