编写一个程序,用于实现文件的备份

编写一个程序,用于实现文件的备份,第1张

注意本脚本是应用于archive log模式下的,另外数据库的用户名密码,自己在脚本里改一下,脚本是带参数的,参数是备份的目标目录,注意要有写权限。#!/bin/sh

mypath=$1

if [ -z $mypath ] then

echo 'Please Use This Command Like ./backup /u01/backup'

else

if [ -d $mypath ] then

ORACLE_SID=dzzdexport ORACLE_SID

ORAENV_ASK=NOexport ORAENV_ASK

rm -Rf aa.txt

sqlplus -s "system/oracle9i"<<EOF

set head off

set feedback off

spool aa.txt

select tablespace_name from dba_tablespaces

spool off

EXIT

EOF

for spacename in `cat aa.txt`

do

echo $spacename |grep "^TEMP"

if [ "$?" -eq "0" ]

then

echo TEMP no need backup else

else

echo begin backup $spacename

sqlplus -s system/oracle9i<<SETSTA

alter tablespace $spacename begin backup

EXIT

SETSTA

rm -Rf bb.txt

sqlplus -s system/oracle9i<<DATAFILE1

set head off

set feedback off

spool bb.txt

SELECT 'cp '||file_name||' $mypath'||SUBSTR(FILE_NAME,INSTR(FILE_NAME,'/',-1,1))

FROM dba_data_files where tablespace_name=trim('$spacename')

spool off

EXIT

DATAFILE1

sh bb.txt

sqlplus -s system/oracle9i<<SETSTA

alter tablespace $spacename end backup

EXIT

SETSTA

echo end backup $spacename

fi

done

else

echo "Please Input a Right Direction"

fi

fi

mhere 回复于:2003-11-07 15:07:05

好!

能不能有一个纯文本的附件?

txfy 回复于:2003-11-07 15:18:13

不能上传文本文件,把内容沾出来放到backup文件中,chmod 755 backup, 就可以运行了 ./backup /u01

steal 回复于:2003-11-07 15:27:42

请教一下:

我用

sql>set head off

sql>set feedback off

sql>spool a.txt

sql>SELECT 'cp '||file_name||' $mypath'||SUBSTR(FILE_NAME,INSTR(FILE_NAME,'/',-1,1)) FROM dba_data_files where tablespace_name=trim('$spacename')

sql>spol off

但是在a.txt中还是有

SELECT ...........

spool off

等内容

不能直接sh 运行啊?

txfy 回复于:2003-11-07 15:32:33

要整个执行前面的

sqlplus -s "system/oracle9i"<<EOF 会保证不出问题的!你整个执行一次看看!

txfy 回复于:2003-11-10 09:47:04

版本更新:增加了如果不是archivelog模式自动退出,命令使用格式提示,错误命令格式自动退出,以及错误提示等方面,只需将这个脚本放到一个文件例如backup中,并chmod 755 backup,然后用./backup <dir>就可以了(dir为你要备份到的目录)。

#!/bin/sh

ORACLE_SID=dzzdexport ORACLE_SID

ORAENV_ASK=NOexport ORAENV_ASK

rm -Rf arch.txt

sqlplus -s "/ as sysdba" <<ARCH

set head off

set feedback off

spool arch.txt

select log_mode from v$database

spool off

EXIT

ARCH

for archstat in `cat arch.txt`

do

echo $archstat |grep "^ARCHIVELOG"

if [ "$?" -eq "0" ] then

mypath=$1

if [ -z $mypath ] then

echo 'ERROR: Please Use This Command Like ./backup /u01/backup'

else

rm -Rf direc.txt

sqlplus -s "/ as sysdba" <<dire

set head off

set feedback off

spool direc.txt

select '$mypath' from dual where trim('$mypath') like '%/'

spool off

exit

dire

if [ -s direc.txt ] then

echo 'ERROR:Please Do Not Add / At The End Of The Direcotry!'

exit

fi

