分享好友 编程语言首页 频道列表

PowerShell 自动备份oracle并上传到ftp

PowerShell  2015-11-08 04:320

一.windows平台

1.rman自动备份方法

# Author: Edward.Zhou -- <edgeman_03@163.com>
# Purpose: Windows平台下采用PowerShell使用rman自动备份oracle并上传备份到ftp,并根据日期自动保留所需备份
# Created: 2015/8/12
 
$env:ORACLE_SID="orcl"
$env:NLS_LANG="AMERICAN_AMERICA.AL32UTF8"
 
$NOWDATE=Get-Date -UFormat %Y_%m_%d
$NOWDATE1=Get-Date -UFormat %Y%m%d
$NOWTIME=Get-Date -UFormat %Y%m%d%H%M%S
$OLDDATE=((Get-Date).AddDays(-2)).ToString('yyyyMMdd')
$FTPOLDDATE=((Get-Date).AddDays(-2)).ToString('yyyy_MM_dd')
 
#建立备份目录基本环境
$BACKUPDIR="c:\bak\rman"
 
if ((Test-Path -Path $BACKUPDIR) -eq $false) {
  New-Item -Type directory -Path $BACKUPDIR
}
 
#rman备份
 
Write-Output "
run
{
allocate channel d1 type disk;
allocate channel d2 type disk;
allocate channel d3 type disk;
crosscheck backup;
sql 'alter system archive log current';
backup as compressed backupset full tag '$env:COMPUTERNAME-$env:ORACLE_SID-$NOWDATE' database format '$BACKUPDIR\db_%d_%T_%s';
sql 'alter system archive log current';
backup as compressed backupset archivelog all tag '$env:COMPUTERNAME-$env:ORACLE_SID-$NOWDATE' format '$BACKUPDIR\arch_%d_%T_%s' delete all input;
backup as compressed backupset current controlfile tag '$env:COMPUTERNAME-$env:ORACLE_SID-$NOWDATE' format '$BACKUPDIR\con_%d_%T_%s';
crosscheck archivelog all;
delete noprompt expired backup;
delete noprompt expired archivelog all;
delete noprompt obsolete;
release channel d1;
release channel d2;
release channel d3;
}
" | Out-File -Encoding Default -Force -FilePath $BACKUPDIR\rmanbak.txt 
 
rman target / cmdfile="$BACKUPDIR\rmanbak.txt" log="$BACKUPDIR\$env:COMPUTERNAME-$env:ORACLE_SID-rmanbak-$NOWTIME.log"
Remove-Item -Force -Path $BACKUPDIR\rmanbak.txt
Remove-Item -Force -Path $BACKUPDIR\* -Include *$OLDDATE* -Recurse
 
 
#上传备份至FTP方法一
Import-Module PSFTP
$FTP_HOST="1.1.1.1"
$FTP_USERNAME="backup"
$FTP_PASSWORD=ConvertTo-SecureString "backup" -AsPlainText -Force
$Credentials=New-Object System.Management.Automation.PSCredential($FTP_USERNAME,$FTP_PASSWORD)
Set-FTPConnection -Credentials $Credentials -Server ftp://$FTP_HOST -Session rmanbakSession -UsePassive -UseBinary -KeepAlive -ignoreCert
$Session=Get-FTPConnection -Session rmanbakSession
 
if ($Session -eq $null) {
  Set-FTPConnection -Credentials $Credentials -Server ftp://$FTP_HOST -Session rmanbakSession -UsePassive -UseBinary -KeepAlive -ignoreCert
}
if ((Get-FTPChildItem -Session $Session -Path / -ErrorAction SilentlyContinue -Filter rmanbak) -eq $null) {
  New-FTPItem -Session $Session -Path / -Name "rmanbak"
}
if ((Get-FTPChildItem -Session $Session -Path /rmanbak -ErrorAction SilentlyContinue -Filter $env:COMPUTERNAME) -eq $null) {
  New-FTPItem -Session $Session -Path /rmanbak -Name $env:COMPUTERNAME
}
if ((Get-FTPChildItem -Session $Session -Path /rmanbak/$env:COMPUTERNAME -ErrorAction SilentlyContinue -Filter $NOWDATE) -eq $null) {
  New-FTPItem -Session $Session -Path /rmanbak/$env:COMPUTERNAME -Name $NOWDATE
}
foreach($Filename in (Get-ChildItem -Path $BACKUPDIR -Recurse -Filter *$NOWDATE1*))
  {
    Add-FTPItem -Session $Session -Overwrite -BufferSize 102400 -Path /rmanbak/$env:COMPUTERNAME/$NOWDATE -LocalPath $BACKUPDIR\$Filename
  }
