Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1211597
  • 博文数量: 259
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 2518
  • 用 户 组: 普通用户
  • 注册时间: 2012-10-13 16:12
个人简介

科技改变世界,技术改变人生。

文章分类

全部博文(259)

分类: Oracle

2014-01-02 15:27:01

冷备份:把C:\oracle\product\10.1.0\oradata\orcl下的所有文件拷贝到别的地方去当成备份,比如我的放在D:\share\bak下,当以后数据库遇到问题是,把备份的文件再复制回来即可。如果不能复制,可能的原因是oracle服务没有关闭,可以sysdba的身份进入,然后执行shutdown immediate命令。 

热备份:将日志置为“归档”方式。
1.以sysdba的形式进入数据库:
C:\>sqlplus sys/sys as sysdba

2.显示当前的归档模式
SQL> archive log list;
Database log mode              No Archive Mode
Automatic archival             Disabled
Archive destination            USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence    10
Current log sequence           12

其中第一行表示当前数据库日志的为不归档模式,第二行表示不自动归档,第三行表示归档的默认路径。

在C:\oracle\product\10.1.0\oradata\orcl下,.CTL是控制文件,.LOG是日志文件,.DBF是数据文件。日志文件一共有三个,特点是当第一个文件写满之后接着写第二个,第二个文件写满之后接着写第三个,第三个文件写满之后返回去写第一个。当Database log mode 设置为不归档模式(No Archive Mode)时,如果第三个文件写满了,接下来的记录将会覆盖原来第一个文件中的内容,这也是Oracle数据库的默认情况。而热备份就是把Database log mode设置为归档模式,会在覆盖之前把写满的文件备份到一个指定的路径下,以便日后进行恢复。因此选择热备份就要设置日志归档。

alter system set log_archive_start=true scope=spfile;
启动数据库时打开控制文件但是不打开数据文件。

3.把自动归档改为启用
SQL> alter system set log_archive_start=true scope=spfile;

4.关闭数据库
SQL> shutdown immediate

5.启动数据库,启动时打开控制文件但是不打开数据文件。
SQL> startup mount

6.把数据库切换到归档方式
SQL> alter database archivelog;

7.打开数据库
SQL> alter database open;

8.查看当前的归档模式,发现已经更过来了。
SQL> archive log list;
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     10
Next log sequence to archive   12
Current log sequence           12

9.以下将对scott用户的数据文件进行备份和恢复,先查找scott用户所属的命名空间,为users
SQL> select username,default_tablespace from dba_users;
……
USERNAME                       DEFAULT_TABLESPACE
------------------------------ ------------------------------
SCOTT                          USERS
……

10.更改表空间,开始备份
SQL> alter tablespace users begin backup;

11.将C:\oracle\product\10.1.0\oradata\orcl目录下的USERS01.DBF文件拷贝到别的地方去,当作备份,不同人机器上的目录可能不一样。

12.备份结束
SQL> alter tablespace users end backup;

13.将当前的联机日志进行归档
SQL> alter system archive log current;

14.切换日志文件
SQL> alter system switch logfile;

15.再切换一次日志文件,这样就已经将三个日志文件都切换了一次
SQL> alter system switch logfile;

16.关闭数据库
SQL> shutdown immediate;

17.删除C:\oracle\product\10.1.0\oradata\orcl目录下的USERS01.DBF文件

18.重新启动数据库时会提示出错
SQL> startup
……
ORA-01157: cannot identify/lock data file 4 - see DBWR trace file
ORA-01110: data file 4: 'C:\ORACLE\PRODUCT\10.1.0\ORADATA\ORCL\USERS01.DBF'

19.查看哪个文件出了问题,发现是4号文件找不到

SQL> select * from v$recover_file;
FILE# ONLINE  ONLINE_
---------- ------- -------
ERROR                                                                CHANGE#
----------------------------------------------------------------- ----------
TIME
--------------
4 ONLINE  ONLINE
FILE NOT FOUND                                                             0

20.将数据库中的第4号文件脱机并删除
SQL> alter database datafile 4 offline drop;


21.打开数据库
SQL> alter database open;

22.把备份的USERS01.DBF文件拷贝到C:\oracle\product\10.1.0\oradata\orcl目录下

23.现在如果select * from scott.emp;会出错,因为还没有恢复datafile 4

SQL> recover datafile 4;

Specify log: {=suggested | filename | AUTO | CANCEL}
auto

24.第20步让第4号文件脱机了,现在要恢复成联机状态

SQL> alter database datafile 4 online;


25.现在查询scott用户的表就可以正确地得到数据了
SQL> select * from scott.emp;

阅读(1465) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~