从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失效的问题》对你有帮助,请点赞、收藏,并留下你的观点哦!