暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 将压缩的安全文件lob转换为基本文件

askTom 2017-10-17
388

问题描述

你好,汤姆,
我们正在迁移一个对lob使用高级压缩的数据库。
我们没有新环境的许可证来复制现状。

我们有哪些可用选项,以及如何将压缩的securefile lob转换为不压缩或basicfile的securefile?

你能指引我们进来吗?

谢谢。

专家解答

您可以为此使用DBMS_REDEFINITION,例如

SQL> create table t ( pk int primary key, c clob )
  2  lob ( c  ) store as securefile ( compress  high ) ;

Table created.

SQL>
SQL> insert into t
  2  select rownum, rpad('x',1000,'x')
  3  from dual connect by level <= 1000;

1000 rows created.

SQL>
SQL> commit;

Commit complete.

SQL>
SQL> select * from user_lobs where table_name = 'T'
  2  @pr
==============================
TABLE_NAME                    : T
COLUMN_NAME                   : C
SEGMENT_NAME                  : SYS_LOB0000156682C00002$$
TABLESPACE_NAME               : USERS
INDEX_NAME                    : SYS_IL0000156682C00002$$
CHUNK                         : 8192
PCTVERSION                    :
RETENTION                     :
FREEPOOLS                     :
CACHE                         : NO
LOGGING                       : YES
ENCRYPT                       : NO
COMPRESSION                   : HIGH
DEDUPLICATION                 : NO
IN_ROW                        : YES
FORMAT                        : ENDIAN NEUTRAL
PARTITIONED                   : NO
SECUREFILE                    : YES
SEGMENT_CREATED               : YES
RETENTION_TYPE                : DEFAULT
RETENTION_VALUE               :

PL/SQL procedure successfully completed.


SQL>
SQL> create table t1 ( pk int, c clob )
  2  lob ( c  ) store as basicfile;

Table created.

SQL>
SQL>
SQL> exec   dbms_redefinition.start_redef_table(user, 't', 't1');

PL/SQL procedure successfully completed.

SQL>
SQL> set serverout on
SQL> declare
  2     error_count pls_integer := 0;
  3  begin
  4     dbms_redefinition.copy_table_dependents(user, 't', 't1', dbms_redefinition.cons_orig_params, true,true,true,false, error_count);
  5     dbms_output.put_line('errors := ' || to_char(error_count));
  6  end;
  7  /
errors := 0

PL/SQL procedure successfully completed.

SQL>
SQL> exec dbms_redefinition.finish_redef_table(user, 't', 't1');

PL/SQL procedure successfully completed.

SQL> select * from user_lobs where table_name = 'T'
  2  @pr
==============================
TABLE_NAME                    : T
COLUMN_NAME                   : C
SEGMENT_NAME                  : SYS_LOB0000156686C00002$$
TABLESPACE_NAME               : USERS
INDEX_NAME                    : SYS_IL0000156686C00002$$
CHUNK                         : 8192
PCTVERSION                    :
RETENTION                     : 900
FREEPOOLS                     :
CACHE                         : NO
LOGGING                       : YES
ENCRYPT                       : NONE
COMPRESSION                   : NONE
DEDUPLICATION                 : NONE
IN_ROW                        : YES
FORMAT                        : ENDIAN NEUTRAL
PARTITIONED                   : NO
SECUREFILE                    : NO
SEGMENT_CREATED               : YES
RETENTION_TYPE                : YES
RETENTION_VALUE               :

PL/SQL procedure successfully completed.


SQL>
复制


「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论