oracle数据备份问题,请帮帮忙!

时间:2022-09-14 08:18:59
我想用一台pc对几台oracle服务器用exp进行数据备份,oracle版本有8.0.5、8.1.6的,pc机装oracle8.16管理员工作站,我设完了oracle服务名,用sqlplus都能测试成功,但我不知道用exp怎样分别备份这几个服务器,我以前客户端只设一个服务名,连接一台服务器,直接用exp就好使,现在需要怎样做才能分别备份不同的服务器数据?

我看网上oracle备份软件,那个软件好用,各位大侠给推荐一个!

29 个解决方案

#1


exp username/password@server1 file=...
照着这个格式写一下就好了。
可以看帮助,exp help=y

#2


file=...后面接什么文件?

#3


用exp、imp时,客户端和服务器端的版本必须一致,你这样做肯定是不可以的

#4


关于备份,你可以做一个定时任务来做:
1、在你机器的c盘根目录建立一个文件:a.bat
2、用ue打开a.bat,然后写入如下命令:
exp user1/pass1@servername1  file=c:\a.dmp
exp user2/pass2@servername2  file=c:\b.dmp
这里的语句是你想导出几个数据库文件就写几个语句。
3、在windows下找到 控制面板\任务计划\添加新任务
(我的系统是xp,就用我的做实验,2000类似)
点击 添加新任务,出现任务向导界面,然后点击 下一步,出现选择存在可运行程序的界面,这里会有一个 浏览 的按钮,点击,找到在上面刚刚建立的a.bat文件,选择执行这个任务的周期(我选择的是每天),然后 下一步,出现时间设置的界面,输入这个任务执行的时间(我输入的是10:50),然后下一步,出现让你数据用户名的口令界面,输入你当前操作系统的用户口令,点击下一步,完成。

这样,每天这个时间,系统就会自动去执行你的导出工作,而不用人为的去输入命令。

如果有什么不明白的,接着法帖询问即可。

#5


这些我都知道,我想知道怎样练不同服务器备份,连接参数是什么?

#6


第二条不是已经写了吗?
你连服务器1,你就在bat文件中写:
exp user1/pass1@servername1  file=c:\a.dmp
如果你连服务器2,你就在bat文件中加一条:
exp user2/pass2@servername2  file=c:\b.dmp
不就可以了吗!这又什么难的啊!
关于user,pass,servername,这些就是参数阿,这个只有你知道阿
不知道你所说的 连接参数是什么
晕!

#7


谢谢!还有一个问题,导oracl8i数据库正常,但导oracle8.0.5数据库显示:导出视图与数据库不兼容,导出过程终止,怎么办?

#8


导oracle8.0.5数据库要用8.0.5的exp版本

#9


另外一个办法就是oracle8.0.5数据库服务器上也有exp程序,用那个可以导出

#10


同意楼上

#11


我只把exp80.exe拷过来行吗?

#12


不好意思,不可以的,早就试过了.

#13


不知大家注意到一个问题没有?建立BAT文件自动运行后,如果不及时吧备份后的dmp文件移走,第二天的备份就会覆盖它?有什么方法生成不同备份文件的名字呢?

#14


楼上的说得很清楚了,区分不同服务器就是用户名、密码、服务名。然后保存的时候如果需要生成不同的文件名的话,可以考虑把文件名取为带有备份时间的格式,windows中有专门的时间可以调用

#15


用oracle8.0.5的exp80备份oracle8i的数据不会有问题吧,恢复时用exp能恢复吗?

#16


请问“windows中有专门的时间可以调用”,怎么调用呢?举个例子吧

#17


exp username/password@server1 file=...
照着这个格式写一下就好了。
可以看帮助,exp help=y

#18


我也想问问在BAT文件中如何“有备份时间的格式的文件名”??

#19


因为你的几个数据库版本不一致,所以你应该在作备份的PC上装最低版本的客户端,那样导出的数据就都可以导入了。具体exp的用法可以看帮助,exp help=y

#20


批处理文件里搞搞花样,还真不会了,DOS时代的东东,好遥远了

#21


谁需要ORACLE备份的小工具,我有份挺完美的。
M-mail:Sinoyew@163.com

#22


microd@163.com

#23


db168@263.net

#24



%TIME%
%DATE% 就是系统时间了

dir > "kk%DATE%".txt

就生成了一个以kk开头的,系统当前时间结尾的txt文件.

#25


up

#26


up

#27


C:\>echo %date%
星期三 2005-07-13

#28


oracle_bakup.vbs文件
Option Explicit

'On Error Resume Next

Dim fileName, cmd, iweek, folder
Dim WshShell

Set WshShell = CreateObject("WScript.Shell")


