windows mysql全备批处理,此篇为分享,非原创!!

这里用户权限尽量是select,lock tables,event,super权限,备份参数加一个 – -dump-slave
REM 备份用户需要具有select,lock tables,event权限
REM –master-data 需要 replication client 权限 (master)   – -dump-slave:需要super权限(slave)
修改地方:为参数配置选项,包括目录、账号、密码、删除周期等
@ECHO OFF
REM ***************************************************************************
REM 参数配置(参数前后不能有空格)
REM 设置dbhost为主机名或IP地址
SET dbhost=localhostREM 设置登陆mysql数据库的用户名。如果用户名中有”号,请用””代替。
SET dbuser=xcgREM 设置登陆mysql的密码。如果密码中有”号,请用””代替。
SET dbpwd=123456

REM 设置backupPath为备份文件存放的路径。注意:文件夹名存在空格不需要引号括起来。警告:此文件夹应为专用目录,最好独立使用,避免删除历史备份时误删数据。
SET backupPath=C:\MySQLFullBackup

REM 备份文件夹前缀。
SET backupFolderPrefix=MyBackup_

REM 设置删除历史备份文件。删除多少次备份之前的备份文件。0–不删除历史备份文件;1,表示一次,2,表示2次,以此类推。如set deleteHistorySkips=30表示删除30次以前的备份文件;
SET deleteHistorySkips=10

REM 设置备份时发生错误是否删除历史备份文件。yes–删除;no–不删除。
SET onErrorDeleteBackFile=no

REM 是否启用压缩功能。yes–开启压缩功能。no–禁用压缩功能。默认值:no,不开启。
SET enableCompress=yes

REM 设置WinRAR压缩级别。取值0到5。0–无压缩;5–最高压缩比;默认值:3
SET compressLevel=3

REM 压缩类型。cab–系统内置cab压缩功能。rar–启用RAR压缩功能,需要安装RAR压缩软件支持
SET compressType=rar

REM 设置WinRAR安装路径。
SET rarPath=C:\Program Files\WinRAR

REM 设置分卷大小。0–表示不分卷;1–表示1k,1024–表示1M,2048–表示2M;默认值:102400,表示100M
SET volumePackSize=0

REM 设置压缩密码。{empty}表示没有密码。其他字符表示压缩文件密码
SET rarPwd={empty}

REM 设置临时目录。如果备份时系统默认临时目录所在分区空间太小,可以通过这里调整该脚本运行的临时目录。默认值:%TEMP%
REM 启用压缩时,零时目录占用空间较大,大约是备份数据库的1.2倍。不启用压缩,占用临时目录空间很小。
REM 如果启用了CAB压缩,临时目录最好和备份文件夹在同一个分区。请保证指定的临时目录存在。
SET TEMP=%TEMP%

REM 完成参数配置
REM ***************************************************************************
REM ***************************************************************************
REM 环境检测,参数检测和初始化
REM 设置%myDate%为当前日期(2013-01-02)。因为日期后可能跟一个空格和星期几,并且日期中可能是”/”分割,所以要去除掉星期几和斜线。
FOR /F “tokens=1,2* delims= ” %%i IN (‘ECHO %date:/=-%’) DO SET “myDate=%%i”
REM 设置%MyTime%为当前时间。格式:20.56.30.99
SET myTime=%TIME::=.%
SET myTime=%myTime: =0%

REM 设置零时目录
SET myTempDir=%TEMP%\MySQLBack_%myDate%_%MyTime%
REM 设置备份日志文件
SET backupLogFile=%backupPath%\MySQLBackLog.txt
REM 用于环境检测的零时文件名
SET checkFileName=_1_2_3_backup_mysql_check_%myDate%_%MyTime%

