linux下对oracle的冷备份和热备份脚本
在itpub上看到,然后修改的~~~
测试环境:
1 操作系统
[oracle@localhost ORCL]$ cat /proc/version
Linux version 2.6.27.5-117.fc10.i686 (mockbuild@x86-7.fedora.phx.redhat.com) (gcc version 4.3.2
20081105 (Red Hat 4.3.2-7) (GCC) ) #1 SMP Tue Nov 18 12:19:59 EST 2008
2 数据库版本
SQL> select * from v$version;
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
PL/SQL Release 10.2.0.1.0 - Production
CORE 10.2.0.1.0 Production
TNS for Linux: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production
3 数据库的名字
SQL> show parameter db_name;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_name string ORCL
4 数据库的所有数据文件所在位置
SQL> select file#,status,enabled,name from v$datafile;
FILE# STATUS ENABLED NAME
---------- ------- ---------- ------------------------------
1 SYSTEM READ WRITE /opt/oracle/product/10.2.1/ora
data/ORCL/system01.dbf
2 ONLINE READ WRITE /opt/oracle/product/10.2.1/ora
data/ORCL/undotbs01.dbf
3 ONLINE READ WRITE /opt/oracle/product/10.2.1/ora
data/ORCL/sysaux01.dbf
4 ONLINE READ WRITE /opt/oracle/product/10.2.1/ora
data/ORCL/users01.dbf
FILE# STATUS ENABLED NAME
---------- ------- ---------- ------------------------------
5 ONLINE READ WRITE /opt/oracle/product/10.2.1/ora
data/ORCL/example01.dbf
6 ONLINE READ WRITE /opt/oracle/product/10.2.1/ora
data/ORCL/testtablespace
7 ONLINE READ WRITE /opt/oracle/product/10.2.1/ora
data/ORCL/test
8 ONLINE READ WRITE /opt/oracle/product/10.2.1/ora
FILE# STATUS ENABLED NAME
---------- ------- ---------- ------------------------------
data/ORCL/testaaaa
9 ONLINE READ WRITE /opt/oracle/product/10.2.1/ora
data/ORCL/t2m.dbf
9 rows selected.
5 控制文件的所在位置
SQL> select * from v$controlfile;
STATUS NAME IS_ BLOCK_SIZE FILE_SIZE_BLKS
------- ------------------------------ --- ---------- --------------
/opt/oracle/product/10.2.1/ora NO 16384 430
data/ORCL/control01.ctl
/opt/oracle/product/10.2.1/ora NO 16384 430
data/ORCL/control02.ctl
/opt/oracle/product/10.2.1/ora NO 16384 430
data/ORCL/control03.ctl
6 重做日志文件位置
SQL> select * from v$logfile;
GROUP# STATUS TYPE MEMBER IS_
---------- ------- ------- ---------------------------------------- ---
3 STALE ONLINE /opt/oracle/product/10.2.1/oradata/ORCL/ NO
redo03.log
2 ONLINE /opt/oracle/product/10.2.1/oradata/ORCL/ NO
redo02.log
1 ONLINE /opt/oracle/product/10.2.1/oradata/ORCL/ NO
redo01.log
4 ONLINE /opt/oracle/product/10.2.1/oradata/ORCL/ NO
redo4.log
GROUP# STATUS TYPE MEMBER IS_
---------- ------- ------- ---------------------------------------- ---
5 ONLINE /opt/oracle/product/10.2.1/oradata/ORCL/ NO
redo05.log
7 在/home/oracle/test/目录下写个coldbak.sql脚本
[oracle@localhost ~]$ vi /home/test/coldbak.sql
#rem script.:coldbak.sql
#rem desc:offline full backup database
#enter database
$ORACLE_HOME/bin/sqlplus "/as sysdba" <<EOF
#--shutdown database
shutdown immediate
#--Copy file
!cp /opt/oracle/product/10.2.1/oradata/ORCL/*.dbf /home/oracle/test/
!cp /opt/oracle/product/10.2.1/oradata/ORCL/*.ctl /home/oracle/test/
!cp /opt/oracle/product/10.2.1/oradata/ORCL/*.log /home/oracle/test/
#--startup database
startup
8 在linux启动一个终端执行该coldbak.sql脚本
[oracle@localhost test]$ . colbak.sql
(提示过程略)
附上piner的说明:
1、以上脚本在数据库关闭状态下备份数据库所有的数据文件,联机日志,控制文件(在一个目录下),如果成功备份,所有文件是一致的。
2、没有备份参数文件,参数文件可以另外备份,没有必要每次都备份,只需要在改变设置后备份一次。
3、如果以上命令没有成功依次执行,那么备份将是无效的,如连接数据库不成功,那么肯定关闭数据库也不成功,那么备份则无效。
4、冷备份建议下人工干预下执行。
9 在/home/oracle/test/目录下写个hotbak.sql脚本
#rem script.:hotbak.sql
#rem desc:backup all database datafile in archive
#enter database
$ORACLE_HOME/bin/sqlplus "/as sysdba" <<EOF
alter system archive log current;
#start
alter tablespace system begin backup;
!cp /opt/oracle/product/10.2.1/oradata/ORCL/system01.dbf /home/oracle/test/;
alter tablespace system end backup;
alter tablespace system begin backup;
!cp /opt/oracle/product/10.2.1/oradata/ORCL/undotbs01.dbf /home/oracle/test/;
alter tablespace system end backup;
alter tablespace system begin backup;
!cp /opt/oracle/product/10.2.1/oradata/ORCL/users01.dbf /home/oracle/test/;
alter tablespace system end backup;
alter tablespace system begin backup;
!cp /opt/oracle/product/10.2.1/oradata/ORCL/sysaux01.dbf /home/oracle/test/;
alter tablespace system end backup;
alter tablespace system begin backup;
!cp /opt/oracle/product/10.2.1/oradata/ORCL/example01.dbf /home/oracle/test/;
alter tablespace system end backup;
#backup control file
#binary
#热备份将当前的控制文件备份到文件
alter database backup controlfile to '/home/oracle/test/controlbinarybackup';
#ascii
#热备份建立控制文件的脚本到udump目录
alter database backup controlfile to trace;
alter system archive log current;
<<EOF
10 在linux启动一个终端执行该hotbak.sql脚本
[oracle@localhost test]$ . hotbak.sql
(提示过程略)
附上piner的说明:
1、热备份必须在数据库归档方式下才可以运行
2、以上脚本可以在数据库运行状态下备份数据库所有的数据文件(除了临时数据文件),没有必要备份联机日志。
3、归档日志至少需要一次完整备份之后的所有日志。
4、如果以上命令没有成功依次执行,那么备份也是无效的,如连接数据库不成功,那么备份则无效。
注意:如果热备份过程中出现错误:
alter system archive log current
*
ERROR at line 1:
ORA-00258: manual archiving in NOARCHIVELOG mode must identify log
问题处理1)第一种处理方法
问题原因是数据库没有处于归档模式,最根本的解决方法是修改数据库为归档模式,具体操作步骤请参见文章
2)第二种处理方法(意义不大)
既然错误提示“ORA-00258: manual archiving in NOARCHIVELOG mode must identify log”,那我们就可以
使用带有指定日志组的SQL命令完成归档操作。
第一种方法的步骤为:
1.查看系统的归档模式
SQL> archive log list;
Database log mode No Archive Mode
Automatic archival Disabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 49
Current log sequence 53
2.彻底关闭数据库
SQL> shutdown immediate
3.启动数据状态到mount
SQL> startup mount;
4.修改数据库的归档模式
SQL> alter database archivelog;
5.开启数据库
SQL> alter database open;
6.查看数据库已经为归档模式
SQL> archive log list;
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 52
Next log sequence to archive 56
Current log sequence 56
更多推荐
所有评论(0)