fileName =Date 
folder=fileName
'WScript.Echo "folder = " & floder

' 删除上周当天的备份,目录结尾不能有"\"
'DeleteDirectory(folder)
' 重新创建星期目录
CreateDirectory(folder)

cmd = "exp  log=" & fileName & "\admin.log file=" & fileName & "\admin.dmp parfile=exp.txt"

'MsgBox cmd

WshShell.run cmd

Set WshShell = Nothing


''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' DeleteDirectory
' 目的: 
' 清理指定目录。

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Sub DeleteDirectory(path)

   Dim fso
  
   Set fso = CreateObject("Scripting.FileSystemObject")

   fso.DeleteFolder (path)
  
   Set fso = nothing

End Sub


''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' CreateDirectory
' 目的: 
' 创建指定目录。

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Sub CreateDirectory(path)

   Dim fso
  
   Set fso = CreateObject("Scripting.FileSystemObject")

   fso.CreateFolder (path)

   Set fso = nothing
End Sub

exp.txt文件

userid=admin/user_is_crm@crmdb
tables=khjlda,clwxda,khhfda,clzbdanew
INDEXES=y
rows=y
constraints=y
compress=Y
direct=y

bat文件
Oracle_bakup.vbs

以上是我备份的一个例子.下面是详细解释:

#29


Oracle数据库导出(exp)/导入(imp)补充说明 
 
exp
将数据库内的各对象以二进制方式下载成dmp文件,方便数据迁移。
buffer:下载数据缓冲区,以字节为单位,缺省依赖操作系统
consistent:下载期间所涉及的数据保持read only,缺省为n
direct:使用直通方式        ,缺省为n
feeback:显示处理记录条数,缺省为0,即不显示
file:输出文件,缺省为expdat.dmp
filesize:输出文件大小,缺省为操作系统最大值
indexes:是否下载索引,缺省为n,这是指索引的定义而非数据,exp不下载索引数据
log:log文件,缺省为无,在标准输出显示
owner:指明下载的用户名
query:选择记录的一个子集
rows:是否下载表记录
tables:输出的表名列表
导出整个实例
exp dbuser/oracle file=oradb.dmp log=oradb.log full=y consistent=y direct=y
user应具有dba权限
导出某个用户所有对象
exp dbuser/oracle file=dbuser.dmp log=dbuser.log owner=dbuser buffer=4096000 feedback=10000
导出一张或几张表
exp dbuser/oracle file=dbuser.dmp log=dbuser.log tables=table1,table2 buffer=4096000 feedback=10000
导出某张表的部分数据
exp dbuser/oracle file=dbuser.dmp log=dbuser.log tables=table1 buffer=4096000 feedback=10000 query=\”where col1=\’…\’ and col2 \<…\”
不可用于嵌套表
以多个固定大小文件方式导出某张表
exp dbuser/oracle file=1.dmp,2.dmp,3.dmp,… filesize=1000m tables=emp buffer=4096000 feedback=10000
这种做法通常用在:表数据量较大,单个dump文件可能会超出文件系统的限制
直通路径方式
direct=y,取代buffer选项,query选项不可用
有利于提高下载速度
consistent选项
自export启动后,consistent=y冻结来自其它会话的对export操作的数据对象的更新,这样可以保证dump结果的一致性。但这个过程不能太长,以免回滚段和联机日志消耗完
imp
将exp下载的dmp文件上载到数据库内。
buffer:上载数据缓冲区,以字节为单位,缺省依赖操作系统
commit:上载数据缓冲区中的记录上载后是否执行提交
feeback:显示处理记录条数,缺省为0,即不显示
file:输入文件,缺省为expdat.dmp
filesize:输入文件大小,缺省为操作系统最大值
fromuser:指明来源用户方
ignore:是否忽略对象创建错误,缺省为n,在上载前对象已被建立往往是一个正常现象,所以此选项建议设为y
indexes:是否上载索引,缺省为n,这是指索引的定义而非数据,如果上载时索引已建立,此选项即使为n也无效,imp自动更新索引数据
log:log文件,缺省为无,在标准输出显示
rows:是否上载表记录
tables:输入的表名列表
touser:指明目的用户方
导入整个实例
imp dbuser/oracle file=oradb.dmp log=oradb.log full=y buffer=4096000 commit=y ignore=y feedback=10000
导入某个用户所有对象
imp dbuser/oracle file=dbuser.dmp log=dbuser.log fromuser=dbuser touser=dbuser2 buffer=2048000 commit=y ignore=y feedback=10000
导入一张或几张表
imp dbuser2/oracle file=user.dmp log=user.log tables=table1,table2 fromuser=dbuser touser=dbuser2 buffer=2048000 commit=y ignore=y feedback=10000
以多个固定大小文件方式导入某张表
imp dbuser/oracle file=\(1.dmp,2.dmp,3.dmp,…\) filesize=1000m tables=emp fromuser=dbuser touser=dbuser2 buffer=4096000 commit=y ignore=y feedback=10000