REM ****目录权限检测****
REM 检查备份目录是否存在,不存在则创建
:CheckAndMakeBackupFolder
IF exist “%backupPath%” GOTO CheckBackupFolderCreatFile
MD “%backupPath%”
IF %errorlevel%==0 GOTO CheckBackupFolderCreatFile
ECHO 创建数据库备份目录失败。请检测您是否具有写入”%backupPath%”的权限,或者驱动器是否存在。
PAUSE
GOTO END

REM 检查备份目录是否有创建文件的权限
:CheckBackupFolderCreatFile
ECHO. > “%backupPath%\%checkFileName%”
IF EXIST “%backupPath%\%checkFileName%” del “%backupPath%\%checkFileName%” /Q /F & GOTO CheckBackupFolderCreateFolder
ECHO 请检查对备份文件夹”%backupPath%”是否有文件写入权限。
PAUSE
GOTO END

REM 检查备份目录是否有创建文件夹的权限
:CheckBackupFolderCreateFolder
MD “%backupPath%\%checkFileName%” && ( RD /S /Q “%backupPath%\%checkFileName%” & GOTO CheckTempFolderAccess )
ECHO %myDate% %TIME%     请检查对备份文件夹”%backupPath%”是否有创建文件夹的权限。>>”%backupLogFile%”
GOTO END

REM 检测临时目录访问权限
:CheckTempFolderAccess
ECHO. > “%temp%\%checkFileName%”
IF EXIST “%temp%\%checkFileName%” DEL “%temp%\%checkFileName%” /Q /F & GOTO MakeTempFolder
ECHO %myDate% %TIME%     没有临时目录写入权限。请用具有权限的用户执行备份脚本。>>”%backupLogFile%”
GOTO END

REM 创建零时目录
:MakeTempFolder
MD “%myTempDir%” && GOTO CheckMySQLInstalled
ECHO %myDate% %TIME%     无法创建临时目录”%myTempDir%”。请检查临时目录权限。>>”%backupLogFile%”
GOTO END

REM ****完成目录权限检测****
REM 检测MySQL是否安装
:CheckMySQLInstalled
mysql –help > NUL && GOTO CheckMySQLConnect
ECHO %myDate% %TIME%     无法检测到mysql,请确保已经正确安装MySQL.或者将MySQL的Bin目录的路径添加到系统变量Path中。>>”%backupLogFile%”
GOTO CheckParmsFailed

REM 验证数据库连接
:CheckMySQLConnect
ECHO exit | mysql -h”%dbhost%” -u”%dbuser%” -p”%dbpwd%” > NUL && GOTO CheckdeleteHistorySkips
ECHO %myDate% %TIME%     无法连接到%dbhost%。请检服务是否启动,连接的用户名和密码是否正确。>>”%backupLogFile%”
GOTO CheckParmsFailed

REM 验证删除历史备份配置参数
:CheckdeleteHistorySkips
ECHO %deleteHistorySkips%| findstr /be “[0-9]*” > nul && GOTO CheckOnErrorDeleteBackFile
ECHO %myDate% %TIME%     删除历史备份文件”deleteHistorySkipsFailed”配置错误,只能配置整数。>>”%backupLogFile%”
GOTO CheckParmsFailed

REM 验证删除历史备份配置参数
:CheckOnErrorDeleteBackFile
IF %onErrorDeleteBackFile%==no GOTO CheckCompressConfig
IF %onErrorDeleteBackFile%==yes GOTO CheckCompressConfig
ECHO %myDate% %TIME%     备份错误时是否删除历史文件”onErrorDeleteBackFile”配置参数错误。>>”%backupLogFile%”
GOTO CheckParmsFailed

REM 检查压缩软件配置
:CheckCompressConfig
IF %enableCompress%==no GOTO CheckSuccess
IF %enableCompress%==yes GOTO CheckCompressLevel
ECHO %myDate% %TIME%     是否启用压缩变量”enableCompress”的参数只能是”yes”或者”no”.请检查配置。>>”%backupLogFile%”
GOTO CheckParmsFailed

