环境:win7
首先将数据库的日志归档模式 设为 开启
然后 我先来弄冷备份
开启日志归档模式的操作步骤-------------------------------->
1,
%sqlplus /nolog (启动sqlplus)
查询日志是否是归档模式 archive log list;
切换服务器归档模式,如果已经是归档模式可跳过此步:
改归非归档模式为归档模式
9i
conn / as sysdba (以DBA身份连接数据库)
SQL> archive log list
数据库日志模式 非存档模式
自动存档 禁用
存档终点 F:\oracle\ora92\RDBMS
最早的概要日志序列 114
当前日志序列 116
SQL> alter system set log_archive_dest='F:\oracle\oradata\arch'
scope=spfile;
系统已更改。
SQL> alter system set log_archive_start=true scope=spfile;
系统已更改。
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount
ORACLE 例程已经启动。
Total System Global Area 386997388 bytes
Fixed Size 453772 bytes
Variable Size 167772160 bytes
Database Buffers 218103808 bytes
Redo Buffers 667648 bytes
数据库装载完毕。
SQL> alter database archivelog;
数据库已更改。
SQL> alter database open;
数据库已更改。
SQL> archive log list
数据库日志模式 存档模式
自动存档 启用
存档终点 F:\oracle\oradata\arch
最早的概要日志序列 114
下一个存档日志序列 116
当前日志序列 116
SQL> exit (退出)
---------------------------------------------------------------------好了搞定
然后弄冷备份
--冷备份 :关闭数据库(包括服务)后的备份 备份所有数据文件和控制文件 冷备份不仅适用于归档日志模式 也适用于非归档日志模式
(1)
--列出数据文件:
select name from v$datafile;
--C:\ORACLE\ORADATA\ORCL\TEST.ORA
/usr/app/oracle/oradata/orcl/system01.dbf
/usr/app/oracle/oradata/orcl/undotbs01.dbf
/usr/app/oracle/oradata/zjvio/ZJVIO_img1.ora
...
--列出控制文件
select name from v$controlfile;
/usr/app/oracle/oradata/orcl/control01.ctl
/usr/app/oracle/oradata/orcl/control02.ctl
/usr/app/oracle/oradata/orcl/control03.ctl
(2)关闭数据库
conn sys/oracle as sysdba
shutdown immediate
(3)复制所有数据库文件
host copy c:\test\*.dbf e:\bck\
host copy c:\test\*.ctl e:\bck\
host copy c:\test\*.ora e:\bck\ --有些
也可也根据这些目录手动去copy
(4)启动例程
conn sys/oracle as sysdba
startup open
测试环境 我建了一个账号 xnzqb
表空间是 test_data
表空间对应的数据文件时 test.ora
这个可以通过 --取得表空间和数据文件的对应关系
select file_name from dba_data_files where tablespace_name='TEST_DATA'查询出来
我先冷备份test.ora文件
然后我在xnzqb数据库里随便删掉一个表
然后我 shutdown immediate
然后拷贝这个文件到orcl目录下 覆盖掉同名文件
然后开启数据库 startup open;
发现那个表还是没有恢复
我复原以上操作
这次我冷备份所有orcl目录下的所有.dbf .ora和 重做日志文件
然后我在xnzqb数据库里随便删掉一个表
然后我 shutdown immediate
然后拷贝这些备份文件到orcl目录下 覆盖掉同名文件
然后开启数据库 startup open;
发现删掉的那个表回来了
包括里面的数据都在
select name from v$datafile;
如上图
M
不过以上只是在同一个机子上试的
但是就是费解为什么 oracle为什么要那么多文件 我如果只是想备份 test用户下的所有数据库 光 备份test所在的表空间对应的数据文件就不行 哎 这样也太麻烦了