if ((Get-FTPChildItem -Session $Session -Path /rmanbak/$env:COMPUTERNAME -ErrorAction SilentlyContinue -Filter $FTPOLDDATE) -ne $null) {
  Remove-FTPItem -Path /rmanbak/$Env:COMPUTERNAME/$FTPOLDDATE -Session $Session -Recurse
}
 
#上传备份至FTP方法二
#$FTP_HOST="1.1.1.1"
#$FTP_USERNAME="backup"
#$FTP_PASSWORD="backup"
#
#Set-Location -Path $BACKUPDIR
#
#Write-Output "open $FTP_HOST
#user $FTP_USERNAME $FTP_PASSWORD
#bin
#mkdir rmanbak
#cd rmanbak
#mkdir $Env:COMPUTERNAME
#cd $Env:COMPUTERNAME
#mkdir $NOWDATE
#cd $NOWDATE
#lcd $NOWDATE
#mput *
#cd ..\$FTPOLDDATE
#mdelete *
#cd ..
#rmdir $FTPOLDDATE
#bye" | Out-File -Force -Encoding Default -FilePath $BACKUPDIR\ftp.cfg
#ftp -i -n -v -s:$BACKUPDIR\ftp.cfg
#Remove-Item -Force -Path $BACKUPDIR\ftp.cfg

2.exp自动备份方法

# Author: Edward.Zhou -- <edgeman_03@163.com>
# Purpose: Windows平台下采用PowerShell使用exp自动备份oracle并上传备份到ftp,并根据日期自动保留所需备份
# Created: 2015/8/8
 
$env:ORACLE_SID="orcl"
$env:NLS_LANG="AMERICAN_AMERICA.AL32UTF8"
 
$NOWDATE=Get-Date -UFormat %Y_%m_%d
$NOWTIME=Get-Date -UFormat %Y%m%d%H%M%S
$OLDDATE=((Get-Date).AddDays(-1)).ToString('yyyy_MM_dd')
$FTPOLDDATE=((Get-Date).AddDays(-7)).ToString('yyyy_MM_dd')
 
#建立备份目录基本环境
$BACKUPDIR="d:\bak\dmp"
 
if ((Test-Path -Path $BACKUPDIR) -eq $false) {
  New-Item -Type directory -Path $BACKUPDIR
}
if ((Test-Path -Path $BACKUPDIR\$NOWDATE) -eq $false) {
  New-Item -Type directory -Path $BACKUPDIR\$NOWDATE
}
if ((Test-Path -Path $BACKUPDIR\$OLDDATE) -eq $true) {
  Remove-Item -Recurse -Force -Path $BACKUPDIR\$OLDDATE
}
 
#exp备份
$USERNAME="system"
$PASSWORD="system"
 
exp $USERNAME/$PASSWORD file=$BACKUPDIR\$NOWDATE\$env:COMPUTERNAME-$env:ORACLE_SID-fullbackup_$NOWTIME.dmp log=$BACKUPDIR\$NOWDATE\$env:COMPUTERNAME-$env:ORACLE_SID-fullbackup_$NOWTIME.log full=y direct=y consistent=y buffer=102400
 
#上传备份至FTP方法一
Import-Module PSFTP
$FTP_HOST="1.1.1.1"
$FTP_USERNAME="backup"
$FTP_PASSWORD=ConvertTo-SecureString "backup" -AsPlainText -Force
$Credentials=New-Object System.Management.Automation.PSCredential($FTP_USERNAME,$FTP_PASSWORD)
Set-FTPConnection -Credentials $Credentials -Server ftp://$FTP_HOST -Session oradmpSession -UsePassive -UseBinary -KeepAlive -ignoreCert
$Session=Get-FTPConnection -Session oradmpSession
 
if ($Session -eq $null) {
  Set-FTPConnection -Credentials $Credentials -Server ftp://$FTP_HOST -Session oradmpSession -UsePassive -UseBinary -KeepAlive -ignoreCert
}
if ((Get-FTPChildItem -Session $Session -Path / -ErrorAction SilentlyContinue -Filter oradmp) -eq $null) {
  New-FTPItem -Session $Session -Path / -Name "oradmp"
}
if ((Get-FTPChildItem -Session $Session -Path /oradmp -ErrorAction SilentlyContinue -Filter $env:COMPUTERNAME) -eq $null) {
  New-FTPItem -Session $Session -Path /oradmp -Name $env:COMPUTERNAME
}
if ((Get-FTPChildItem -Session $Session -Path /oradmp/$env:COMPUTERNAME -ErrorAction SilentlyContinue -Filter $NOWDATE) -eq $null) {
  New-FTPItem -Session $Session -Path /oradmp/$env:COMPUTERNAME -Name $NOWDATE
}
foreach($Filename in (Get-ChildItem -Path $BACKUPDIR\$NOWDATE -Recurse))
  {
    Add-FTPItem -Session $Session -Overwrite -BufferSize 102400 -Path /oradmp/$env:COMPUTERNAME/$NOWDATE -LocalPath $BACKUPDIR\$NOWDATE\$Filename
  }
