Oracle11g在备份数据库的时候经常会出现空表无法正常备份的问题,针对这种问题有一下集中方法进行处理:
方法一
1、 使用PL/SQL的tools—》Export Tables…导出dmp文件。导出的是存在数据的表。
2、 使用PL/SQL的tools—》Export User Objects…导出全部,导出的是数据库所有表、视图、方法的建表SQL语句。这样就可以保证数据库的完整性。
3、 导入数据的执行顺序是先执行导出的SQL文件,然后再执行dmp文件的导入。
方法二
先通过sql语句更改空表的状态,然后再执行导出,可以保证数据库的完整性,具体步骤如下:
1、 执行以下查询语句,把查询结果保存为sql文件然后执行:
select 'alter table '||table_name||' allocate extent;' from user_tables;
命令行执行保存的sql脚本:
2、 修改bat文件然后执行
rem select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0;导出之前执行,确保导出所有表,包含空表 rem DELETE T_ADMIN_XTFWRZ; rem DELETE T_XTGL_XTRZ_FWDYB; rem DELETE T_XTGL_XTRZ_DLJLB; rem DELETE T_XTGL_XTRZ_YWCZB; rem DELETE T_XTGL_XTRZ_CDFWB; @echo off set FROM_SERVER=192.168.3.XX:1521/orcl set F_PATH=E:\Data\U_NOTESHARE\U_NOTESHARE rem 备份文件命名,取时间戳来作为文件名 set F_FILE=%date:~0,4%%date:~5,2%%date:~8,2% rem %time:~0,2%%time:~3,2%%time:~6,2% set FILE_DIR=%F_PATH%%F_FILE% echo 创建目录 md %FILE_DIR% set ACCOUNT=U_NOTESHARE set ACCOUNT_PASSWORD=U_NOTESHARE echo 备份数据%ACCOUNT% echo 从服务器%FROM_SERVER%中导出用户%ACCOUNT%的数据 echo %ACCOUNT%/%ACCOUNT_PASSWORD%@%FROM_SERVER% file='%FILE_DIR%\%ACCOUNT%.dmp' owner=%ACCOUNT% log='%FILE_DIR%\exp%ACCOUNT%.log' exp %ACCOUNT%/%ACCOUNT_PASSWORD%@%FROM_SERVER% file='%FILE_DIR%\%ACCOUNT%.dmp' owner=%ACCOUNT% log='%FILE_DIR%\exp%ACCOUNT%.log' echo ############################################################# rem set path=C:\Program Files\WinRAR rem echo 压缩数据文件并打包 rem rar a -r %F_PATH%%F_FILE%.rar %FILE_DIR% rem echo 删除数据文件 rem rd /S /Q %FILE_DIR% rem forfiles /p %F_PATH% /s /m *.* /d -7 /c " cmd /c del @path" echo 任务结束 pause
方法三
使用数据泵导出数据库,可以直接导出全部数据库,具体步骤如下:
1、创建directory dmpdir1病把权限赋给用户,具体指令如下:
Ø 登录Oracle:sqlplus / as sysdba;
Ø 创建directory:create or replace directory dmpdir1 as 'e:';
Ø 把权限赋给对应的用户U_POWER:grant read,write on directory dmpdir1 to U_SJZX_ZYK_YC;
Ø 退出:exit;
2、导入DMP文件,指令如下(注意:DMP文件名的大小写要区分):
impdp U_POWER/U_POWER transform=segment_attributes:n directory=dmpdir1 remap_schema=U_POWER:U_POWER dumpfile=U_POWER.DMP;
数据泵从高版本导出数据,然后导入低版本数据库中
expdp userid='U_ZWXXPT/U_ZWXXPT@ORCL' directory=dmpdir1 dumpfile=U_ZWXXPT.dmp version=11.1.0.6.0
在系统开发环境搭建的时候经常需要对数据库中所有的表的Orgid进行修改,有时系统中存在的功能不正常,需要单独执行SQL语句进行修改。
1、查询用户下面所有包含ORGID的表,把结果保存为SQL脚本,然后执行:
select 'update '|| table_name ||' SET ORGID=' || '''1408' ||''';' from all_tab_columns where OWNER='U_YCOA' AND COLuMN_NAME='ORGID';
2、命令行窗口执行保存的脚本:
以下文章为同事整理,此处打个标签,方便后续查阅
请您注意
·自觉遵守:爱国、守法、自律、真实、文明的原则
·尊重网上道德,遵守《全国人大常委会关于维护互联网安全的决定》及中华人民共和国其他各项有关法律法规
·严禁发表危害国家安全,破坏民族团结、国家宗教政策和社会稳定,含侮辱、诽谤、教唆、淫秽等内容的作品
·承担一切因您的行为而直接或间接导致的民事或刑事法律责任
·您在NoteShare上发表的作品,NoteShare有权在网站内保留、转载、引用或者删除
·参与本评论即表明您已经阅读并接受上述条款