REM 检查压缩级别
:CheckCompressLevel
ECHO %compressLevel%| findstr /be “[0-5]” > nul && GOTO CheckVolumePackSize
ECHO %myDate% %TIME%     压缩级别”compressLevel”配置错误,参数只能是0~5的数字>>”%backupLogFile%”
GOTO CheckParmsFailed

REM 验证RAR分卷大小设置
:CheckVolumePackSize
ECHO %volumePackSize%| findstr /be “[0-9]*” > nul && GOTO CheckCompressType
ECHO %myDate% %TIME%     压缩包分卷大小”volumePackSize”配置错误。请检查设置。>>”%backupLogFile%”
GOTO CheckParmsFailed

REM 检查压缩类型
:CheckCompressType
IF %compressType%==rar GOTO CheckRarPath
IF %compressType%==cab GOTO CheckMakeCab
ECHO %myDate% %TIME%     压缩类型”compressType”设置错误.值只能是”cab”或者”rar”.请检查设置。>>”%backupLogFile%”
GOTO CheckParmsFailed

REM 验证RAR配置目录
:CheckRarPath
IF exist “%rarPath%\Rar.exe” GOTO CheckSuccess
ECHO %myDate% %TIME%     WinRAR安装路径”rarPath”设置错误.请检查设置。>>”%backupLogFile%”
GOTO CheckParmsFailed

REM 验证makecab
:CheckMakeCab
makecab /? >NUL && GOTO CheckSuccess
ECHO %myDate% %TIME%     系统内置MakeCab压缩功能无法使用,请使用RAR进行压缩。>>”%backupLogFile%”
GOTO CheckParmsFailed

REM 参数验证无法通过时
:CheckParmsFailed
ECHO 无法完成初始化。请查看日志文件:%backupLogFile%
RD /S /Q “%myTempDir%”
GOTO END

REM 验证成功
:CheckSuccess

REM 完成环境检测和初始化
REM ***************************************************************************
REM ***************************************************************************
REM 备份数据库

ECHO %myDate% %TIME%     启动数据库备份脚本…>>”%backupLogFile%”

REM 当前备份使用的文件夹
set backupName=%backupFolderPrefix%%myDate% %myTime%

REM 根据需要创建专属目录。在分卷压缩或者不压缩时,需要专属目录
IF %enableCompress%==no MD “%backupPath%\%backupName%”
IF %enableCompress%==yes ( IF NOT %volumePackSize%==0 MD “%backupPath%\%backupName%” )
IF “%enableCompress%”==”yes” MD “%myTempDir%\%backupName%”REM 设置数据库备份使用的直接目录
IF “%enableCompress%”==”no” SET backDbTmpPath=%backupPath%\%backupName%
IF “%enableCompress%”==”yes” SET backDbTmpPath=%myTempDir%\%backupName%SET errorFile=%backDbTmpPath%\##BackupFailDbs.txt
SET dbList=%myTempDir%\dblist.txt
SET backmysqlbat=%myTempDir%\bakmysql.bat

REM 生成数据库列表文件

mysql -h”%dbhost%” -u”%dbuser%” -p”%dbpwd%” -B -N -e “SELECT  SCHEMA_NAME FROM information_schema.SCHEMATA WHERE information_schema.SCHEMATA.SCHEMA_NAME NOT in(‘information_schema’,’performance_schema’,’test’);”  > “%dblist%”
SET isExistError=noREM 创建备份MySQL数据库的脚本。
REM –master-data:用于master端备份数据,添加新主从   –dump-slave:用于slave端,在此基础上添加主从

ECHO ECHO 未成功备份的数据库: ^> “%errorFile%” > “%backmysqlbat%”
FOR /f “usebackq  tokens=*” %%i in (“%dblist%”) DO ECHO mysqldump  -h”%dbhost%” -u”%dbuser%” -p”%dbpwd%”  -E –triggers -R -C -q  –hex-blob  –dump-date –single-transaction “%%i” ^> “%backDbTmpPath%\%%i.sql” >>”%backmysqlbat%” && ECHO if not %%errorlevel%%==0 (ECHO %%i ^>^> “%errorFile%” ^& ECHO %myDate% %TIME%     数据库备份失败:%%i^>^>”%backupLogFile%” ^& SET isExistError=yes) >> “%backmysqlbat%”