if [ -d $mypath ] then

rm -Rf aa.txt

sqlplus -s "/ as sysdba"<<EOF

set head off

set feedback off

spool aa.txt

select tablespace_name from dba_tablespaces

spool off

EXIT

EOF

for spacename in `cat aa.txt`

do

echo $spacename |grep "^TEMP"

if [ "$?" -eq "0" ]

then

echo TEMP no need backup else

else

echo "---------------------------------------------------------------------------------------------"

echo Begin Backup $spacename

sqlplus -s "/ as sysdba"<<SETSTA

alter tablespace $spacename begin backup

EXIT

SETSTA

rm -Rf bb.txt

sqlplus -s "/ as sysdba"<<DATAFILE1

set head off

spool bb.txt

SELECT 'cp '||file_name||' $mypath'||SUBSTR(FILE_NAME,INSTR(FILE_NAME,'/',-1,1))

FROM dba_data_files where tablespace_name=trim('$spacename')

spool off

EXIT

DATAFILE1

sh bb.txt

sqlplus -s "/ as sysdba"<<SETSTA

alter tablespace $spacename end backup

EXIT

SETSTA

echo NOTES: End Backup $spacename

fi

done

echo "---------------------------------------------------------------------------------------------"

echo "NOTES: Begin Backup ControlFile!"

rm -Rf $mypath/control.dbf

sqlplus -s "/ as sysdba"<<BACKCON

set head off

set feedback off

alter database backup controlfile to '$mypath/control.dbf'

EXIT

BACKCON

echo "NOTES: End Backup ControlFile!"

echo "---------------------------------------------------------------------------------------------"

echo "NOTES: Begin Backup ArchiveLogFile!"

rm -Rf $mypath/arc

mkdir $mypath/arc

rm -Rf arc1.txt

sqlplus -s "/ as sysdba"<<ARC

set head off

set feedback off

spool arc1.txt

alter system switch logfile

SELECT 'cp '||name||' $mypath/arc'||SUBSTR(NAME,INSTR(NAME,'/',-1,1))

FROM v$archived_log where status!='D' and status!='X'

spool off

EXIT

ARC

sh arc1.txt

echo "NOTES: End Backup ArchiveLogFiel!"

else

echo "ERROR: Please Input a Right Direction!"

fi

fi

else

echo "ERROR: Your Database Is Not Run At Archive Mod!"

fi

done

zhoujin0901 回复于:2003-11-24 10:06:48

sqlplus -s "system/manager"<<EOF

系统提示`<' is not matched

为什么???

RobinWang 回复于:2003-11-24 11:04:51

for spacename in `cat aa.txt`

系统提示错误,能给说一下吗?

知识点:类的友元函数是定义在类外部,但有权访问类的所有私有(private)成员和保护(protected)成员

下面具体实现过程:

总公司

class HeadOffice

{

public:

friend void total(HeadOffice ho)

void setBudget(int bg)

private:

int budget

}

子公司

class Subsidiary

{

public:

friend void total(Subsidiary sb)

void setBudget(int bg)

private:

int budget

}

三 总公司的设置预算额

void HeadOffice::setBudget(int bg)

{

this->budget = bg

}

四 总公司的友元函数total,实现计算总公司的总预算

void total(HeadOffice ho)

{

cout <<"总公司预算额:"<<ho.budget

}

五 子公司的设置预算额

void Subsidiary::setBudget(int bg)

{

this->budget = bg

}

六 子公司的友元函数total实现计算子公司的总预算

void total(Subsidiary sb)

{

cout <<"子公司预算额:" <<sb.budget

}

七 主函数调用

int main()

{

HeadOffice ho

Subsidiary sb

int bg

cin >>bg

ho.setBudget(bg)

cin >>bg

sb.setBudget(bg)

total(ho)

cout <<"\n"

total(sb)

}

运行结果


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/11877151.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-19
下一篇2023-05-19

发表评论

登录后才能评论

评论列表(0条)

    保存