if ((Get-FTPChildItem -Session $Session -Path /oradmp/$env:COMPUTERNAME -ErrorAction SilentlyContinue -Filter $FTPOLDDATE) -ne $null) {
  Remove-FTPItem -Path /oradmp/$Env:COMPUTERNAME/$FTPOLDDATE -Session $Session -Recurse
}
 
#上传备份至FTP方法二
#$FTP_HOST="1.1.1.1"
#$FTP_USERNAME="backup"
#$FTP_PASSWORD="backup"
#
#Set-Location -Path $BACKUPDIR
#
#Write-Output "open $FTP_HOST" | Out-File -Append -Force -Encoding Default -FilePath $BACKUPDIR\ftp.cfg 
#Write-Output "user $FTP_USERNAME $FTP_PASSWORD" | Out-File -Append -Force -Encoding Default -FilePath $BACKUPDIR\ftp.cfg 
#Write-Output "bin" | Out-File -Append -Force -Encoding Default -FilePath $BACKUPDIR\ftp.cfg 
#Write-Output "mkdir oradmp" | Out-File -Append -Force -Encoding Default -FilePath $BACKUPDIR\ftp.cfg 
#Write-Output "cd oradmp" | Out-File -Append -Force -Encoding Default -FilePath $BACKUPDIR\ftp.cfg 
#Write-Output "mkdir $Env:COMPUTERNAME" | Out-File -Append -Force -Encoding Default -FilePath $BACKUPDIR\ftp.cfg 
#Write-Output "cd $Env:COMPUTERNAME" | Out-File -Append -Force -Encoding Default -FilePath $BACKUPDIR\ftp.cfg 
#Write-Output "mkdir $NOWDATE" | Out-File -Append -Force -Encoding Default -FilePath $BACKUPDIR\ftp.cfg 
#Write-Output "cd $NOWDATE" | Out-File -Append -Force -Encoding Default -FilePath $BACKUPDIR\ftp.cfg 
#Write-Output "lcd $NOWDATE" | Out-File -Append -Force -Encoding Default -FilePath $BACKUPDIR\ftp.cfg 
#Write-Output "mput *" | Out-File -Append -Force -Encoding Default -FilePath $BACKUPDIR\ftp.cfg
#Write-Output "cd ..\$FTPOLDDATE" | Out-File -Append -Force -Encoding Default -FilePath $BACKUPDIR\ftp.cfg
#Write-Output "mdelete *" | Out-File -Append -Force -Encoding Default -FilePath $BACKUPDIR\ftp.cfg
#Write-Output "cd .." | Out-File -Append -Force -Encoding Default -FilePath $BACKUPDIR\ftp.cfg
#Write-Output "rmdir $FTPOLDDATE" | Out-File -Append -Force -Encoding Default -FilePath $BACKUPDIR\ftp.cfg
#Write-Output "bye" | Out-File -Append -Force -Encoding Default -FilePath $BACKUPDIR\ftp.cfg
#ftp -i -n -v -s:$BACKUPDIR\ftp.cfg
#Remove-Item -Force -Path $BACKUPDIR\ftp.cfg

二.Unix平台

#!/bin/ksh
# Author: Edward.Zhou -- <edgeman_03@163.com>
# Purpose: 使用exp自动备份oracle并上传数据到ftp
# Created: 2015/8/8
 
source ~/.profile
export ORACLE_SID=odb1
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
HOSTNAME=`hostname -s`
NOWDATE=`date +%Y_%m_%d`
NOWTIME=`date +%Y%m%d%H%M%S`
OLDDATE=`date +%Y_%m_%d -d '-1 days'`
FTPOLDDATE=`date +%Y_%m_%d -d '-7 days'`
 
#建议备份基本目录环境
BACKUPDIR=/tmp/dmp
[ -d ${BACKUPDIR} ] || mkdir -p ${BACKUPDIR}
[ -d ${BACKUPDIR}/${NOWDATE} ] || mkdir -p ${BACKUPDIR}/${NOWDATE}
[ ! -d ${BACKUPDIR}/${OLDDATE} ] || rm -fr ${BACKUPDIR}/${OLDDATE}
 
#创建PIPE管道
[ -p /tmp/exp.pipe ] || mknod /tmp/exp.pipe p
# if [ ! -p /tmp/exp.pipe ];then
  # mknod /tmp/exp.pipe
# fi
 