#1


exp username/password@server1 file=...
照着这个格式写一下就好了。
可以看帮助,exp help=y

#2


file=...后面接什么文件?

#3


用exp、imp时,客户端和服务器端的版本必须一致,你这样做肯定是不可以的

#4


关于备份,你可以做一个定时任务来做:
1、在你机器的c盘根目录建立一个文件:a.bat
2、用ue打开a.bat,然后写入如下命令:
exp user1/pass1@servername1  file=c:\a.dmp
exp user2/pass2@servername2  file=c:\b.dmp
这里的语句是你想导出几个数据库文件就写几个语句。
3、在windows下找到 控制面板\任务计划\添加新任务
(我的系统是xp,就用我的做实验,2000类似)
点击 添加新任务,出现任务向导界面,然后点击 下一步,出现选择存在可运行程序的界面,这里会有一个 浏览 的按钮,点击,找到在上面刚刚建立的a.bat文件,选择执行这个任务的周期(我选择的是每天),然后 下一步,出现时间设置的界面,输入这个任务执行的时间(我输入的是10:50),然后下一步,出现让你数据用户名的口令界面,输入你当前操作系统的用户口令,点击下一步,完成。

这样,每天这个时间,系统就会自动去执行你的导出工作,而不用人为的去输入命令。

如果有什么不明白的,接着法帖询问即可。

#5


这些我都知道,我想知道怎样练不同服务器备份,连接参数是什么?

#6


第二条不是已经写了吗?
你连服务器1,你就在bat文件中写:
exp user1/pass1@servername1  file=c:\a.dmp
如果你连服务器2,你就在bat文件中加一条:
exp user2/pass2@servername2  file=c:\b.dmp
不就可以了吗!这又什么难的啊!
关于user,pass,servername,这些就是参数阿,这个只有你知道阿
不知道你所说的 连接参数是什么
晕!

#7


谢谢!还有一个问题,导oracl8i数据库正常,但导oracle8.0.5数据库显示:导出视图与数据库不兼容,导出过程终止,怎么办?

#8


导oracle8.0.5数据库要用8.0.5的exp版本

#9


另外一个办法就是oracle8.0.5数据库服务器上也有exp程序,用那个可以导出

#10


同意楼上

#11


我只把exp80.exe拷过来行吗?

#12


不好意思,不可以的,早就试过了.

#13


不知大家注意到一个问题没有?建立BAT文件自动运行后,如果不及时吧备份后的dmp文件移走,第二天的备份就会覆盖它?有什么方法生成不同备份文件的名字呢?

#14


楼上的说得很清楚了,区分不同服务器就是用户名、密码、服务名。然后保存的时候如果需要生成不同的文件名的话,可以考虑把文件名取为带有备份时间的格式,windows中有专门的时间可以调用

#15


用oracle8.0.5的exp80备份oracle8i的数据不会有问题吧,恢复时用exp能恢复吗?

#16


请问“windows中有专门的时间可以调用”,怎么调用呢?举个例子吧

#17


exp username/password@server1 file=...
照着这个格式写一下就好了。
可以看帮助,exp help=y

#18


我也想问问在BAT文件中如何“有备份时间的格式的文件名”??

#19


因为你的几个数据库版本不一致,所以你应该在作备份的PC上装最低版本的客户端,那样导出的数据就都可以导入了。具体exp的用法可以看帮助,exp help=y

#20


批处理文件里搞搞花样,还真不会了,DOS时代的东东,好遥远了

#21


谁需要ORACLE备份的小工具,我有份挺完美的。
M-mail:Sinoyew@163.com

#22


microd@163.com

#23


db168@263.net

#24



%TIME%
%DATE% 就是系统时间了

dir > "kk%DATE%".txt

就生成了一个以kk开头的,系统当前时间结尾的txt文件.

#25


up

#26


up

#27


C:\>echo %date%
星期三 2005-07-13

#28


oracle_bakup.vbs文件
Option Explicit

'On Error Resume Next

Dim fileName, cmd, iweek, folder
Dim WshShell

Set WshShell = CreateObject("WScript.Shell")


fileName =Date 
folder=fileName
'WScript.Echo "folder = " & floder

' 删除上周当天的备份,目录结尾不能有"\"
'DeleteDirectory(folder)
' 重新创建星期目录
CreateDirectory(folder)

cmd = "exp  log=" & fileName & "\admin.log file=" & fileName & "\admin.dmp parfile=exp.txt"

