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
-
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 PMKSG 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 = 214506026Hi,
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?
ThanksThere 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.pngHi,
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]; -
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.
ChristieChristie 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?
JoergJoerg,
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
DaveSpatial 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,
AuroCan'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
-
Error while installing 8.1.7 on Linux
Hello. I'm trying to install 8.1.7 on Mandrake Linux 9.1. After setting LD_ASSUME_KERNEL=2.2.5, I was able to run the installer. However, after selecting what and where to install to, I get the following error message: Fehler beim Aufruf des Ziels re
-
Hi Guys, I am getting the above error message when trying to start some of the services. Hope to get get some tips from the experts to resolve the issue. Thanks in advance.
-
Whats new in SAP CRM 7.0 Telecom
Hello Experts, Can you please share whats new in SAP CRM 7.0 Telecom solution. Specially in the sales order management related scenarios any pointers will be appreciated thanks Rishi
-
Photos not migrating by books from iPhoto
Hi all, I've installed Photos, and gone through the migration process... but none of my projects and books have migrated! :-/ Any suggestions are welcome. Thanks. Regards, Jeppe iPhoto 9.6.1 Photos 1.0 MacOS X 10.10.3 Mac Mini (late 2012)
-
my iphone 3 couldn't restore, its saying the error 46. what is the meaning of error 46?and how can i resolve it?