call “%backmysqlbat%”REM 如果不存在错误,删除错误文件。
IF %isExistError%==no DEL “%errorFile%” /Q /F > NUL
IF %enableCompress%==yes GOTO CompressBackup
GOTO BackupFinishedREM ****压缩处理****
:CompressBackup
IF %compressType%==rar GOTO RarCompress

REM CAB压缩处理
REM 进行CAB压缩。注:makecab,不能在一个压缩包中创建目录。而且需要创建文件列表才能创建多文件压缩包。同时文件名不能重复。
FOR /f “tokens=1* delims=” %%i in (‘DIR “%backDbTmpPath%” /S /B /A-D’) do echo “%%i” >> “%myTempDir%\cab_files.lst”
SET cabCompressLevel=18
IF %compressLevel%==0 SET cabCompressLevel=15
IF %compressLevel%==0 SET cabCompressLevel=21
REM 切换到零时目录
FOR /F “delims=:” %%i IN (‘ECHO %myTempDir%’) DO %%i:
CD “%myTempDir%”

IF NOT %volumePackSize%==0 GOTO CabSplitCompress
makecab /f “%myTempDir%\cab_files.lst” /d compressiontype=lzx /d compressionmemory=%cabCompressLevel% /d maxdisksize=0 /d diskdirectorytemplate=cabdb /d cabinetnametemplate=”%backupName%.cab”
MOVE /Y “%myTempDir%\cabdb\%backupName%.cab” “%backupPath%\”
GOTO BackupFinished

:CabSplitCompress
SET /A maxdisksize=%volumePackSize% * 1024
makecab /f “%myTempDir%\cab_files.lst” /d compressiontype=lzx /d compressionmemory=%cabCompressLevel% /d maxdisksize=%maxdisksize% /d diskdirectorytemplate=cabdb /d cabinetnametemplate=”%backupName%.part*.cab”
MOVE /Y “%myTempDir%\cabdb\*” “%backupPath%\%backupName%\”
GOTO BackupFinished

REM RAR 压缩处理
:RarCompress
SET rarCommand=”%rarPath%\rar.exe” a -r -ep1 -o+ -m%compressLevel%
IF NOT %volumePackSize%==0 SET rarCommand=%rarCommand% -v%volumePackSize%
IF NOT %rarPwd%=={empty} SET rarCommand=%rarCommand% -p%rarPwd%
REM 如果未分卷,保存在备份目录的根目录
IF %volumePackSize%==0 SET rarCommand=%rarCommand% “%backupPath%\%backupName%.rar”
REM 如果分卷,保存在根目录下的一个专属文件夹中
IF NOT %volumePackSize%==0 SET rarCommand=%rarCommand% “%backupPath%\%backupName%\%backupName%.rar”
SET rarCommand=%rarCommand% “%backDbTmpPath%\”
%rarCommand%
REM ****完成压缩处理****

:BackupFinished
ECHO %myDate% %TIME%     完成一次自动备份。备份目录:”%backupPath%\%backupName%” >> “%backupLogFile%”
IF %isExistError%==yes ECHO                    但是存在没有成功备份的数据库。查看没有成功备份的数据库,请查看文件备份文件夹中的”##BackupFailDbs.txt” >> “%backupLogFile%”

REM 完成备份数据库
REM ***************************************************************************
REM ***************************************************************************
REM 删除历史备份

:RemoveHistoryBackup
IF %isExistError%==yes ( IF %onErrorDeleteBackFile%==no GOTO ClearTmpFile )
IF %deleteHistorySkips%==0 GOTO ClearTmpFile
IF %enableCompress%==no GOTO RemoveHistoryBackupFolder
IF NOT %volumePackSize%==0 GOTO RemoveHistoryBackupFolder
GOTO RemoveHistoryBackupFile

