Oracle的备份和存档模式
在做硬件升级前必须要将数据库做一次全备份,以便在出现不可预料的情况下进行恢复,全备份的方法有多种,以下列举两种简单高效的逻辑备份和冷备份,在数据库可以宕机的条件下,推荐使用冷备份,备份和恢复都较为简单和安全。升级完成再将数据库更改为存档模式。一、逻辑备份(导出、导入)
1、导出工具 EXP
它是操作系统下一个可执行的文件存放目录/ORACLE_HOME/bin。
exp导出工具将数据库中数据备份压缩成一个二进制系统文件。可以在不同OS间迁移。
它有三种模式:
a. 用户模式:导出用户所有对象以及对象中的数据;
b. 表模式: 导出用户所有表或者指定的表;
c.
整个数据库:导出数据库中所有对象――需要DBA赋予该角色full_exp_database权限
2. exp交互式命令行方式导出
在一台能连接公安网并且已安装oracle客户端的机器上连接目标数据库
C:\Documents and Settings\yu>exp
scott/tiger@zhouyu――以有权限用户连接目标数据库
Export: Release 8.1.7.0.0 - Production on 星期五 1月 5 14:36:16
2007
(c) Copyright 2000 Oracle Corporation. All
rights reserved.
连接到: Oracle9i Enterprise Edition Release 9.2.0.1.0 -
Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production
输入数组提取缓冲区大小: 4096 >
――回车或者选择较为合适的缓冲区大小
导出文件: EXPDAT.DMP>
e:\test.dmp ――指定要导出的文件在本机存放地址
(1)E(完整的数据库),(2)U(用户) 或 (3)T(表): (2)U > E
――指定导出的模式
导出权限(yes/no):yes>――指定是否导出权限,回车默认导出
导出表数据(yes/no):yes>――指定是否导出表数据,回车默认导出
压缩区(yes/no):yes>――指定是否压缩区,回车默认压缩
3.exp非交互式命令行方式
在一台能连接公安网并且已安装oracle客户端的机器上连接目标数据库
$exp parfile=username.par
file=/directory1/username_1.dmp,/directory1/username_2.dmp
filesize=2000M log=/directory2/username_exp.log
参数文件username.par内容
userid=username/userpassword
buffer=8192000
compress=n
grants=y
说明:username.par为导出工具exp用的参数文件,里面具体参数可以根据需要去修改,具体的参数可以在查看操作系统帮助,例如windows中cmd命令行输入命令
exp -help
4.导入工具 IMP
1. 它是操作系统下一个可执行的文件 存放目录/ORACLE_HOME/bin
imp导入工具将EXP形成的二进制系统文件导入到数据库中.
它有三种模式:
a. 用户模式:导出用户所有对象以及对象中的数据;
b. 表模式: 导出用户所有表或者指定的表;
c. 整个数据库: 导出数据库中所有对象。
只有拥有IMP_FULL_DATABASE和DBA权限的用户才能做整个数据库导入
5. imp交互式命令行方式导入
在一台能连接公安网并且已安装oracle客户端的机器上连接目标数据库
C:\Documents and Settings\yu>imp scott/tiger@zhouyu
Import: Release 8.1.7.0.0 - Production on 星期五 1月 5 14:52:45
2007
(c) Copyright 2000 Oracle Corporation. All
rights reserved.
连接到: Oracle9i Enterprise Edition Release 9.2.0.1.0 -
Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 – Production
导入文件: EXPDAT.DMP>e\test.dmp
输入插入缓冲区大小(最小为 8192 ) 30720>
经由常规路径导出由EXPORT:V08.01.06创建的文件
警告: 此对象由 TEST 导出, 而不是当前用户
已经完成ZHS16GBK字符集和ZHS16GBK NCHAR 字符集中的导入
只列出导入文件的内容(yes/no):no>
由于对象已存在, 忽略创建错误(yes/no):no> yes
导入权限(yes/no):yes>
导入表数据(yes/no):yes>
导入整个导出文件(yes/no):no> yes
成功终止导入,但出现警告。
6. imp非交互式命令行方式导入
在一台能连接公安网并且已安装oracle客户端的机器上连接目标数据库
$ imp system/manager parfile=params.dat
参数文件params.dat 内容
file=dba.dmp show=n ignore=n grants=y fromuser=scott
tables=(dept,emp)
说明:
params.dat为导出工具imp用的参数文件,里面具体参数可以根据需要去修改,具体的参数可以在查看操作系统帮助,例如windows中cmd命令行输入命令
imp –help。
需要注意的问题
imp和exp使用的字符集不同,如果字符集不同, 导入会失败,
可以改变unix环境变量或者NT注册表里NLS_LANG相关信息.导入完成后再改回来。
imp和exp版本不能往上兼容,imp可以成功导入低版本exp生成的文件,
不能导入高版本exp生成的文件。
imp全库导入需要该用户有IMP_FULL_DATABASE权限或本身为DBA用户。
二、冷备份
冷备份发生在数据库已经正常关闭的情况下,当正常关闭时会提供给我们一个完整的数据库。冷备份是将关键性文件拷贝到另外位置的一种说法。对于备份Oracle信息而言,冷备份是最快和最安全的方法。冷备份的优点是:
1.是非常快速的备份方法(只需拷贝文件)
2.容易归档(简单拷贝即可)
3.容易恢复到某个时间点上(只需将文件再拷贝回去)
4.能与归档方法相结合,作数据库“最新状态”的恢复。
5.低度维护,高度安全。
但冷备份也有如下不足:
1.单独使用时,只能提供到“某一时间点上”的恢复。
2.在实施备份的全过程中,数据库必须要作备份而不能作其它工作。也就是说,在冷备份过程中,数据库必须是关闭状态。
3.若磁盘空间有限,只能拷贝到磁带等其它外部存储设备上,速度会比较慢。
4.不能按表或按用户恢复。
如果可能的话(主要看效率),应将信息备份到磁盘上,然后启动数据库(使用户可以工作)并将所备份的信息拷贝到磁带上(拷贝的同时,数据库也可以工作)。冷备份中必须拷贝的文件包括:
1.所有数据文件
2.所有控制文件
3.所有联机REDO LOG文件
4.Init.ora文件(可选)。
值得注意的是冷备份必须在数据库关闭的情况下进行,当数据库处于打开状态时,执行数据库文件系统备份是无效的
1.以system用户登陆到数据库,执行查询,并保存查询结果。
数据文件的位置:select name from v$datafile;
控制文件的位置:select name from v$controlfile;
日志文件的位置:select member from v$logfile;
初始化参数文件initsid.ora。
2.关闭数据库
SQL>conn
sys/change_on_install@orcl as sysdba
SQL>shutdown normal;
3.按照第一步查询结果,使用操作系统命令,拷贝文件至要备份路径或磁盘。完成备份
4.重启oracle数据库
SQL>conn
sys/change_on_install@orcl as sysdba
SQL >startup;
三、更改oracle为归档模式
在默认情况下,在创建数据库的时候,它处于NOARCHIVE模式,也就是非归档模式,非归档模式不必考虑存储复制的文件所需要的额外存储空间,也不需要存档管理任务,但是,从备份和恢复的角度来看,最大的缺点就是在出现硬件故障的时候,在最后一次数据库备份之后的任何更改都将丢失。这对于总队数据库来说是不可以接受的。所以需要在硬件升级的同时,将数据库更改为归档模式,以便在出现故障时对数据库进行恢复。
1.确定存档模式
在更改数据库存档模式之前,首先需要做的就是确定当前的模式。
通过SQL*PLUS来确认
连接目标数据库
SQL> conn ntiis/ntiisadmin@work60
已连接。
SQL> select log_mode from v$database;
LOG_MODE
------------
NOARCHIVELOG ――确认为非归档模式
2.更改数据库参数文件
修改数据库参数文件/ORACLE_HOME/admin/pfile/init.ora
取消以下语句的#注释
log_archive_start = true
log_archive_dest_1 =
"location=/ORACLE_HOME/oradata/oradb/archive"
log_archive_format = %%ORACLE_SID%%T%TS%S.ARC
关闭数据库,重新启动
3.连接至总队数据库,确认更改生效
Oracle8i Enterprise Edition Release 8.1.7.0.0 - Production
With the Partitioning option
JServer Release 8.1.7.0.0 - Production
SQL> connect internal
连接成功。
SQL> startup
已启动 ORACLE 实例。
系统全局区域合计有 57124108个字节
Fixed Size 70924个字节
Variable Size 40198144个字节
Database Buffers 16777216个字节
Redo Buffers 77824个字节
已装入数据库。
数据库已打开。
SQL> alter system switch logfile;
--强制系统进行日志切换,可马上观察到归档日志的产生
语句已处理。
查看C:\Oracle\oradata\oradb\archive目录下,可以看到类似ORADBT001S01201.ARC的文件,说明归档成功
4.解释init.ora参数文件中关于归档重做日志参数项的含义
归档模式是自动还是手工,true为自动,false为手工
log_archive_start = true
归档日志文件所保存的路径
log_archive_dest_1 =
"location=C:\Oracle\oradata\oradb\archive"
归档日志文件的命名方法
log_archive_format = %%ORACLE_SID%%T%TS%S.ARC