不怎么接触数据库,尤其是Oracle,所以在此留个脚印吧。
此文章主要介绍exp/imp命令,需要关掉数据库操作后进行,同时当备份恢复的时候最好清空数据,不然有主键检查,速度会很慢。(备注:当然也可以试一下expdp/impdp备份恢复,这个可以在恢复的时候选择覆盖恢复,追加恢复等,文章末尾有简单介绍)
1、数据库备份(保存以下内容为expdb.bat)
@echo off ----在批处理运行命令的时候不会一条一条的显示执行的命令,与之相匹配的还有@echo on
set sid=192.168.1.123/ORCL -----数据库
set username=WPLAT1217 -----用户名
set password=WPLAT1217 -----密码
set connect=%username%/%password%@%sid% ----连接字符串拼接
set back_path=d:\databak2dmp -------备份文件需要保存的文件夹,需要提前创建好
set date_string=%date:~0,4%_%date:~5,2%_%date:~8,2%
set time_string=%time:~0,2%_%time:~3,2%_%time:~6,2%
set file_string=%back_path%\test_%date_string%_%time_string% ----备份文件路径+文件名
set log_string=%back_path%\exp_%date_string%_%time_string%-----备份日志路径+文件名
exp %connect% file=%file_string%.dmp INDEXES=y grants=y constraints=y log=%log_string%.log ----开始备份数据库
扩展:导出表1
exp %connect% file=%file_string%.dmp tables=表1 INDEXES=y grants=y constraints=y log=%log_string%.log ----开始备份数据库
exp %connect% file=%file_string%.dmp INDEXES=y grants=y constraints=y log=%log_string%.log owner=(system,sys) ----将数据库中system用户与sys用户的表导出(未测试)
exp %connect% file=%file_string%.dmp INDEXES=y grants=y constraints=y log=%log_string%.log owner=(system) rows=n --rows=n不导数据只导表结构(未测试)
exp %connect% file=%file_string%.dmp tables=(table1) query=\” where filed1like '00%'\” ---将数据库中的表table1中的字段filed1以”00″打头的数据导出(未测试)
2、数据库恢复(保存以下内容为impdb.bat)
@echo off ----在批处理运行命令的时候不会一条一条的显示执行的命令,与之相匹配的还有@echo on
set sid=192.168.1.123/ORCL -----数据库
set username=WPLAT1217 -----用户名
set password=WPLAT1217 -----密码
set connect=%username%/%password%@%sid% ----连接字符串拼接
set back_path=d:\databak2dmp\backup.dmp -------需要恢复的备份文件
set back_path_dir=d:\databak2dmp -----日志存放的文件夹路径
set date_string=%date:~0,4%_%date:~5,2%_%date:~8,2%
set time_string=%time:~0,2%_%time:~3,2%_%time:~6,2%
set log_string=%back_path_dir%\imp_%date_string%_%time_string%-----备份日志路径+文件名
imp %connect% file=%back_path% ignore=y log=%log_string%.log ----开始恢复数据库
扩展:恢复表1
imp %connect% file=%back_path% tables=表1 ignore=y log=%log_string%.log ----开始恢复数据库
3、传参到bat文件(此处以备份为例)---看红色方框内的
程序传参调用bat:
Process pro=new Process();
ProcessStartInfo pi=new ProcessStartInfo ("bat文件","参数");---参数:以逗号分开的字符串
pi.UseShellExecute=false;
pro.StartInfo=pi;
pro.Start();
pro.WaitForExit();
注意点:测试的时候发现,当时间在0—9的时候,批处理文件出异常:
set time_string=%time:~0,2%_%time:~3,2%_%time:~6,2%报错!!!
修正为:
set "hour_ten=%time:~0,1%"
set "hour_one=%time:~1,1%"
set "minute=%time:~3,2%"
set "second=%time:~6,2%"
if "%hour_ten%" == " " (
set time_string=0%hour_one%_%tminute%_%second%
) else (
set time_string=%time:~0,2%_%time:~3,2%_%time:~6,2%
)
拓展:IMPDP/EXPDP
步骤1:select * from dba_directories;在结果中选择一个路径,之后会用。
备份命令:EXPDP username/password@ip/orcl SCHEMAS=username dumpfile=backup.dmp directory=exp_dir(exp_dir是步骤1选择的文件夹名)
恢复命令:IMPDP username/password@ip/orcl dumpfile=backup.dmp directory=exp_dir tables=tb1 table_exists_action=replace(恢复表tb1,且数据存在则直接覆盖)