:RemoveHistoryBackupFolder
FOR /F “Skip=%deleteHistorySkips% tokens=*” %%i IN (‘DIR “%backupPath%\%backupFolderPrefix%*” /TC /O-D /AD /B’) DO RD “%backupPath%\%%i” /S /Q & ECHO %myDate% %TIME%     删除历史备份:%%i >> “%backupLogFile%”
GOTO ClearTmpFile

:RemoveHistoryBackupFile
FOR /F “Skip=%deleteHistorySkips% tokens=*” %%i IN (‘DIR “%backupPath%\%backupFolderPrefix%*” /TC /O-D /A-D /B’) DO DEL “%backupPath%\%%i” /Q /F & ECHO %myDate% %TIME%     删除历史备份:%%i >> “%backupLogFile%”
GOTO ClearTmpFile

REM 完成删除历史备份
REM ***************************************************************************

:ClearTmpFile
CD \
RD /S /Q “%myTempDir%” > NUL

:END
ECHO. >> “%backupLogFile%”

线上mysql数据库不停机的环境下,如何添加新的从机 — mysqldump

    在上一篇博文中,提到使用xtrabackup工具来实现热备,这篇我通过mysqldump来实现在线添加从机

一.目前的基本环境:
  主DB:192.168.1.101
  从DB1:192.168.1.102
  从DB2:192.168.1.100(准备在线添加做为从机的mysql数据库)
  数据库版本:mysql 5.1.61(select  version())
  服务器版本:red hat linux 6
        注:目前主从正常(show slave status\G),同步的数据库为 login
               同步的表为innodb引擎的表
        注:思路是备份,可是用mysqldump备份会锁表,如果数据量很大的话,线上环境肯定不允许使用mysqldump备份
               所以,我们采用的xtrabackup来进行在线热备,至于,它的原理,请各位自行google
二.部署实例:
        1.主DB,线上数据正常写入的同时我实施备份
  1. # 使用mysqldump进行备份,使用–master-data参数:此值有1和2,大家可以自己google以下  
  2. [root@client101 ~]# mysqldump -uroot -pkongzhong –opt –hex-blob –single_transaction -R –default-character-set=utf8 –master-data=2 login>/tmp/login.sql  
  3. # 再开一个端口,插入数据  
  4. mysql> insert into a select * from a;  
  5. # 备份完毕后,我们查看刚才的备份发现,master的日志文件和pos号  
  6. [root@client101 ~]# grep -i  “change master”  /tmp/login.sql  
  7. — CHANGE MASTER TO MASTER_LOG_FILE=’mysql-101-bin.000007′, MASTER_LOG_POS=107;  
  8. # 我刚才在备份的时候也插入数据的,我再看看主上实际的日志文件和pos号  
  9. mysql> show master status;  
  10. +———————-+———-+————–+——————+  
  11. | File                 | Position | Binlog_Do_DB | Binlog_Ignore_DB |  
  12. +———————-+———-+————–+——————+  
  13. | mysql-101-bin.000007 |      532 |              |                  |  
  14. +———————-+———-+————–+——————+  
  15. # 现在我们利用备份还原,利用备份的里的pos号,看能否追上主  

2.备份完成后,将数据传送到需要作为新从机的DB server(192.168.1.100)上用于在上面进行还原

  1. [root@client101 ~]# scp /tmp/login.sql  192.168.1.100:/tmp  

3.从DB2上,使用刚才的备份,并用于恢复

  1. [root@client100 tmp]# mysql -uroot -pkongzhong  login </tmp/login.sql  
  2. # 修改配置文件:/etc/my.cnf  
  3. replicate-wild-do-table=login.%  
  4. innodb_file_per_table=1  
  5. report-host=192.168.1.100  
  6. innodb_lock_wait_timeout=1  
  7. expire_logs_days= 3  
  8. max_binlog_size= 100M  
  9. server-id=100  
  10. # 重新启动数据库  
  11. [root@client103 mysql]# /etc/init.d/mysqld restart  

