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

Oracle LOB存储转换为安全文件

askTom 2018-09-28
432

问题描述

我有一个旧的应用程序,刚刚迁移到Oracle 12.2。应用程序有一个大的间隔分区表,其中分区列是日期。此表包含LOB列,有些使用BASICFILE存储,其他列使用SECUREFILE存储。我在网上看到一个帖子,似乎表明有一种方法可以修改表,以便当前使用BASICFILE的现有分区的LOB列将在创建新的间隔分区时开始使用SECUREFILE的LOB。这对于该表是理想的,因为随着时间的推移,较旧的分区将被删除,最终该表将具有所有SECUREFILE lob,而无需迁移和移动所有数据。如果这可能,你能建议吗?如果是这样,对于父级被范围分区的引用分区表也可以这样做。

专家解答

您可以在创建分区时提名它

SQL> create table t ( x int, y clob )
  2  partition by range (x)
  3  ( partition p1 values less than (10) lob ( y ) store as basicfile,
  4    partition p2 values less than (20) lob ( y ) store as basicfile
  5  );

Table created.

SQL>
SQL> insert into t values ( 5,'clob');

1 row created.

SQL> insert into t values ( 15,'clob');

1 row created.

SQL> commit;

Commit complete.

SQL>
SQL> ALTER TABLE t add partition p3 values less than ( 30 ) lob ( y ) store as securefile;

Table altered.

SQL> insert into t values ( 25,'clob');

1 row created.

SQL> commit;

Commit complete.

SQL>
SQL> select partition_name, securefile
  2  from user_lob_partitions
  3  where table_name = 'T';

PARTITION_NAME                 SEC
------------------------------ ---
P1                             NO
P2                             NO
P3                             YES
复制


对于一个间隔,只需更改 “db_securefile” 就足够了,例如

SQL> create table t ( x int, y clob )
  2  lob ( y ) store as basicfile
  3  partition by range (x)
  4  interval ( 10 )
  5  ( partition p1 values less than (10) lob ( y ) store as basicfile
  6  );

Table created.

SQL>
SQL> insert into t values ( 5,'clob');

1 row created.

SQL> insert into t values ( 15,'clob');

1 row created.

SQL> commit;

Commit complete.

SQL>
SQL> select partition_name, securefile
  2  from user_lob_partitions
  3  where table_name = 'T';

PARTITION_NAME                 SEC
------------------------------ ---
P1                             NO
SYS_P3703                      NO

SQL>
SQL> alter session set db_securefile = preferred;

Session altered.

SQL> insert into t values ( 25,'clob');

1 row created.

SQL> commit;

Commit complete.

SQL>
SQL> select partition_name, securefile
  2  from user_lob_partitions
  3  where table_name = 'T';

PARTITION_NAME                 SEC
------------------------------ ---
P1                             NO
SYS_P3703                      NO
SYS_P3706                      YES
复制


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

评论