失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 64位环境AUTO_FILTER和INSO_FILTER失效的问题

64位环境AUTO_FILTER和INSO_FILTER失效的问题

时间:2021-12-04 15:28:09

相关推荐

64位环境AUTO_FILTER和INSO_FILTER失效的问题

从10g开始,Oracle推出了AUTO_FILTER来替代INSO_FILTER,不过根据Oracle的描述,AUTO_FILTER更像是在INSO_FILTER上增加了一些自动的判断而已。因此,可以认为二者是相同的问题。

和EYGLE聊天时他提到,碰到了一个奇怪的现象,11g的Linux平台64位Oracle环境创建全文索引后,索引为空。同样的问题在32位环境中没有问题。

看一个简单的例子:

SQL> SELECT * FROM V$VERSION;

BANNER

--------------------------------------------------------------------------------

Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production

PL/SQL Release 11.1.0.6.0 - Production

CORE 11.1.0.6.0 Production

TNS for Linux: Version 11.1.0.6.0 - Production

NLSRTL Version 11.1.0.6.0 - Production

SQL> HOST more /home/oracle/a.txt

You remove the substitute key columns for a table by specifying NULL for the

column_list or column_table parameter in the SET_KEY_COLUMNS procedure in

the DBMS_APPLY_ADM package. If the table has a primary key, then the table's primary

key is used by any apply process for local changes to the database after you remove

the substitue primary key.

SQL> CREATE TABLE T_FILTER (ID NUMBER PRIMARY KEY, DOC VARCHAR2(30));

Table created.

SQL> INSERT INTO T_FILTER VALUES (1, 'a.txt');

1 row created.

SQL> COMMIT;

Commit complete.

SQL> BEGIN

2 CTX_DDL.CREATE_PREFERENCE('TEST_FILE', 'FILE_DATASTORE');

3 CTX_DDL.SET_ATTRIBUTE('TEST_FILE', 'PATH', '/home/oracle');

4 END;

5 /

PL/SQL procedure successfully completed.

SQL> CREATE INDEX IND_T_FILTER_DOC ON T_FILTER (DOC) INDEXTYPE IS CTXSYS.CONTEXT

2 PARAMETERS('DATASTORE TEST_FILE FILTER CTXSYS.AUTO_FILTER');

Index created.

SQL> SELECT COUNT(*) FROM DR$IND_T_FILTER_DOC$I;

COUNT(*)

----------

24

SQL> SELECT TOKEN_TEXT

2 FROM DR$IND_T_FILTER_DOC$I;

TOKEN_TEXT

----------------------------------------------------------------

ADM

AFTER

APPLY

CHANGES

COLUMN

COLUMNS

DATABASE

DBMS

KEY

LIST

LOCAL

NULL

PACKAGE

PARAMETER

PRIMARY

PROCEDURE

PROCESS

REMOVE

SET

SPECIFYING

SUBSTITUE

SUBSTITUTE

TABLE

USED

24 rows selected.

可以看到,32位Linux上没有问题,而在64位Linux上则出现下面的问题:

SQL> SELECT * FROM V$VERSION;

BANNER

--------------------------------------------------------------------------------

Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit Production

PL/SQL Release 11.1.0.6.0 - Production

CORE 11.1.0.6.0 Production

TNS for Linux: Version 11.1.0.6.0 - Production

NLSRTL Version 11.1.0.6.0 - Production

SQL> HOST more /opt/oracle/a.txt

You remove the substitute key columns for a table by specifying NULL for the

column_list or column_table parameter in the SET_KEY_COLUMNS procedure in

the DBMS_APPLY_ADM package. If the table has a primary key, then the table's primary

key is used by any apply process for local changes to the database after you remove

the substitute primary key.

SQL> CREATE TABLE T_FILTER (ID NUMBER PRIMARY KEY, DOC VARCHAR2(30));

Table created.

SQL> INSERT INTO T_FILTER VALUES (1, 'a.txt');

1 row created.

SQL> COMMIT;

Commit complete.

SQL> BEGIN

2 CTX_DDL.CREATE_PREFERENCE('TEST_FILE', 'FILE_DATASTORE');

3 CTX_DDL.SET_ATTRIBUTE('TEST_FILE', 'PATH', '/opt/oracle');

4 END;

5 /

PL/SQL procedure successfully completed.

SQL> CREATE INDEX IND_T_FILTER_DOC ON T_FILTER (DOC) INDEXTYPE IS CTXSYS.CONTEXT

2 PARAMETERS('DATASTORE TEST_FILE FILTER CTXSYS.AUTO_FILTER');

Index created.

SQL> SELECT COUNT(*) FROM DR$IND_T_FILTER_DOC$I;

COUNT(*)

----------

0

查询了一下metalik,感觉和文档Bug No. 7421367描述很接近,对于64位的环境,Oracle安装的时候漏掉了一些用来过滤文档的driver,导致INSO_FILTER和AUTO_FILTER无效。

在Solaris上的64位Oracle11g,则没有发现这个问题。

来自 “ ITPUB博客 ” ,链接:/4227/viewspace-606828/,如需转载,请注明出处,否则将追究法律责任。

如果觉得《64位环境AUTO_FILTER和INSO_FILTER失效的问题》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。