4.将从DB2的主机指向主DB1

  1. # 备份文件里有备份时的master日志文件和pos号  
  2. [root@client100 ~]# grep -i  “change master”  /tmp/login.sql  
  3. — CHANGE MASTER TO MASTER_LOG_FILE=’mysql-101-bin.000007′, MASTER_LOG_POS=107;  
  4. # 建立主从关系  
  5. mysql> change master to master_host=’192.168.1.101′,  
  6.     -> master_user=’slave’,  
  7.     -> master_password=’slave’,  
  8.     -> master_log_file=’mysql-101-bin.000007′,  
  9.     -> master_log_pos=107;  
  10. # 开启同步  
  11. mysql> start slave;  
  12. # 查看同步状态  
  13. mysql> show slave status\G;  

5.此时如果都为yes,则主从则建立完毕!发现数据已经追上从机了

大家可以自行测试!

 

mysql 数据库自动备份

在数据库的管理过程中,经常涉及到数据库的备份问题,我们往往是采用脚本自动备份,下面演示一下备份相关问题

1.创建备份脚本,指定备份的数据库,用户密码等等

  1. [root@client100 ~]# vim backup.sh  
  2. # 备份脚本如下:  
  3.   
  4. #! /bin/bash  
  5.   
  6. # 进入mysqldump命令目录  
  7. cd /usr/bin/  
  8.   
  9. # 设置备份的时间,备份信息存放文件,备份路径,压缩路径,备份的用户,密码,主机,端口,数据库  
  10. DD=`date +%y-%m-%d==%H:%M:%S`  
  11. LOGFILE=/var/lib/mysql/mysqlbackup.log  
  12. backup_dir=/var/lib/mysql/dbbackup/  
  13. zip_dir=/var/lib/mysql/zipdir/  
  14. dbusername=backup  
  15. dbpassword=kongzhong  
  16. host=127.0.0.1  
  17. port=3306  
  18. # port2=3307  
  19. database1=login  
  20. # database2=  
  21. # database3=  
  22.   
  23. # 指定生成备份的文件名,压缩后的文件名  
  24. DumpFile=”$database1″$(date +%y%m%d).dump  
  25. NewFile=”$database1″$(date +%y%m%d).tgz  
  26.   
  27. # 查看备份的目录是否存在,不存在建立,并修改为mysql权限,并将相应输出信息写入日志文件  
  28. echo “check directory…” >> $LOGFILE  
  29. if [ ! -d $backup_dir ] ;then  
  30.   mkdir -p $backup_dir  
  31.   chown mysql:mysql $backup_dir  
  32. fi  
  33. echo $DD ” backup start…” >> $LOGFILE  
  34. echo $DD >>$LOGFILE  
  35. echo “backup “$database1″ …” >> $LOGFILE  
  36.   
  37. # 备份数据库  
  38. ./mysqldump -h$host -P$port -u$dbusername -p$dbpassword  $database1 > $backup_dir$DumpFile  
  39.   
  40. # 进入数据备份目录,压缩备份的文件,压缩完后删除dump文件  
  41. cd $backup_dir  
  42. tar czvf $NewFile $DumpFile >> $LOGFILE 2>&1  
  43. rm -rf $DumpFile  
  44.   
  45. # 判断压缩存放目录是否存在,不存在,建立,修改权限,并将压缩过的备份文件移送到压缩目录  
  46. echo “moving zipfiles …” >> $LOGFILE  
  47. cd $backup_dir  
  48. if [ ! -d $zip_dir ] ;then  
  49.   mkdir -p $zip_dir  
  50.   chown mysql:mysql $zip_dir  
  51. fi  
  52.  mv *.tgz  $zip_dir  
  53.   
  54. # 删除3天前的备份  
  55. #remove before 3 days  
  56. echo “remove before 3 days…” >> $LOGFILE  
  57. find $zip_dir –type f -mtime +3 –exec rm -f {} \;  
  58. echo “remove before 3 days OK” >>$LOGFILE  
  59.   
  60. echo “backup over” >> $LOGFILE  

