当前访客身份:游客 [ 登录 | 加入 OSCHINA ]

代码分享

当前位置:
代码分享 » Shell/批处理  » 配置/脚本/批处理
分享到: 
收藏 +0
2
Oracle如果使用传统的exp,默认不能导出空表;
这里的脚本+sql是提供windows手动导出,只要设置一下数据库连接参数就行。
其他参数,可根据实际需求调整。
文件:expfor11g.bat和readyfor11g.sql
标签: Oracle Windows

代码片段(3) [全屏查看所有代码]

1. [文件] expfor11g.bat ~ 581B     下载(25)     跳至 [1] [2] [3] [全屏预览]

SET NLS_LANG=AMERICAN_AMERICA.AL32UTF8

SET USER=test
SET PASSWORD=test
SET DATABASE=ORCL
SET TODAY=%date:~0,4%%date:~5,2%%date:~8,2%
SET SUFFIX=01
SET BACKUP_DIR=.\
SET DMP_FILE=%BACKUP_DIR%%USER%_%TODAY%_%SUFFIX%.dmp
SET LOG_FILE=%BACKUP_DIR%%USER%_%TODAY%_%SUFFIX%.exp.log
SET EXP_CMD=exp %user%/%password%@%database% file=%DMP_FILE% log=%LOG_FILE% owner=%USER%


ECHO ALER EMPTY TABLES
SQLPLUS %USER%/%PASSWORD%@%DATABASE% @readyfor11g.sql
SQLPLUS %USER%/%PASSWORD%@%DATABASE% @executefor11g.sql > execute_result.log
ECHO %EXP_CMD%
PAUSE
CALL %EXP_CMD%
PAUSE

2. [文件] readyfor11g.sql ~ 323B     下载(24)     跳至 [1] [2] [3] [全屏预览]

SET TERMOUT OFF;
SET PAGESIZE 0;
SET TRIMSPOOL ON;
SET HEADSEP OFF;
SET ECHO OFF;
SET FEEDBACK OFF;
SET DEFINE OFF;
SET SQLPROMPT ''
SPOOL EXECUTEFOR11G.SQL;
PROMPT -- BEGIN
SELECT 'ALTER TABLE '||TABLE_NAME||' ALLOCATE EXTENT;' FROM USER_TABLES WHERE NUM_ROWS=0
/
PROMPT -- END
PROMPT EXIT;
SPOOL OFF;
EXIT;

3. [文件] exp11g_zip.bat ~ 2KB     下载(3)     跳至 [1] [2] [3] [全屏预览]

cd %~dp0
@ECHO OFF
ECHO [INFO] INIT PARAMS
SET NLS_LANG=AMERICAN_AMERICA.AL32UTF8
SET USER=%~1
SET PASSWORD=%~2
SET DATABASE=%~3
SET TODAY=%date:~0,4%-%date:~5,2%-%date:~8,2%
SET SUFFIX=0
SET BACKUP_DIR=.\
SET ZIP_HOME=%ProgramFiles%\7-Zip
SET PATH=%ZIP_HOME%;%PATH%
ECHO [INFO] NLS_LANG : %NLS_LANG%
ECHO [INFO] USER : %USER%
ECHO [INFO] PASSWORD : %PASSWORD%
ECHO [INFO] DATABASE : %DATABASE%
ECHO [INFO] TODAY : %TODAY%
ECHO [INFO] SUFFIX : (%SUFFIX%+1)
ECHO [INFO] BACKUP_DIR : %BACKUP_DIR%
ECHO [INFO] ZIP_HOME : %ZIP_HOME%
ECHO [INFO] PATH : %PATH%

IF "%DATABASE%"=="" (
ECHO [ERROR] PARAMS EMPTY
ECHO [ERROR] USE SHELL AS 'exp11g_zip username password sid'
GOTO :END
)

IF NOT EXIST "%ZIP_HOME%\7z.exe" (
ECHO [ERROR] 7ZIP HOME NOT EXIST
ECHO [ERROR] CHECK FILE PATH '%ZIP_HOME%\7z.exe'
GOTO :END
) 

:LOOP_COUNT
SET /A SUFFIX+=1
ECHO %SUFFIX%
SET TARGET_FILE=%BACKUP_DIR%%USER%_%TODAY%_0%SUFFIX%
SET DMP_FILE=%TARGET_FILE%.dmp
IF %SUFFIX%==20 (GOTO :TOMORE) ELSE (GOTO :CHECK_EXIST)

:CHECK_EXIST
IF NOT EXIST %DMP_FILE% (GOTO :NOFILE) ELSE (GOTO :LOOP_COUNT)

:NOFILE
SET LOG_FILE=%TARGET_FILE%.exp.log
SET EXP_CMD=exp %user%/%password%@%database% file=%DMP_FILE% log=%LOG_FILE% owner=%USER%

ECHO [INFO] ALER EMPTY TABLES
ECHO %EXP_CMD%
SQLPLUS %USER%/%PASSWORD%@%DATABASE% @readyfor11g.sql
SQLPLUS %USER%/%PASSWORD%@%DATABASE% @executefor11g.sql > execute_result.log
ECHO [INFO] EXPORT DATABASE :
ECHO [INFO] %EXP_CMD%
REM CALL %EXP_CMD% >NUL 2>&1
CALL %EXP_CMD% >NUL 2>&1

SET ZIP_CMD=7z a -mx9 -t7z %TARGET_FILE%.7z %TARGET_FILE%.dmp %TARGET_FILE%.exp.log
ECHO [INFO] ZIP DMP AND LOG File
ECHO [INFO] %ZIP_CMD%
CALL %ZIP_CMD%

GOTO :END

:TOMORE
ECHO THERE IS TO MORE BACKUP FILE(20)
GOTO :END

:END
PAUSE


开源中国-程序员在线工具:Git代码托管 API文档大全(120+) JS在线编辑演示 二维码 更多»

发表评论 回到顶部 网友评论(2)

  • 1楼:StormFour 发表于 2014-11-13 17:56 回复此评论
    expdp就可以导出空表的问题了。不用这么麻烦
  • 2楼:静风流云 发表于 2014-11-16 11:41 回复此评论

    引用来自“StormFour”的评论

    expdp就可以导出空表的问题了。不用这么麻烦
    是的,也有用exdp。 原来跟着一个做数据迁移的前辈,见过类似的功能,脚本实现控制,sql生成sql,再执行的。 原来的,更复杂,可惜当时没太留意备份,现在做个简单的。呵呵!
开源从代码分享开始 分享代码
静风流云的其它代码 全部(14)...