'MsgBox cmd

WshShell.run cmd

Set WshShell = Nothing


''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' DeleteDirectory
' 目的: 
' 清理指定目录。

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Sub DeleteDirectory(path)

   Dim fso
  
   Set fso = CreateObject("Scripting.FileSystemObject")

   fso.DeleteFolder (path)
  
   Set fso = nothing

End Sub


''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' CreateDirectory
' 目的: 
' 创建指定目录。

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Sub CreateDirectory(path)

   Dim fso
  
   Set fso = CreateObject("Scripting.FileSystemObject")

   fso.CreateFolder (path)

   Set fso = nothing
End Sub

exp.txt文件

userid=admin/user_is_crm@crmdb
tables=khjlda,clwxda,khhfda,clzbdanew
INDEXES=y
rows=y
constraints=y
compress=Y
direct=y

bat文件
Oracle_bakup.vbs

以上是我备份的一个例子.下面是详细解释:

#29


Oracle数据库导出(exp)/导入(imp)补充说明 
 
exp
将数据库内的各对象以二进制方式下载成dmp文件,方便数据迁移。
buffer:下载数据缓冲区,以字节为单位,缺省依赖操作系统
consistent:下载期间所涉及的数据保持read only,缺省为n
direct:使用直通方式        ,缺省为n
feeback:显示处理记录条数,缺省为0,即不显示
file:输出文件,缺省为expdat.dmp
filesize:输出文件大小,缺省为操作系统最大值
indexes:是否下载索引,缺省为n,这是指索引的定义而非数据,exp不下载索引数据
log:log文件,缺省为无,在标准输出显示
owner:指明下载的用户名
query:选择记录的一个子集
rows:是否下载表记录
tables:输出的表名列表
导出整个实例
exp dbuser/oracle file=oradb.dmp log=oradb.log full=y consistent=y direct=y
user应具有dba权限
导出某个用户所有对象
exp dbuser/oracle file=dbuser.dmp log=dbuser.log owner=dbuser buffer=4096000 feedback=10000
导出一张或几张表
exp dbuser/oracle file=dbuser.dmp log=dbuser.log tables=table1,table2 buffer=4096000 feedback=10000
导出某张表的部分数据
exp dbuser/oracle file=dbuser.dmp log=dbuser.log tables=table1 buffer=4096000 feedback=10000 query=\”where col1=\’…\’ and col2 \<…\”
不可用于嵌套表
以多个固定大小文件方式导出某张表
exp dbuser/oracle file=1.dmp,2.dmp,3.dmp,… filesize=1000m tables=emp buffer=4096000 feedback=10000
这种做法通常用在:表数据量较大,单个dump文件可能会超出文件系统的限制
直通路径方式
direct=y,取代buffer选项,query选项不可用
有利于提高下载速度
consistent选项
自export启动后,consistent=y冻结来自其它会话的对export操作的数据对象的更新,这样可以保证dump结果的一致性。但这个过程不能太长,以免回滚段和联机日志消耗完
imp
将exp下载的dmp文件上载到数据库内。
buffer:上载数据缓冲区,以字节为单位,缺省依赖操作系统
commit:上载数据缓冲区中的记录上载后是否执行提交
feeback:显示处理记录条数,缺省为0,即不显示
file:输入文件,缺省为expdat.dmp
filesize:输入文件大小,缺省为操作系统最大值
fromuser:指明来源用户方
ignore:是否忽略对象创建错误,缺省为n,在上载前对象已被建立往往是一个正常现象,所以此选项建议设为y
indexes:是否上载索引,缺省为n,这是指索引的定义而非数据,如果上载时索引已建立,此选项即使为n也无效,imp自动更新索引数据
log:log文件,缺省为无,在标准输出显示
rows:是否上载表记录
tables:输入的表名列表
touser:指明目的用户方
导入整个实例
imp dbuser/oracle file=oradb.dmp log=oradb.log full=y buffer=4096000 commit=y ignore=y feedback=10000
导入某个用户所有对象
imp dbuser/oracle file=dbuser.dmp log=dbuser.log fromuser=dbuser touser=dbuser2 buffer=2048000 commit=y ignore=y feedback=10000
导入一张或几张表
imp dbuser2/oracle file=user.dmp log=user.log tables=table1,table2 fromuser=dbuser touser=dbuser2 buffer=2048000 commit=y ignore=y feedback=10000
以多个固定大小文件方式导入某张表
imp dbuser/oracle file=\(1.dmp,2.dmp,3.dmp,…\) filesize=1000m tables=emp fromuser=dbuser touser=dbuser2 buffer=4096000 commit=y ignore=y feedback=10000