2.给备份文件执行的权限

[root@client100 ~]# chmod +x backup.sh

3.先执行脚本测试,是否报错

[root@client100 ~]# ./backup.sh

4.如果测试正常,切换到mysql用户目录下,建立计划任务(假设每天凌晨3点备份)

[root@client100 ~]# su – mysql

# 下面就是建立计划任务(分 时 日 月 周 执行脚本的路径文件名)

[mysql@client100 ~]#crontab -e

0 3 * * * ./tmp/backup.sh

# 如果计划任务建好后,使用下面命令可以看到

[mysql@client100 ~]#crontab -l

5.现在备份计划就做好了,下面就可以正式测试了[如果备份有错误,可以查看刚才设置的备份日志,看输出信息排错]

 

oracle基于用户管理的备份[归档模式]

1.oracle的热备的解释:[联机备份,全备,部分备份]
oracle的热备份是指数据库处于open状态下,对数据库的数据文件、控制文件、参数文件、密码文件等进行一系列备份操作。
热备是基于用户管理备份恢复的一种方式,也是除了RMAN备份之外较为常用的一种备份方式。

2.热备的思路:[备份控制文件和数据文件,两者需分开备份,归档日志文件可选]
(1).冻结块头   –>  控制SCN在备份时不发生变化,此时可以操作数据库,但是没有checkpoint
(2).进行物理拷贝
(3).解冻块头   –>  让SCN可以变化(当对SCN解冻后,系统会自动更新SCN至最新的状态)

3.备份的步骤

(1).检查数据库是否在非归档模式:

  1. SYS> archive log list  
  2. Database log mode No Archive Mode # 表明在非归档模式  
  3. Automatic archival Disabled  
  4. Archive destination USE_DB_RECOVERY_FILE_DEST  
  5. Oldest online log sequence 17  
  6. Current log sequence 19  
  7. 或  
  8. SYS> select log_mode from V$database;  
  9. LOG_MODE  
  10. ————  
  11. NOARCHIVELOG # 表明在非归档模式  

(2).如不是归档模式,需改为归档模式:

  1. SYS> shutdown immediate  
  2. SYS> startup mount  
  3. SYS> alter database archivelog # 打开归档模式  
  4. SYS> alter database open  

(3).备份数据文件分为全部备份,部分备份..

查看备份状态,NOT ACTIVE表示没有开启备份模式,ACTIVE表示开启备份模式

  1. SYS> select * from v$backup;  
  2. FILE#              STATUS      CHANGE#    TIME  
  3. ———- —————— ———- ———  
  4. 1                NOT ACTIVE      0  
  5. 2                NOT ACTIVE      0  
  6. 3                NOT ACTIVE      0  
  7. 4                NOT ACTIVE      0  
  8. 5                NOT ACTIVE      0  

a.全部备份:[基于数据库]

查看数据文件的位置:

  1. SYS> select name from v$datafile;  
  2. NAME  
  3. ————————————————  
  4. /u01/app/oracle/oradata/orcl/system01.dbf  
  5. /u01/app/oracle/oradata/orcl/sysaux01.dbf  
  6. /u01/app/oracle/oradata/orcl/undotbs01.dbf  
  7. /u01/app/oracle/oradata/orcl/users01.dbf  
  8. /u01/app/oracle/oradata/orcl/example01.dbf  

打开备份模式:

  1. SYS> alter database begin backup; # 检查点通知DBWn将该表空间上所有的脏数据被写入到磁盘,产生scn号,并冻结scn  

