kon*_*dkg 5 oracle export blob
我有一张大表,里面有 BLOB 对象,还有一些从其他表到这个表的引用。我通过从生产中制作 expdp(数据泵),然后在开发/测试主机上匿名数据来为我的应用程序准备开发和测试模式。问题是这个带有 BLOB 的表太大了,将转储文件从生产复制到测试/开发,然后导入它需要很长时间......
是否有任何解决方案可以在表中没有某些列的情况下导出 SCHEMA(可能是一些过滤器,用空的 BLOB 或 NULL 替换所有的 BLOB)?
我还考虑制作一个“仅 BLOB 模式”并将其链接到生产模式,而根本不导出它,但这可能会导致性能问题。
Mat*_*Mat 11
您可以在 Oracle 11gR2 中使用expdp和REMAP_DATA选项执行此操作。
null(或者可能是一个空 blob)。expdp像往常一样调用,添加:
REMAP_DATA=SCHEMA.TAB.BLOB_COLUM:SCHEMA.PACKAGE.YOUR_FUNCTION
Run Code Online (Sandbox Code Playgroud)简短示例(架构:)mat:
REMAP_DATA=SCHEMA.TAB.BLOB_COLUM:SCHEMA.PACKAGE.YOUR_FUNCTION
Run Code Online (Sandbox Code Playgroud)
普通出口:
$ expdp mat/*** DIRECTORY=EXP_DIR TABLES=MAT.FOO
...
Total estimation using BLOCKS method: 11.06 MB
...
. . exported "MAT"."FOO" 10.00 MB 1 rows
...
Run Code Online (Sandbox Code Playgroud)
转储文件约为 11M。
使用数据重新映射:
$ expdp mat/*** DIRECTORY=EXP_DIR TABLES=MAT.FOO \
REMAP_DATA=MAT.FOO.B:MAT.remap.null_lob
...
Total estimation using BLOCKS method: 11.06 MB
...
. . exported "MAT"."FOO" 5.398 KB 1 rows
...
Run Code Online (Sandbox Code Playgroud)
转储文件是 ~100k,导入该转储确实会在列中导入一个空值。
另一种选择是使用外部表来执行加载/卸载和ORACLE_DATAPUMP驱动程序(我认为这是在 10g 中引入的,请参阅外部表概念)。
对于卸载,请使用以下内容:
create or replace
package remap as
function null_lob(col blob) return blob;
end remap;
/
create or replace
package body remap as
function null_lob(col blob)
return blob is
eblob blob;
begin
return null;
end null_lob;
end remap;
/
create table foo(a number, b blob);
-- insert a line with a 10M blob, commit
select a, length(b) from foo;
A LENGTH(B)
---------- ----------
1 10485760
Run Code Online (Sandbox Code Playgroud)
(您可以在创建外部表后立即删除它,这不会 - 默认情况下 - 删除转储文件。)
然后将foo.dmp文件移动到目标服务器和目录,并在那里创建外部表:
$ expdp mat/*** DIRECTORY=EXP_DIR TABLES=MAT.FOO
...
Total estimation using BLOCKS method: 11.06 MB
...
. . exported "MAT"."FOO" 10.00 MB 1 rows
...
Run Code Online (Sandbox Code Playgroud)
最后加载您的目标表(truncate ...; insert /*+ append */ ...例如CTAS 或):
$ expdp mat/*** DIRECTORY=EXP_DIR TABLES=MAT.FOO \
REMAP_DATA=MAT.FOO.B:MAT.remap.null_lob
...
Total estimation using BLOCKS method: 11.06 MB
...
. . exported "MAT"."FOO" 5.398 KB 1 rows
...
Run Code Online (Sandbox Code Playgroud)
完成后删除外部加载器表。
| 归档时间: |
|
| 查看次数: |
14798 次 |
| 最近记录: |