• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
langQ
博客园    首页    新随笔    联系   管理    订阅  订阅
dmp文件的做成

1.建一个临时表
 ・表结构和导出表一样
 ・要导出的数据,可以用满足一定条件的sql文选出来,存到临时表里。
  然后用dmp命令从临时表导出dmp文件。

 临时表的建表语句:
 create table tab_name_DMP
 tablespace DATA_USER_XXX
 as select * from tab_name where xxx检索条件;

 ※1.表空间一定要指定。不指定会使用默认表空间。默认表空间容量小的场合,如果往临时表导入大量的数据,表空间容量一旦不够会发生error。
(本番环境发生error,要各种解释会很麻烦。切记:要给临时表指定表空间)

 ※2.DB所在schema的表空间容量使用情况,可以用如下sql文进行查询:

SELECT 
    U.TABLESPACE_NAME,
    T.TOTAL_SPACE_MB,
    ROUND(SUM(U.BYTES) / 1024 / 1024, 2) AS USED_SPACE_MB,
    ROUND(T.TOTAL_SPACE_MB - SUM(U.BYTES) / 1024 / 1024, 2) AS FREE_SPACE_MB,
    ROUND((SUM(U.BYTES) / 1024 / 1024) / T.TOTAL_SPACE_MB * 100, 2) AS USED_PERCENTAGE
FROM 
    DBA_SEGMENTS U
JOIN 
    (SELECT 
        TABLESPACE_NAME, 
        ROUND(SUM(BYTES) / 1024 / 1024, 2) AS TOTAL_SPACE_MB 
     FROM 
        DBA_DATA_FILES 
     GROUP BY 
        TABLESPACE_NAME) T 
ON 
    U.TABLESPACE_NAME = T.TABLESPACE_NAME
WHERE 
    U.OWNER = 'YOUR_SCHEMA_NAME'
GROUP BY 
    U.TABLESPACE_NAME, 
    T.TOTAL_SPACE_MB
ORDER BY 
    U.TABLESPACE_NAME;


2.dmp文件导出

expdp username/password@schema directory=DATA_DUMP_DIR dumpfile=TBL_name_EXP.dmp logfile=TBL_name_EXP.log

3.dmp文件导入
把前面做出的dmp文件包含的数据,导入到目标表。

impdp username/password@schema directory=DATA_DUMP_DIR dumpfile=TBL_name_EXP.dmp tables=変更元のスキーマ名.テーブル名 table_exists_action=truncate content=data_only logfile=TBL_name_IMP.log remap_schema=変更元のスキーマ名:変更先のスキーマ名 remap_tablespace=変更元の表領域名:変更先の表領域名

语法:
impdp Oracleユーザ名/パスワード
directory=ディレクトリオブジェクト名
(dumpfile=ディレクトリオブジェクト名:絶対パス)
(logfile= ディレクトリオブジェクト名:絶対パス)
tables=テーブル名
table_exists_action=[skip | append | truncate | replace]

补充:
如果导出数据量不那么大?比如没有超过100万条数据,也就40万或50万左右,
而且表的项目也不特别多,可以不用dmp文件。
可以在sqldeveloper从临时表导出insert文件。

注意:
1.insert文件size不能过大,如果数据超过2G(2024M),编辑器无法打开。
文件size太大,可以对文件按照行数分割。
windows下可以用powershell执行如下的一行命令:

$i=0; cat .\test.csv -ReadCount 100000 | % {$_ >test$i.txt;$i++}

命令的完整写法:
$i = 0
Get-Content .\test.csv -ReadCount 100000 | ForEach-Object {
    $_ | Out-File "test$i.txt"
    $i++
}

现在综合测试导出的insert文件,按照10万行数据进行的文件分割。
分割后文件大小在1.5G左右。此时,虽然打开很缓慢,但是用sakura可以打开了。

2.insert文件保存成sql文件了,可以用bat调用起来。
但是bat调用的时候,每行命令有长度限制。4400多byte还能执行,一旦超过这个上限就不执行了。
此时,只能手动copy命令到sqldeveloper的执行窗口执行命令。
手动拷贝的数据量也有限制。现在作业的insert文,一个文件虽然有10万条数据,但是每次只能copy一万条。
再多数据就无法copy,会把developer干成down掉的状态。

copy数据失败或者无响应的场合,可以关掉旧的执行窗口,新开一个执行窗口。
或者彻底关掉sqldeveloper,然后重新启动sqldeveloper。

posted on 2024-09-20 06:01  嚯嚯go  阅读(63)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3