#exp备份
USERNAME=backup
PASSWORD=backup
 
# echo ${BACKUPDIR}/${NOWDATE}/${HOSTNAME}-${ORACLE_SID}-fullbackup_${NOWTIME}.dmp
bzip2 -9 < /tmp/exp.pipe > ${BACKUPDIR}/${NOWDATE}/${HOSTNAME}-${ORACLE_SID}-fullbackup_${NOWTIME}.dmp.bz2 &
exp ${USERNAME}/${PASSWORD} file=/tmp/exp.pipe log=${BACKUPDIR}/${NOWDATE}/${HOSTNAME}-${ORACLE_SID}-fullbackup_${NOWTIME}.log full=y direct=y consistent=y buffer=102400
 
#上传备份至FTP
HOST=1.1.1.1
FTP_USERNAME=backup
FTP_PASSWORD=backup
 
cd ${BACKUPDIR}
 
ftp -i -n -v <<EOF
open ${HOST}
user ${FTP_USERNAME} ${FTP_PASSWORD}
bin
mkdir oradmp
cd oradmp
mkdir ${HOSTNAME}
cd ${HOSTNAME}
mkdir ${NOWDATE}
cd ${NOWDATE}
lcd ${NOWDATE}
mput *
cd ..
cd ${FTPOLDDATE}
mdelete .
cd ..
rmdir ${FTPOLDDATE}
bye
EOF
 
#清除临时文件
rm -fr /tmp/exp.pipe

查看更多关于【PowerShell】的文章

展开全文
相关推荐
反对 0
举报 0
评论 0
图文资讯
热门推荐
优选好物
更多热点专题
更多推荐文章
PowerShell 数组的多种录入方法
这篇文章主要介绍了PowerShell 数组的多种录入方法,需要的朋友可以参考下

0评论2015-11-08103

PowerShell String对象方法小结
这篇文章主要介绍了PowerShell String对象方法,需要的朋友可以参考下

0评论2015-11-08128

PowerShell批量修改AD用户密码属性的代码
这篇文章主要介绍了PowerShell批量修改AD用户密码属性的代码,需要的朋友可以参考下

0评论2015-11-0883

PowerShell中match命令使用详解
本文给大家介绍的是PowerShell中match命令的使用方法和具体的示例,非常的简单实用,有需要的小伙伴可以参考下

0评论2015-11-08159

Powershell实现编写和运行脚本
本文为那些对学习 Windows PowerShell 命令行和脚本编写环境感兴趣的系统管理员提供了资源。也请告诉我们本网站如何才能对您更有用处。

0评论2015-11-08349

浅谈CMD和win powershell的区别
本文给大家简单描述了一下POWERSHELL和CMD的区别,简单的说,Powershell是cmd的超集,换句话说,cmd能做的事情,Powershell都能做,但是Powershell还能额外做许多cmd不能做的活。

0评论2015-11-0874

使用PowerShell修改注册表
本文通过具体的实例给大家具体讲解了使用PowerShell操作注册表的方法,非常的简单实用,有需要的小伙伴可以参考下。

0评论2015-11-08165

PowerShell使用小技巧分享
本文给大家汇总了几个平时经常能够用到的PowerShell使用小技巧,包括修改Host文件、方法调用、查看powershell版本,有需要的小伙伴可以参考下。

0评论2015-11-08136

PowerShell时间记录脚本
这篇文章主要介绍了PowerShell时间记录脚本的相关资料,非常简单实用,需要的朋友可以参考下

0评论2015-11-0897

PowerShell中的加法运算详解
这篇文章主要介绍了PowerShell中的加法运算详解的相关资料,需要的朋友可以参考下

0评论2015-11-0895

PowerShell管理Win Server 2008 R2
在Windows Serve 2008 R2中,一个重要改进就是PowerShell版本升级为2.0。Win 2008 R2包括一系列新的服务器管理界面,这些均建立在PowerShell 2.0之上。它新增了240个cmdlets命令集,新的PowerShell图形用户界面也增添了开发功能,从而用户能更简单创建自己的命令行。

0评论2015-11-08105

揭秘PowerShell 5.0新特性和新功能
win10已经正式发售了很多天了,那么他其中搭配的PowerShell 5.0又有什么新的变化呢,今天我们就来探询一下。

0评论2015-11-0857

PowerShell 4.0实现自动化设置服务器
PowerShell 4.0最大的变化是引入了新的Windows PowerShell期望状态配置,该机制通过集中管理执行类似功能的电脑,来控制电脑的配置方式。

0评论2015-11-0874

Powershell错误处理之what-if
这篇文章主要介绍了Powershell错误处理之what-if的相关资料,需要的朋友可以参考下

0评论2015-11-0874

更多推荐