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。
浙公网安备 33010602011771号