复制数据文件到备份目录:

  1. [oracle@localhost ~]$ cd /u01/app/oracle/oradata/orcl/  
  2. [oracle@localhost orcl]$ ls  
  3. control01.ctl redo01.log redo03.log system01.dbf undotbs01.dbf  
  4. example01.dbf redo02.log sysaux01.dbf temp01.dbf users01.dbf  
  5. [oracle@localhost orcl]$ cp *.dbf /backup/2013-6/ # 这里仅复制数据文件到备份目录  

关闭备份模式:

  1. SYS> alter database end backup;  

b.部分备份:[基于表空间]

查看数据文件的位置:

  1. SYS> select name from v$datafile;  
  2. NAME  
  3. ————————————————  
  4. /u01/app/oracle/oradata/orcl/system01.dbf  
  5. /u01/app/oracle/oradata/orcl/sysaux01.dbf  
  6. /u01/app/oracle/oradata/orcl/undotbs01.dbf  
  7. /u01/app/oracle/oradata/orcl/users01.dbf  
  8. /u01/app/oracle/oradata/orcl/example01.dbf  

打开备份模式:

  1. SYS> alter tablespace 表空间的名字 begin backup; # 检查点通知DBWn将该表空间上所有的脏数据被写入到磁盘,产生scn号,并冻结  

复制数据文件到备份目录:

  1. [oracle@localhost ~]$ cd /u01/app/oracle/oradata/orcl/  
  2. [oracle@localhost orcl]$ ls  
  3. control01.ctl redo01.log redo03.log system01.dbf undotbs01.dbf  
  4. example01.dbf redo02.log sysaux01.dbf temp01.dbf users01.dbf  
  5. [oracle@localhost orcl]$ cp *.dbf[表空间名对应的数据文件] /backup/2013-6/ # 这里仅复制数据文件到备份目录  

关闭备份模式:

  1. SYS> alter tablespace 表空间的名字 end backup;  

c.在备份模式下,突然断电后,启动数据库会报:1113/1110错误:
解决方法:关闭备份模式:

采用以下两种方式:

  1. SYS> alter tablespace datafile 文件的编号 end backup; # 此编号可以在V$BACKUP里面查到[active状态的文件]  
  2. SYS> alter database end backup;  

d.只读表空间备份,一般只需备份一次就可以,因为不会有修改

(4).备份控制文件:

两种方式

  1. SYS> alter database backup controlfile to ‘路径.名字’ ; — 控制文件的完整备份  
  2. 或  
  3. SYS> alter database backup controlfile to trace — 用于创建控制文件的语句,丢失了部分信息  

# 此文件存放在/u01/app/oracle/admin/orcl/udump/* ==> ll -t :最上面一个就是,恢复时,可导入此文件,创建控制文件[数据文件,日志文件等都在]

# select p.pid from v$session s,v$process p where s.paddr=p.addr and s.username=’SYS’;

#   查出的pid号,和上面的文件一致,就表示为刚才创建的那个文件

控制文件一般发生变化才需要备份,一般控制文件发生变化的情况:

  1. alter database [add |drop] logfile  
  2. alter database [add |drop] logfile member  
  3. alter database [add |drop] logfile group  
  4. alter database [archivelog |noarchivelog]  
  5. alter database rename file  
  6. create tablespace  
  7. alter tablespace [add | rename] datafile  
  8. alter tablespace [read write | read only]  
  9. drop tablespace  

(5).备份参数文件:

  1. create pfile from spfile ;  
  2. 或  
  3. create pfile = ‘路径/名称’ from spfile;  

(6).临时表空间的数据文件、日志文件不需要备份[归档日志可以分散存储到多个磁盘上]

4.检查备份文件的有效性:[是否完整,需不需要重新备份] ==> dbv 命令

dbv file=/backup/2013-6/某个文件名

# 归档日志的删除只能使用 RMAN 工具删除,不可使用 RM 删除