怎么创建Oracle Text用户
这篇文章主要讲解了“怎么创建Oracle Text用户”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么创建Oracle Text用户”吧!
1.创建Oracle Text用户
在创建Oracle Text索引和使用Oracle Text PL / SQL包之前,需要创建一个具有CTXAPP角色的用户。 该角色可以执行以下操作:
创建和删除Oracle Text索引首选项
使用Oracle Text PL / SQL软件包
--1.创建用户ctxdevCREATEUSERctxdevIDENTIFIEDBYoracledefaulttablespacetbs_ctxdev;--2.授予角色给用户ctxdevGRANTRESOURCE,CONNECT,CTXAPPTOctxdev;--3.授予CTXPL/SQL程序包的执行权限GRANTEXECUTEONCTXSYS.CTX_CLSTOctxdev;GRANTEXECUTEONCTXSYS.CTX_DDLTOctxdev;GRANTEXECUTEONCTXSYS.CTX_DOCTOctxdev;GRANTEXECUTEONCTXSYS.CTX_OUTPUTTOctxdev;GRANTEXECUTEONCTXSYS.CTX_QUERYTOctxdev;GRANTEXECUTEONCTXSYS.CTX_REPORTTOctxdev;GRANTEXECUTEONCTXSYS.CTX_THESTOctxdev;GRANTEXECUTEONCTXSYS.CTX_ULEXERTOctxdev;--这些权限已经被授予给CTXAPP角色。但是由于角色权限在PL/SQL过程中并不总是起作用,因此最安全的方式是将这些权限显式授予已经具有CTXAPP角色的用户。SQL>selectrole,privilege,table_namefromrole_tab_privswhererole='CTXAPP'orderby2,3;ROLEPRIVILEGETABLE_NAME--------------------------------------------------------------------------------CTXAPPDELETEDR$DICTIONARYCTXAPPEXECUTECTX_ANLCTXAPPEXECUTECTX_DDLCTXAPPEXECUTECTX_ENTITYCTXAPPEXECUTECTX_OUTPUTCTXAPPEXECUTECTX_THESCTXAPPEXECUTECTX_TREECTXAPPEXECUTECTX_ULEXERCTXAPPEXECUTEDRIENTLCTXAPPEXECUTEDRITHSLCTXAPPINSERTDR$DICTIONARYCTXAPPINSERTDR$THSCTXAPPINSERTDR$THS_BTCTXAPPINSERTDR$THS_FPHRASECTXAPPINSERTDR$THS_PHRASECTXAPPSELECTDR$DICTIONARYCTXAPPUPDATEDR$DICTIONARYCTXAPPUPDATEDR$THS_PHRASE
如果数据库没有安装Oracle Text,则授予CTXAPP会报如下错误:
ORA-01919:role'CTXAPP'doesnotexist
此时我们需要给数据库安装Oracle Text,测试环境是12c多租户,可以在PDB(注意要先在CDB中安装,不然下次重启数据库时,检测到CDB中没有Oracle Text,PDB会进入受限模式)中直接安装Oracle Text组件:
--方法1:执行catctx.sql脚本SQL>altersessionsetcontainer=orcl;SQL>selectCOMP_ID,COMP_NAME,VERSION,STATUS,SCHEMAfromuser_registrywherecomp_id='CONTEXT';norowsselected--1.安装OracleTextSQL>@?/ctx/admin/catctx.sqloracleSYSAUXTEMPNOLOCK--执行脚本+参数[ctxsys用户密码、用户默认永久sysaux、临时表空间temp、创建后用户是否锁定nolock|lock]SQL>colcomp_namefora20;SQL>setlinesize200;SQL>colschemafora20;SQL>colstatusfora20;SQL>colversionfora20;SQL>colcomp_idfora20;SQL>selectCOMP_ID,COMP_NAME,VERSION,STATUS,SCHEMAfromuser_registrywherecomp_id='CONTEXT';COMP_IDCOMP_NAMEVERSIONSTATUSSCHEMA----------------------------------------------------------------------------------------------------CONTEXTOracleText12.2.0.1.0VALIDCTXSYS--2.安装默认语言首选项SQL>@?/ctx/admin/defaults/dr0defin.sql"AMERICAN";--方法2:DBCAsilentinstall的方式--注意:在12.1.0.2或12.2.0.1中不支持通过DBCA将数据库组件(如OracleText)添加到单个PDB。此功能将在18.1中添加。--语法:--非多组户环境:dbca-silent-configureDatabase-sourceDB<dbuniquenameforRACorSIDforSingleInstancedb>-sysDBAUserName<usernamewithSYSDBAprivileges>-sysDBAPassword<passwordforsysDBAUserNameusername>]-addDBOptionORACLE_TEXT--多租户环境:dbca-silent-configurePluggableDatabase-sourceDB<container_name>-pdbName<pluggable_name>-sysDBAUserNameSYS-sysDBAPassword<password>-addDBOptionORACLE_TEXT--1.安装OracleTextdbca-silent-configureDatabase-SourceDBlycdb-sysDBAUsernamesys-sysDBAPasswordoracle-addDBOptionORACLE_TEXT--2.安装默认语言首选项如果语言不是英语,则安装适当的特定于语言的默认首选项。$ORACLE_HOME/ctx/admin/defaults目录中包含为OracleText支持的每种语言创建特定于语言的默认首选项的脚本,例如英语(US),丹麦语(DK),荷兰语(NL),芬兰语(SF),法语(F),德语(D),意大利语(IT),葡萄牙语(PT),西班牙语(E)和瑞典语(S)。它们以drdefXX.sql的形式命名,其中XX是国际凭证代码。如果不知道国际凭证代码,也可以调用dr0defdp.sql(删除默认首选项)和dr0defin.sql(根据语言名称,安装首选项)一般英文用:AMERICAN,中文用SIMPLIFIEDCHINESE例如,要手动安装德语默认首选项,请以CTXSYS身份登录sqlplus并运行以下语句:SQL>connect/sysdbaSQL>spooldefprefs_install.logSQL>alteruserctxsysidentifiedbyctxsysaccountunlock;SQL>connectctxsys/ctxsysSQL>@?/ctx/admin/defaults/dr0defdp.sqlSQL>@?/ctx/admin/defaults/dr0defin.sql"SIMPLIFIEDCHINESE";SQL>connectSYS/passwordasSYSDBASQL>alteruserctxsysaccountlockpasswordexpire;SQL>spooloff
2.查询应用程序简单体验
在基本的文本查询应用程序中,用户输入查询词或短语,并期望该应用程序返回与查询最匹配的文档列表。 这样的应用程序涉及创建一个CONTEXT索引并使用CONTAINS对其进行查询。
通常,查询应用程序需要用户界面。 CONTEXT查询应用程序中提供了一个如何使用CONTEXT索引类型构建这样的查询应用程序的示例。
下面示例提供了基本的SQL语句,用于加载文本表,为文档建立索引以及查询索引。
--1.创建存放文本数据的表,并插入数据SQL>connctxdev/oracle@orclCREATETABLEdocs(idNUMBERPRIMARYKEY,textVARCHAR2(200));INSERTINTOdocsVALUES(1,'<HTML>CaliforniaisastateintheUS.</HTML>');INSERTINTOdocsVALUES(2,'<HTML>ParisisacityinFrance.</HTML>');INSERTINTOdocsVALUES(3,'<HTML>FranceisinEurope.</HTML>');commit;--2.创建Context索引--通过在文本列上创建一个CONTEXT索引来为HTML文件建立索引,如下所示。因为要为HTML编制索引,所以本示例使用NULL_FILTER首选项类型(不进行过滤)和HTML_SECTION_GROUP类型。如果为PDF,MicrosoftWord或其他格式的文档建立索引,请使用CTXSYS.AUTO_FILTER(默认设置)作为FILTER首选项。CREATEINDEXidx_docsONdocs(text)INDEXTYPEISCTXSYS.CONTEXTPARAMETERS('FILTERCTXSYS.NULL_FILTERSECTIONGROUPCTXSYS.HTML_SECTION_GROUP');--3.查询表数据--查找包含单词France的所有文档:COLUMNtextFORMATa40;SQL>SELECTSCORE(1),id,textFROMdocsWHERECONTAINS(text,'France',1)>0;SCORE(1)IDTEXT----------------------------------------------------------------------------------------------------42<HTML>ParisisacityinFrance.</HTML>43<HTML>FranceisinEurope.</HTML>--4.展示文档--在实际的应用程序中,可以显示所选文档并突出显示查询词。OracleText使您可以使用CTX_DOC软件包标记文档。可以在SQL*Plus中使用匿名PL/SQL块演示HTML文档标记。但是,在实际应用程序中,可以在浏览器中显示文档。此PL/SQL示例使用内存中的CTX_DOC.MARKUP版本突出显示文档3中的单词France。它分配了一个临时CLOB(字符大对象数据类型)来存储标记文本,并将其读回到标准输出。然后在退出之前将CLOB释放:SETSERVEROUTPUTON;DECLAREmklobCLOB;amtNUMBER:=40;lineVARCHAR2(80);BEGINCTX_DOC.MARKUP('idx_docs','3','France',mklob);DBMS_LOB.READ(mklob,amt,1,line);DBMS_OUTPUT.PUT_LINE(line);DBMS_LOB.FREETEMPORARY(mklob);END;/<HTML><<<France>>>isinEurope.</HTML>PL/SQLproceduresuccessfullycompleted.--5.数据处理后同步索引--创建CONTEXT索引时,需要显式同步索引,以使用对文本表的任何插入,更新或删除来更新索引。可以使用CTX_DDL.SYNC_INDEX过程来执行此操作。--插入新数据INSERTINTOdocsVALUES(4,'<HTML>LosAngelesisacityinCalifornia.</HTML>');INSERTINTOdocsVALUES(5,'<HTML>MexicoCityisbig.</HTML>');commit;--提交后没能查询到新数据SQL>SELECTSCORE(1),id,textFROMdocsWHERECONTAINS(text,'city',1)>0;SCORE(1)IDTEXT----------------------------------------------------------------------------------------------------42<HTML>ParisisacityinFrance.</HTML>--将索引与2Mb的内存同步,然后重新运行查询:SQL>EXECCTX_DDL.SYNC_INDEX('idx_docs','2M');PL/SQLproceduresuccessfullycompleted.--新数据可以正常查询SQL>SELECTSCORE(1),id,textFROMdocsWHERECONTAINS(text,'city',1)>0;SCORE(1)IDTEXT----------------------------------------------------------------------------------------------------42<HTML>ParisisacityinFrance.</HTML>44<HTML>LosAngelesisacityinCalifornia.</HTML>45<HTML>MexicoCityisbig.</HTML>
3.目录应用程序简单体验
示例提供了基本的SQL语句,可为出售电子设备(例如相机和CD播放器)的拍卖网站创建目录索引。 每天都会添加新的库存,并且必须将项目描述,投标日期和价格一起存储。
对于混合查询,该应用程序需要良好的响应时间。 关键是确定用户经常搜索哪些列以创建合适的CTXCAT索引。 对此类索引的查询使用CATSEARCH运算符。
--1.创建一张库存表并插入数据connctxdev/oracle@orclCREATETABLEauction(item_idNUMBER,titleVARCHAR2(100),category_idNUMBER,priceNUMBER,bid_closeDATE);INSERTINTOAUCTIONVALUES(1,'NIKONCAMERA',1,400,'24-OCT-2002');INSERTINTOAUCTIONVALUES(2,'OLYMPUSCAMERA',1,300,'25-OCT-2002');INSERTINTOAUCTIONVALUES(3,'PENTAXCAMERA',1,200,'26-OCT-2002');INSERTINTOAUCTIONVALUES(4,'CANONCAMERA',1,250,'27-OCT-2002');commit;--2.确定可能要检索的条件。在此示例中,确定所有查询都在title列中搜索商品说明,并且大多数查询都按price排序。当使用CATSEARCH运算符时,请为文本列指定术语,并为结构化子句指定条件。--3.创建子索引以按价格排序--创建一个名为auction_set的索引集,并为price列添加一个子索引EXECCTX_DDL.CREATE_INDEX_SET('auction_iset');EXECCTX_DDL.ADD_INDEX('auction_iset','price');--4.创建CTXCAT索引CREATEINDEXauction_titlexONAUCTION(title)INDEXTYPEISCTXSYS.CTXCATPARAMETERS('indexsetauction_iset');--5.查询COLUMNtitleFORMATa40;SELECTtitle,priceFROMauctionWHERECATSEARCH(title,'CAMERA','orderbyprice')>0;TITLEPRICE--------------------------------------------------PENTAXCAMERA200CANONCAMERA250OLYMPUSCAMERA300NIKONCAMERA400SQL>SELECTtitle,priceFROMauctionWHERECATSEARCH(title,'CAMERA','price<=300')>0;TITLEPRICE--------------------------------------------------PENTAXCAMERA200CANONCAMERA250OLYMPUSCAMERA300--6.更新表数据,CTXCAT索引会自动更新INSERTINTOAUCTIONVALUES(5,'FUJICAMERA',1,350,'28-OCT-2002');INSERTINTOAUCTIONVALUES(6,'SONYCAMERA',1,310,'28-OCT-2002');commit;SQL>SELECTtitle,priceFROMauctionWHERECATSEARCH(title,'CAMERA','orderbyprice')>0;TITLEPRICE--------------------------------------------------PENTAXCAMERA200CANONCAMERA250OLYMPUSCAMERA300SONYCAMERA310FUJICAMERA350NIKONCAMERA400
4.分类应用程序简单体验
分类应用程序的功能是根据文档内容执行某些操作。 这些操作可以包括为文档分配类别ID或将文档发送给用户。 结果是对文档进行分类。
--1.创建规则表connctxdev/oracle@orclCREATETABLEqueries(query_idNUMBER,query_stringVARCHAR2(80));INSERTINTOqueriesVALUES(1,'oracle');INSERTINTOqueriesVALUES(2,'larryorellison');INSERTINTOqueriesVALUES(3,'oracleandtext');INSERTINTOqueriesVALUES(4,'marketshare');commit;--2.创建CTXRULE索引CREATEINDEXqueryxONqueries(query_string)INDEXTYPEISCTXSYS.CTXRULE;--3.在SELECT语句的WHERE子句中使用MATCHES运算符可将文档与查询匹配,然后对文档进行分类COLUMNquery_stringFORMATa35;SELECTquery_id,query_stringFROMqueriesWHEREMATCHES(query_string,'Oracleannouncedthatitsmarketshareindatabasesincreasedoverthelastyear.')>0;QUERY_IDQUERY_STRING---------------------------------------------4marketshare1oracle
感谢各位的阅读,以上就是“怎么创建Oracle Text用户”的内容了,经过本文的学习后,相信大家对怎么创建Oracle Text用户这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。