R-Tree Index becomes invalid

Hi,
I've a index that becomes invalid almost every day. I get the error message
ORA-29902: error in executing ODCIIndexStart() routine
ORA-13203: failed to read USER_SDO_GEOM_METADATA view
ORA-13203: failed to read USER_SDO_GEOM_METADATA view
ORA-29400: data cartridge error
ORA-01013: user requested cancel of current operation
ORA-06512: at "MDSYS.SDO_INDEX_METHOD_10I", line 286
after rebuilding the index everything works fine again.
Does anybody know a solution on that problem?
Peter

Is there a nightly process that is causing things to change? I think we need more info to be able to help you.
Is it possible that this index is in a different tablespace and backups aren't shutting them down/bringing them back up in the right order?
Any manner of things could cause this, beyond the Oracle bug for spatial indexes in 10G, with large number of records. Ours handle this fine night after night, so something must be causing your data to change or affecting the index.
What happens every night, or at the end of the day that could be affecting it?

Similar Messages

  • Index becomes invalid

    Hi,
    11g on linux.
    I have a batch job run from the application end to refresh the table data. The data may be loaded through sql-loader/DML.
    After running of the batch job, some of the indexes becomes unusable state.
    I dont suspect the index becomes invalid due to duplicate records in primary key. Since I'm able to rebuild the index manually.
    I like to investigate from database end what the batch job does and make the indexes unsuable.
    I'm planning to 10046 trace session trace.
    Could you please share your comments, how to take this forward to find the Root Cause of what is actually happening on the objects and makes index unusable.
    Thanks
    KSG
    Edited by: KSG on May 30, 2013 8:03 PM

    KSG wrote:
    Hi,
    11g on linux.
    I have a batch job run from the application end to refresh the table data. The data may be loaded through sql-loader/DML.
    After running of the batch job, some of the indexes becomes unusable state.
    I dont suspect the index becomes invalid due to duplicate records in primary key. Since I'm able to rebuild the index manually.
    I like to investigate from database end what the batch job does and make the indexes unsuable.
    I'm planning to 10046 trace session trace.
    Could you please share your comments, how to take this forward to find what is actually happening on the objects and makes index unusable.
    Thanks
    KSGhttp://www.lmgtfy.com/?q=oracle+index+unusable
    Handle:     KSG
    Status Level:     Explorer (130)
    Registered:     Dec 23, 2008
    Total Posts:     766
    Total Questions:     212 (146 unresolved)
    I extend to you my condolences; since you rarely get your questions answered here.

  • When do indexes become invalid?

    When do indexes become invalide?

    Indexes can become invalid or unusable whenever a DBA tasks shifts the ROWID values, thereby requiring an index rebuild. These DBA tasks that shift table ROWID's include:
    Table partition maintenance - Alter commands (move, split or truncate partition) will shift ROWID's, making the index invalid and unusable.
    CTAS maintenance - Table reorganization with "alter table move" or an online table reorganization (using the dbms_redefinition package) will shift ROWIDs, creating unusable indexes.
    Oracle imports - An Oracle import (imp utility) with the skip_unusable_indexes=y parameter
    SQL*Loader (sqlldr utility) - Using direct path loads (e.g. skip_index_maintenance) will cause invalid and unusable indexes.
    Cheers

  • When a Index become invalid?

    How can I force my index to become invalid?
    Thanks.
    Paulo.

    Hi, thanks for your answer. But it is not yet clear for me.
    Whats the difference between the status INVALID and UNUSABLE?
    Can you help me?
    Edited by: paulo on Mar 14, 2012 9:40 PM

  • TT0885: Invalid T-tree index

    After running for several days, our TimesTen 6.0.4 returns errors: TT0885: Invalid T-tree index
    What is wrong? How can we fix this?
    The error was first encountered when monitoring a table size:
    /opt/TimesTen/myapp/bin/ttSize -tbl mydb.users -connstr "dsn=myDB;uid=***;pwd=***"
    Rows = 1787180
    Table in-line row bytes = 178192657
    Indexes:
    Can't get info on index FIRST_INDX.MYDB: TT0885: Invalid T-tree index -- file "index.c", lineno 8243, procedure "sb_ixInfo ()"
    Can't get info on index SECOND_INDX.MYDB: TT0885: Invalid T-tree index -- file "index.c", lineno 8243, procedure "sb_ixInfo ()"
    T-tree index MYDB.UID_INDX adds 36313369 bytes
    Can't get info on index USER_INDX.MYDB: TT0885: Invalid T-tree index -- file "index.c", lineno 8243, procedure "sb_ixInfo ()"
    Total index bytes = 36313369
    Total = 214506026

    Hi,
    As I suspected. Using ttSize in this manner is not that useful since it does not measure./report on a tables actual space utilisation but rather it computes an 'estimated' utilisation based on the schema, indexes and rowcount. The calculations it use have to make certain assumptions about various things so the values returned may in some cases differ significantly from 'reality'. There is currently no exact way to determine the actual memory occupied by a specific table or index. However, there are accurate figures available about overall memory utiliation in the datastore. The SYS.MONITOR table includes fields such as PERM_ALLOCATED_SIZE, PERM_IN_USE_SIZE and PERM_IN_USE_HIGH_WATER plus equivalent fields for the TEMP region. Also, there is a useful built in procedure called ttBlockInfo.
    I would strongly recommend that any routine space monitoring scheme be based on these rather than ttSize...
    Chris

  • Variable becomes invalid during loop (CS6 based)

    First off I know that CC fixed this, but unfortunately my hands are tied and I have to use CS6 for this process. The script below is built to allow user to select precomp layers within a master comp. It then strips each precomp down to just itself and then the project is reduced to just the master comp and associated assets. It's actually inspired by Jeff Almasol's script he made for me years ago. I've just customized my own variation due to an issue in CS6 with the Reduce Project function. The issue arrising is that the loop goes off and processes the first selected precomp properly, but the master comp variable becomes invalid upon the second precomp processed. The script involves saving the project file and reopening the main source project during the loop process. Any thoughts as to why the variable is becoming invalid? The lines marked BOLD and ITALIC are the trouble spots.
         function compToProjectsScript(thisObj){
              try{
                   var masterComp, curItem, selLayerIndices, selLayerIndicesLength, curLayer, curLayerName, saveFolder, newFileInfo, curLayerIndex, folderString, allItems;
                   ///FUNCTIONS
                   //retrieveSelectedLayersIndex
                   function retrieveSelectedLayersIndex(compObj){
                        var selLayers, selLayersLength, layerIndex;
                        layerIndex = new Array();
                        selLayers = compObj.selectedLayers;
                        selLayersLength = selLayers.length;
                        for(var l=0; l<selLayersLength; l++){
                             if(selLayers[l].source instanceof CompItem){
                                  layerIndex.push(selLayers[l].index);
                        return layerIndex;
                   //reduceCompToLayer
                   function reduceCompToLayer(layerObj, compObj){
                        var layerCount = compObj.numLayers;
                        var lastLayer = compObj.layer(layerCount);
                        layerObj.moveBefore(lastLayer);
                        for(var i=1; i<=layerCount-2; i++){
                             firstLayerLocked = compObj.layer(1).locked;
                             if(firstLayerLocked == true){
                                  firstLayerLocked = false;
                                  compObj.layer(1).remove();
                             }else{
                                  compObj.layer(1).remove();
                   //retrieveParentCompIndexNum
                   function retrieveParentCompIndexNum(){
                        var proj, openedComp, parentComp, itemcount;
                        proj = app.project;
                        openedComp = proj.activeItem;
                        itemcount = proj.numItems;
                        if(openedComp instanceof CompItem){
                             parentComp = {'name': openedComp.name, 'id': openedComp.id};
                             for(var i=1; i<=itemcount; i++){
                                  if(proj.item(i).name == parentComp.name && proj.item(i).id == parentComp.id){
                                       return i;
                  masterComp = app.project.item(retrieveParentCompIndexNum());     //VARIABLE SET
                   selLayerIndices = retrieveSelectedLayersIndex(masterComp);
                   selLayerIndicesLength = selLayerIndices.length;
                   var curProjFile = app.project.file;
                   if(curProjFile != null){
                        saveFolder = Folder.selectDialog("Choose a \"save to\" folder.");
                        if(saveFolder != null){
                             folderString = Folder.decode(saveFolder).toString();
                             app.project.save(new File(folderString + "/_Duplicate_" + curProjFile.name));
                             var dupFile = app.project.file;
                             app.beginUndoGroup("compToProject");
                                  for(var i=0; i<selLayerIndicesLength; i++){
                                            app.beginSuppressDialogs();
                                                 curLayerIndex = selLayerIndices[i];
                                                 curLayer = masterComp.layer(curLayerIndex);     //BECOMES INVALID ON SECOND PASS
                                                 curLayerName = curLayer.name;
                                                 reduceCompToLayer(curLayer, masterComp);
                                                 app.project.reduceProject(masterComp);
                                                 newFileInfo = folderString + "/" + curLayerName + ".aep";
                                                 app.project.save(new File(newFileInfo));
                                            app.endSuppressDialogs(true);
                                       app.open(curProjFile);
                             app.endUndoGroup();
                             writeLn("All done.");
                   }else{
                        alert("Save project first, then try again.");
              }catch(err){alert("Error at line #" + err.line.toString() + "\r" + err.toString());}
         compToProjectsScript(this);

    Here's that final setup I went with:
    //START
         function compToProjectsScript(thisObj){
              try{
                   var masterComp, curItem, selLayerIndices, selLayerIndicesLength, curLayer, curLayerName, saveFolder, newFileInfo, curLayerIndex, folderString, allItems;
                   ///FUNCTIONS
                   //retrieveSelectedLayersIndex
                   function retrieveSelectedLayersIndex(compObj){
                        var selLayers, selLayersLength, layerIndex;
                        layerIndex = new Array();
                        selLayers = compObj.selectedLayers;
                        selLayersLength = selLayers.length;
                        for(var l=0; l<selLayersLength; l++){
                             if(selLayers[l].source instanceof CompItem){
                                  layerIndex.push(selLayers[l].index);
                        return layerIndex;
                   //reduceCompToLayer
                   function reduceCompToLayer(layerObj, compObj){
                        var layerCount = compObj.numLayers;
                        var lastLayer = compObj.layer(layerCount);
                        layerObj.moveBefore(lastLayer);
                        for(var i=1; i<=layerCount-2; i++){
                             firstLayerLocked = compObj.layer(1).locked;
                             if(firstLayerLocked == true){
                                  compObj.layer(1).locked = false;
                                  compObj.layer(1).remove();
                             }else{
                                  compObj.layer(1).remove();
                   //retrieveParentCompIndexNum
                   function retrieveParentCompIndexNum(){
                        var proj, openedComp, parentComp, itemcount;
                        proj = app.project;
                        openedComp = proj.activeItem;
                        itemcount = proj.numItems;
                        if(openedComp instanceof CompItem){
                             parentComp = {'name': openedComp.name, 'id': openedComp.id};
                             for(var i=1; i<=itemcount; i++){
                                  if(proj.item(i).name == parentComp.name && proj.item(i).id == parentComp.id){
                                       return i;
                   compIndex = retrieveParentCompIndexNum();
                   masterComp = app.project.item(compIndex);
                   selLayerIndices = retrieveSelectedLayersIndex(masterComp);
                   selLayerIndicesLength = selLayerIndices.length;
                   var curProjFile = app.project.file;
                   if(curProjFile != null){
                        saveFolder = Folder.selectDialog("Choose a \"save to\" folder.");
                        if(saveFolder != null){
                             folderString = Folder.decode(saveFolder).toString();
                             app.project.save(new File(folderString + "/_Duplicate_" + curProjFile.name));
                             var dupFile = app.project.file;
                             app.beginUndoGroup("compToProject");
                                  for(var i=0; i<selLayerIndicesLength; i++){
                                            app.beginSuppressDialogs();
                                                 sourceComp = app.project.activeItem;
                                                 curLayerIndex = selLayerIndices[i];
                                                 curLayer = sourceComp.layer(curLayerIndex);
                                                 curLayerName = curLayer.name;
                                                 reduceCompToLayer(curLayer, sourceComp);
                                                 app.project.reduceProject(sourceComp);
                                                 newFileInfo = folderString + "/" + curLayerName + ".aep";
                                                 app.project.save(new File(newFileInfo));
                                            app.endSuppressDialogs(true);
                                       app.open(dupFile);
                             app.endUndoGroup();
                             writeLn("All done.");
                   }else{
                        alert("Save project first, then try again.");
              }catch(err){alert("Error at line #" + err.line.toString() + "\r" + err.toString());}
         compToProjectsScript(this);
    //END

  • R-Tree Index v's Quadtree Index

    Hi,
    In the 8.1.7 spatial documentation it says that R-Tree index may not be a good choice for a geometry table that has heavy update activity.
    Can anyone define and quantify what heavy update is?
    Thanks

    There hasn't been a formal analysis of R-tree update performance. Some things that are known:
    The spatial index create statement includes a percent free specification that allows free space to remain in the R-tree to accomodate future inserts.
    If the data doesn't need to be kept on-line all the time, then the R-tree index can be rebuilt.
    The performance associated with both R-tree index updates and quadtree index updates is dependent on the data being inserted. Updating point data seems to be faster with quadtrees. Updating simple geometries also seems to be faster with quadtrees. There is a point though where tiling complicated geometries dominates the quadtree index update time, and at some point of complexity it becomes faster to update R-tree indexes.
    If anyone has info to add here it would be quite useful.
    Hope this helps,
    dan

  • Object Fields Mysteriously Becoming Invalid

    I am not exactly sure what code to post with this considering the nature of what's going on, so I'll do my best to explain and then perhaps I can provide code based on your responses.
    When my application loads in the AppDelegate I create 3 objects of the "Item" type and then create an array out of those objects and add that array to an ItemListController which has a property for an NSMutableArray. The program then loads a UINavigationController with each of those objects in it being drawn with a subClass of UITableViewCell. As it stands now, if I click on any one of those objects more than 3 times, the object itself does not become nil, but all of the fields within it do.
    - (void)applicationDidFinishLaunching:(UIApplication *)application {
    Item *sword = [[Item alloc] initWithName:@"Sword" description:@"This is a sword"];
    //sword.itemPrice = (int *)524;
    Item *shield = [[Item alloc] initWithName:@"Shield" description:@"This is a shield"];
    //shield.itemPrice = (int *)322;
    Item *subligar = [[Item alloc] initWithName:@"Subligar" description:@"This is a subligar"];
    //subligar.itemPrice = (int *)1034;
    [subligar setImageWithPath:@"Hello.png"];
    if(self.itemListController == nil) {
    ItemListController *controller = [[ItemListController alloc] init];
    self.itemListController = controller;
    [controller release];
    NSMutableArray *itemArray = [[NSMutableArray alloc] initWithObjects:sword, shield, subligar, nil];
    self.itemListController.items = itemArray;
    [itemArray release];
    // Configure and show the window
    [window addSubview:[navigationController view]];
    [window makeKeyAndVisible];
    The click handler of my TableView right now simply calls the AppDelegate's instance of ItemListController and then gets the object back from the items array at the index at which the user clicked. From there, I set a few properties and load a view tailored to that Item.
    Presently, all of the logic that sets properties with the Item and loads the view for that object is commented out and so the only behavior occurring is the Item being retrieved from the AppDelegate's ItemListController.items and then being stored in a temporary object which is later released. But like I said above, *after 3 requests for my object all of its fields become invalid*. I have no idea what is causing it because the object itself is never being released within that time. Below is the code from the click event of the table cell:
    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    calls++;
    NSLog(@"Hit Count: %d", calls);
    iPhoneHelloWorldAppDelegate *appDelegate = (iPhoneHelloWorldAppDelegate *)[[UIApplication sharedApplication] delegate];
    Item *item = (Item *)[appDelegate.itemListController.items objectAtIndex:indexPath.row];
    //lastItem = item;
    if(self.itemView == nil) {
    ItemViewController *viewController = [[ItemViewController alloc] initWithNibName:@"ItemViewController" bundle:[NSBundle mainBundle]];
    self.itemView = viewController;
    [viewController release];
    if(calls > 3) {
    NSLog(@"item retainCount = %d", [item retainCount]);
    [item release];
    Here's a snapshot from the debugger after my Item object dies:
    http://img514.imageshack.us/img514/4567/picture2az5.png

    Hi,
    Item *item = (Item *)[appDelegate.itemListController.items objectAtIndex:indexPath.row];
    //lastItem = item;
    if(self.itemView == nil) {
    ItemViewController *viewController = [[ItemViewController alloc] initWithNibName:@"ItemViewController" bundle:[NSBundle mainBundle]];
    self.itemView = viewController;
    [viewController release];
    if(calls > 3) {
    NSLog(@"item retainCount = %d", [item retainCount]);
    // Why do you relase item? I don't see any retain or method wich increases the retain-count.
    [item release];

  • Bitmap index Vs B-Tree index

    Hi All,
    Could some one please let me know how Bitmap indexes are useful compared to B-Tree indexes on low-cardinality columns ?.
    Thanks,
    -Kumar.

    >>
    As Re: why oracle db 9i optimizer can't choose to use the bitmap index? there are a number of issues with bitmap indexes. Your best bet is to read these three articles by Jonathan Lewis.
    It does pay us to understand how the optimizer works with bitmap indexes. I posted some Re: Cost-based optimizer behavior to show how indexes on even very low valued columns can be useful in certain circumstances.
    Cheers, APC
    Blog : http://radiofreetooting.blogspot.com/

  • When do VI and queue references become invalid?

    Hi all,
    I have a fairly complicated problem, so please bear with me.
    1)  I have a reentrant SubVI (let's call it VI "Assign") that has an input cluster of (VI ref, queue ref) (let's call the cluster type "Refs").  If the VI ref is invalid (first execution), the VI ref and queue ref are assigned values and are passed on as an output cluster of same type.  (The VI does other things too, but for simplicity only this is important.)
    2)  The VI that calls VI "Assign" (let's call it VI "Store") is not reentrant and has a local variable of type "Refs" that is wired to the input and output of VI "Assign".  This VI effectively stores the references.  The references returned by VI "Assign" are always valid right after the call, but after the problem condition described below, they are invalid at the start of all calls before they are passed to VI "Assign".
    3)  VI "Store" is called by multiple non-reentrant VIs, so the local variables of VI "Assign" retain their values (Has been tested and verified to retain their values).  The VI causing the problem in this case is a template VI of which multiple copies are launched (let's call it VI "Template").
    The problem is that the moment an instance of VI "Template" is closed, the queue reference becomes invalid, although the actual variant value of the reference remains the same.  The VI ref can become invalid or not, depending on small changes, but is always reproducible.  I assume there must be some similarity between VI and queue refs.  After spending some time researching, the Labview help states for the Open VI Ref component "If you do not close this reference, it closes automatically after the top-level VI associated with this function executes."  In this case I assumed it means that the moment the reentrant VI "Assign" finishes, the references will get cleared ??  So I made a non-reentrant VI (let's call it VI "NR Assign") that only assigns values to the references and VI "Assign" now calls this VI (It effectively does what I described VI "Assign" does).  I keep this VI alive by using it in a VI which never terminates and since it never terminates, the references should never become invalid.  Anyone still following?  This didn't solve the problem though.  If I reproduce the same scenario using only one instance of the template VI, it works just fine.  Furthermore, the VI and queue references are never closed, to aid analysis of the problem.  Can anyone shine some light on what happens when a template VI terminates?  Could this be the problem?
    Unfortunately I cannot include the code.
    Thank you whoever is able to make sense of this.
    Christie

    Christie wrote:
    Hi all,
    I have a fairly complicated problem, so please bear with me.
    1)  I have a reentrant SubVI (let's call it VI "Assign") that has an input cluster of (VI ref, queue ref) (let's call the cluster type "Refs").  If the VI ref is invalid (first execution), the VI ref and queue ref are assigned values and are passed on as an output cluster of same type.  (The VI does other things too, but for simplicity only this is important.)
    2)  The VI that calls VI "Assign" (let's call it VI "Store") is not reentrant and has a local variable of type "Refs" that is wired to the input and output of VI "Assign".  This VI effectively stores the references.  The references returned by VI "Assign" are always valid right after the call, but after the problem condition described below, they are invalid at the start of all calls before they are passed to VI "Assign".
    3)  VI "Store" is called by multiple non-reentrant VIs, so the local variables of VI "Assign" retain their values (Has been tested and verified to retain their values).  The VI causing the problem in this case is a template VI of which multiple copies are launched (let's call it VI "Template").
    The problem is that the moment an instance of VI "Template" is closed, the queue reference becomes invalid, although the actual variant value of the reference remains the same.  The VI ref can become invalid or not, depending on small changes, but is always reproducible.  I assume there must be some similarity between VI and queue refs.  After spending some time researching, the Labview help states for the Open VI Ref component "If you do not close this reference, it closes automatically after the top-level VI associated with this function executes."  In this case I assumed it means that the moment the reentrant VI "Assign" finishes, the references will get cleared ??  So I made a non-reentrant VI (let's call it VI "NR Assign") that only assigns values to the references and VI "Assign" now calls this VI (It effectively does what I described VI "Assign" does).  I keep this VI alive by using it in a VI which never terminates and since it never terminates, the references should never become invalid.  Anyone still following?  This didn't solve the problem though.  If I reproduce the same scenario using only one instance of the template VI, it works just fine.  Furthermore, the VI and queue references are never closed, to aid analysis of the problem.  Can anyone shine some light on what happens when a template VI terminates?  Could this be the problem?
    Unfortunately I cannot include the code.
    Thank you whoever is able to make sense of this.
    Christie
    All LabVIEW refnums do get deallocated automatically when the top-level VI in whose hierarchy the refnum was created goes idle (stops executing). You will have to make sure that the creation of a refnum is done inside a VI hierarchy that stays running for the entire time you want to use that refnum.
    Rolf Kalbermatter
    Message Edited by rolfk on 06-27-2007 11:52 AM
    Rolf Kalbermatter
    CIT Engineering Netherlands
    a division of Test & Measurement Solutions

  • Error in updating R-tree index

    Hi,
    I want to update a geometry column with a R-tree index on it with a statement like:
    update xxx set xxx.geometry = (select yyy.geometry...
    All geometries in the updated table are NULL before. I get the following error:
    ORA-29877: failed in the execution of the ODCIINDEXUPDATE routine
    ORA-13237: internal error during R-tree concurrent updates: [empty-node
    encountered; rebuild index]
    ORA-06512: at "MDSYS.SDO_INDEX_METHOD", line 7
    ORA-06512: at "MDSYS.SDO_IDX", line 86
    ORA-06512: at "MDSYS.SDO_INDEX_METHOD", line 83
    ORA-06512: at line 1
    What's wrong?
    Joerg

    Joerg,
    This is a known bug in R-tree indexing.
    When you create an R-tree index
    on a table with no geometries, it gives
    this error.
    This is fixed in 8.1.7.
    To get around this problem, make sure
    that atleast one geometry is non-null
    when you create the index.
    For a performance reason, it is not
    recommended that you create
    index on spatial table with NULL
    geometries.
    Updates on such indexed table will
    be very expensive compared to
    creating the index on a fully
    populated table.
    null

  • How to get the tree index of a child node

    Hi, I am loading a tree object from an XML source file (via
    an XMLListCollection)
    I can find the children on the currently selected node, like:
    var children:XMLList =
    XMLList(myTree.selectedItem).children();
    for(var i:Number=0; i < children.length(); i++) {
    trace("Child Found: " + children
    .@caption);
    But how can I determine the tree index for each of the
    children? I would like to be able to grab and save the tree index
    for each child, so that I can later just to do
    "myTree.selectedIndex = (saved child index) (based on some form
    action the user performs). I can't find any method of determining
    what the tree index for a child is, other than walking down the
    tree from the parent node and counting the number of nodes till I
    hit each child. Is there a simple method?

    Tree is hierarchical, index is linear. I have never seen
    anyone successfully use selectedIndex with Tree.
    You best bet is to put an id on each node and use e4x
    expression to find that node when you want.
    Tracy

  • Oracle Spatial 8.1.7 r-tree indexes

    I don't think this problem is specific to r-tree indexes vs. quad-tree.
    Even though I specify a tablespace other than the SYSTEM tablespace in Oracle Spatial Index Advisor when creating r-tree indexes, the index is still created in the SYSTEM tablespace. I don't want my spatial indexes in the SYSTEM tablespace!
    select tablespace_name from user_indexes where index_name = 'GPS_IDX';
    TABLESPACE_NAME
    SYSTEM
    Here is the sql statement that Spatial Index Advisor constructed:
    create index gis.gps_idx on gis.gps (geometry) indextype is mdsys.spatial_index parameters ('sdo_indx_dims=2');
    I was not able to issue this sql from worksheet with the tablespace option added. Is there a way to do that?
    In Spatial Index Advisor, if I don't select the geometry column, then the sql is constructed with the tablespace option added, but when I select the geometry column, it removes it from the sql.
    Can anybody shed some light on how to do this?
    thanks
    Dave

    Spatial creates an index entry in the system tablespace but realy creates the spatial index in the tablespace you gave it. To verify it execute the select:
    select table_name,tablespace_name
    from user_tables
    where table_name like 'spatial_table%';
    It will return your table_name plus the spatial index table created for it.
    The table_name will look something like this:
    spatial_table_SX_FL10$.
    spatial_tables beeing your spatial table.
    You can query the same for the indexes built on that previous table.
    select index_name,tablespace_name
    from user_indexes
    where table_name = 'SPATIAL_TABLE_SX_FL10$';
    The two index names would look like:
    spatial_table_sx_fl10$B1
    spatial_table_sx_fl10$B2
    They should be created in the tablespace mentionned in your tablespace clause when creating the spatial index.
    Hope this helps

  • Migrate B-Tree Indexes of XML O-R Table to XMLIndex on Binary XML Table

    We need slight help on how to migrate existing B-TREE Indexes from XML Obj-Rel Tables to XMLIndex on new XML Binary Tables
    We use searches on Nested Collection Elements (defined unbounded in XSD)
    and related DDL for XML Obj-Rel Tables is shown below:
    CREATE TABLE TNMAB_AGREEMENT_XML
    AGREEMENT_XML xmltype,
    CREATE_BY     VARCHAR2(15) NULL ,
    CREATE_DT_GMT     TIMESTAMP NULL ,
    CREATE_CLIENT_ID VARCHAR2(65) NULL ,
    UPDATE_BY     VARCHAR2(15) NULL ,
    UPDATE_DT_GMT     TIMESTAMP NULL ,
    UPDATE_CLIENT_ID VARCHAR2(65) NULL ,
    PIC_VERSION_NUM     NUMBER(20) NULL
    XMLTYPE COLUMN AGREEMENT_XML XMLSCHEMA "AB_Agreement_V1_XMLDB.xsd" ELEMENT "Agreement"
    VARRAY AGREEMENT_XML.XMLDATA."SHIPPING_PARTY_GROUPS"
    STORE AS TABLE SHIPPING_PARTY_GROUPS_NT
    (PRIMARY KEY (NESTED_TABLE_ID, ARRAY_INDEX) ENABLE)
    VARRAY SHIPPING_PARTIES
    STORE AS TABLE SHIPPING_PARTIES_NT
    (PRIMARY KEY (NESTED_TABLE_ID, ARRAY_INDEX) ENABLE)
    VARRAY AGREEMENT_XML.XMLDATA."SALES_OFFICE_CODES"."STRING_WRAPPERS"
    STORE AS TABLE SALES_OFFICE_CODES_NT
    (PRIMARY KEY (NESTED_TABLE_ID, ARRAY_INDEX) ENABLE)
    TABLESPACE TNMAB_XMLDB_ME_DATA;
    Table has PK and Unique Index which for the Binary XML Table, it will be setup on Virtual Columns (to enforce
    Unique Constraints)
    We have 6 more Normal Indexes on this Table, some created on Nested Elements as shown below:
    -- 4 Normal B-TREE Indexes on Leaf level Elements
    create index TNMAB_AGREEMENT_XML_IDX1 on TNMAB_AGREEMENT_XML (AGREEMENT_XML.XMLDATA."AGREEMENT_VERSION")
    tablespace TNMAB_XMLDB_ME_INDX;
    create index TNMAB_AGREEMENT_XML_IDX2 on TNMAB_AGREEMENT_XML (AGREEMENT_XML.XMLDATA."LAST_UPDATED_BY")
    tablespace TNMAB_XMLDB_ME_INDX;
    create index TNMAB_AGREEMENT_XML_IDX3 on TNMAB_AGREEMENT_XML (AGREEMENT_XML.XMLDATA."LAST_UPDATED")
    tablespace TNMAB_XMLDB_ME_INDX;
    create index TNMAB_AGREEMENT_XML_IDX4 on TNMAB_AGREEMENT_XML (AGREEMENT_XML.XMLDATA."CREATION_DATE")
    tablespace TNMAB_XMLDB_ME_INDX;
    --2 Indexes created on Nested Table (Collection)
    create index TNMAB_AGREEMENT_XML_NT_IDX1 on SALES_OFFICE_CODES_NT NT(NT.STR_VAL, NT.NESTED_TABLE_ID)
    tablespace TNMAB_XMLDB_ME_INDX;
    create index TNMAB_AGREEMENT_XML_NT_IDX2 on SHIPPING_PARTIES_NT NT(NT.CUSTOMER_HOLDER.SAP_ID, NT.NESTED_TABLE_ID)
    tablespace TNMAB_XMLDB_ME_INDX;
    Could you please let us know how we should migrate above Indexes to XMLIndex format.
    Specifically, not sure how the last 2 Indexes on Nested Tables is to be defined.
    Any help or resources pointing to this would be greatly appreciated.
    Thanks for the help,
    Auro

    Can't tell due to using XMLDATA pseudocolumn. Would need a sample XML document structure that can be used to define the XPATH structure and ALSO need the database version you are using (ALL digits) to see if you would need / can use STRUCTURED or UNSTRUCTURED XMLINDEX indexes.
    See the XML Index section (http://www.liberidu.com/blog/?page_id=441) on for guidance and/or of course the XMLDB Developers Guide for your database version
    http://www.liberidu.com/blog/?page_id=441
    XMLIndex (part 1) – The Concepts
    XMLIndex (Part 2) – XMLIndex Path Subsetting
    XMLIndex (Part 3) – XMLIndex Syntax Dissected
    XMLIndex Performance and Fuzzy XPath Searches
    Structured XMLIndex (Part 1) – Rules of Numb
    Structured XMLIndex (Part 2) – Howto build a structured XMLIndex
    Structured XMLIndex (Part 3) – Building Multiple XMLIndex Structures

  • ERROR BUILDING SPATIAL R-TREE INDEX

    I tried building an R-tree index on a spatial table containing latitude/longitude points. There are only 9000 records in the table.
    I get the following error:
    ORA-29855: error occurred in the execution of ODCIINDEXCREATE routine
    ORA-13200: internal error [Unsupported Type] in spatial indexing.
    ORA-06512: at "MDSYS.SDO_INDEX_METHOD_9I", line 7
    ORA-06512: at line 1
    Can anyone help?

    MY ORACLE version number is 9.0.1.0.0
    My table name is GEOM_FIX, the column that I tried to index is FIX_NAME VARCHAR2, where FIX_NAME is a unique identifier.
    My spatial index create script is:
    CREATE INDEX NDX_GEOM_FIX ON GEOM_FIX (FIX_NAME)
    INDEXTYPE IS MDSYS.SPATIAL_INDEX

Maybe you are looking for