Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 еще один небольшой фокус  [new]
semirax
Member

Откуда:
Сообщений: 450
Простой вопрос - как такое сделать средствами SQL?
SQL> connect b/b;
Connected.

SQL> select tablespace_name from user_indexes where table_owner='B';

TABLESPACE_NAME
------------------------------
SYSTEM
14 окт 08, 10:56    [6302233]     Ответить | Цитировать Сообщить модератору
 Re: еще один небольшой фокус  [new]
Ну непонятно!!!
Guest
Что именно сделать-то?
14 окт 08, 10:58    [6302252]     Ответить | Цитировать Сообщить модератору
 Re: еще один небольшой фокус  [new]
sql+
Guest
У таблицы может быть один owner, у индекса этой же таблицы другой owner.
Ничего странного.
14 окт 08, 11:00    [6302275]     Ответить | Цитировать Сообщить модератору
 Re: еще один небольшой фокус  [new]
Как-то так
Guest
sql+
У таблицы может быть один owner, у индекса этой же таблицы другой owner.
Ничего странного.
+1.
Кроме того, табличное пространство таблицы совсем не обязано совпадать с табличным пространсвом индекса, которое в свою очередь совсем не обязано совпадать с табличным пространством, назначенныи по умолчанию для данного юзера.
14 окт 08, 11:08    [6302334]     Ответить | Цитировать Сообщить модератору
 Re: еще один небольшой фокус  [new]
Или не Как-то так?
Guest
sql+
У таблицы может быть один owner, у индекса этой же таблицы другой owner.
Ничего странного.
Думаю, это здесь ни при чем. Ведь речь идет не об владжельце индекса/таблицы, а об табличном пространстве, в котором этот индекс лежит.
14 окт 08, 11:10    [6302345]     Ответить | Цитировать Сообщить модератору
 Re: еще один небольшой фокус  [new]
sql+
Guest
Или не Как-то так?
sql+
У таблицы может быть один owner, у индекса этой же таблицы другой owner.
Ничего странного.
Думаю, это здесь ни при чем. Ведь речь идет не об владжельце индекса/таблицы, а об табличном пространстве, в котором этот индекс лежит.


Неужели для кого то является откровением, что индекс может лежать в отличном от таблицы табличном пространстве? Я бы сказал, он просот обязан лежать в другом табличном пространстве :))
14 окт 08, 11:16    [6302399]     Ответить | Цитировать Сообщить модератору
 Re: еще один небольшой фокус  [new]
sql+
Guest
Поэтому данная задача интересна именно в том аспекте на который я указал.

По умолчанию, обычные юзеры не имею квот на SYSTEM и не должны иметь.
Поэтому исходим из того что индекс в нём создал SYS. SYS также может создать таблицу в любой схеме.
14 окт 08, 11:19    [6302420]     Ответить | Цитировать Сообщить модератору
 Re: еще один небольшой фокус  [new]
tru55
Member

Откуда: СПб
Сообщений: 19790
sql+

По умолчанию, обычные юзеры не имею квот на SYSTEM и не должны иметь.


Не знаю, что считать умолчанием (например, после CREATE USER пользователь вообще никаких квот не имеет), но то, что многие DBA дают пользователям UNLIMITED TABLESPACE либо явно, либо через RESOURCE - енто факт...
14 окт 08, 11:23    [6302445]     Ответить | Цитировать Сообщить модератору
 Re: еще один небольшой фокус  [new]
Как-то так или не так
Guest
Осталось дождаться автора с пояснениями по теме вопроса. :)
14 окт 08, 11:24    [6302448]     Ответить | Цитировать Сообщить модератору
 Re: еще один небольшой фокус  [new]
semirax
Member

Откуда:
Сообщений: 450
sql+
Поэтому данная задача интересна именно в том аспекте на который я указал.

По умолчанию, обычные юзеры не имею квот на SYSTEM и не должны иметь.
Поэтому исходим из того что индекс в нём создал SYS. SYS также может создать таблицу в любой схеме.


Поскольку все думают по-разному, уточняю вопрос: какая команда DDL использована?
connect / as sysdba;
drop user b cascade;
grant connect,resource to b identified by b;
connect b/b;

[некий DDL]

SQL> select tablespace_name from user_indexes where table_owner='B';

TABLESPACE_NAME
------------------------------
SYSTEM
14 окт 08, 11:29    [6302497]     Ответить | Цитировать Сообщить модератору
 Re: еще один небольшой фокус  [new]
Apex
Member

Откуда: Made in USSR
Сообщений: 3909
Дург, ты гонишь...

SQL> drop user b cascade;
 
User dropped
SQL> grant connect,resource to b identified by b;
 
Grant succeeded
SQL> connect b/b;
Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 
Connected as b
SQL> create table t (a number constraint k primary key) organization index tablespace system;
 
Table created
SQL> select tablespace_name from user_indexes where table_owner='B';
 
TABLESPACE_NAME
------------------------------
SYSTEM
 
SQL> 
14 окт 08, 11:41    [6302603]     Ответить | Цитировать Сообщить модератору
 Re: еще один небольшой фокус  [new]
semirax
Member

Откуда:
Сообщений: 450
Дополнение - и некая подсказка.
1)указанный фокус к разным "хакам" - как ни странно - не относится. Патчей, соответственно, для него делать не будут:)
2)тестил на 9.2.0.3 и 10.2.0.1; думаю, от версии зависеть не должно.
14 окт 08, 11:42    [6302610]     Ответить | Цитировать Сообщить модератору
 Re: еще один небольшой фокус  [new]
Timm
Member

Откуда: Moscow, Ё-burg
Сообщений: 3696
Как вариант ;)
SQL> alter database default tablespace system;

Database altered.

SQL> grant connect, resource to u2 identified by u2;

Grant succeeded.

SQL> conn u2/u2
Connected.
SQL> create table t (id int);

Table created.

SQL> select tablespace_name from user_tables where table_name='T';

TABLESPACE_NAME
------------------------------
SYSTEM
14 окт 08, 11:46    [6302648]     Ответить | Цитировать Сообщить модератору
 Re: еще один небольшой фокус  [new]
semirax
Member

Откуда:
Сообщений: 450
Apex

create table t (a number constraint k primary key) organization index tablespace system;


Вроде того:)

Я, собственно, обнаружил этот "эффект" так:

create global temporary table t(x clob)
 LOB(x) store as (INDEX y);
14 окт 08, 11:47    [6302655]     Ответить | Цитировать Сообщить модератору
 Re: еще один небольшой фокус  [new]
sql+
Guest
SQL> create table hr.hr_tab as select * from dba_users;

Table created.

SQL> create index sys.i1_hr_hrtab on hr.hr_tab(username) tablespace system;

Index created.

SQL> select index_name, table_name, table_owner, tablespace_name from user_indexes where table_owner='HR';

INDEX_NAME                     TABLE_NAME                     TABLE_OWNER                    TABLESPACE_NAME
------------------------------ ------------------------------ ------------------------------ ----------------
I1_HR_HRTAB                    HR_TAB                         HR                             SYSTEM
14 окт 08, 11:51    [6302689]     Ответить | Цитировать Сообщить модератору
 Re: еще один небольшой фокус  [new]
sql+
Guest
semirax
Apex

create table t (a number constraint k primary key) organization index tablespace system;


Вроде того:)

Я, собственно, обнаружил этот "эффект" так:

create global temporary table t(x clob)
 LOB(x) store as (INDEX y);


насколько я помню у GTT не прописывается tablespace.

А темпорари-ts у тебя в базе есть?
14 окт 08, 11:55    [6302726]     Ответить | Цитировать Сообщить модератору
 Re: еще один небольшой фокус  [new]
sql+
Guest
Понял, это же LOB-индекс.
14 окт 08, 11:58    [6302753]     Ответить | Цитировать Сообщить модератору
 Re: еще один небольшой фокус  [new]
Apex
Member

Откуда: Made in USSR
Сообщений: 3909
semirax
Apex

create table t (a number constraint k primary key) organization index tablespace system;


Вроде того:)

Я, собственно, обнаружил этот "эффект" так:

create global temporary table t(x clob)
 LOB(x) store as (INDEX y);

Ну или так, а чем загадка то?:)
14 окт 08, 12:00    [6302774]     Ответить | Цитировать Сообщить модератору
 Re: еще один небольшой фокус  [new]
semirax
Member

Откуда:
Сообщений: 450
sql+
Понял, это же LOB-индекс.


Ага, он самый.
14 окт 08, 12:01    [6302779]     Ответить | Цитировать Сообщить модератору
 Re: еще один небольшой фокус  [new]
sql+
Guest
Apex
semirax
Apex

create table t (a number constraint k primary key) organization index tablespace system;


Вроде того:)

Я, собственно, обнаружил этот "эффект" так:

create global temporary table t(x clob)
 LOB(x) store as (INDEX y);

Ну или так, а чем загадка то?:)


Загадка в том, что до версии 9i в Oracle можно было для LOB-индекса LOB-сегмента(не тоже самое что индекс по LOB-полю) указать иной таблейспэйс, чем для самого сегмента. Начиная с 9i эту возможность убрали и LOB-индекс автоматически создаётся в том же пространтсве что и LOB-сегемент. Но когда создаётся GTT с LOB, то сегмент GTT размещается во временном табличном пространстве. Видимо соответствующий LOB-индекс не может быть размещён там-же, поэтому располагается в SYSTEM.
14 окт 08, 12:59    [6303259]     Ответить | Цитировать Сообщить модератору
 Re: еще один небольшой фокус  [new]
Apex
Member

Откуда: Made in USSR
Сообщений: 3909
sql+

Загадка в том, что до версии 9i в Oracle можно было для LOB-индекса LOB-сегмента(не тоже самое что индекс по LOB-полю) указать иной таблейспэйс, чем для самого сегмента. Начиная с 9i эту возможность убрали и LOB-индекс автоматически создаётся в том же пространтсве что и LOB-сегемент. Но когда создаётся GTT с LOB, то сегмент GTT размещается во временном табличном пространстве. Видимо соответствующий LOB-индекс не может быть размещён там-же, поэтому располагается в SYSTEM.

А, ну так надо было сразу отсечь другие варианты создания индекса:) Например, сказать, что явно (или используя настройки по-умолчаню) ТП не указывать. А то загадка получилась "ниочем".
14 окт 08, 13:12    [6303387]     Ответить | Цитировать Сообщить модератору
 Re: еще один небольшой фокус  [new]
sql+
Guest
Просто автор напролся именно на этот случай, но не подумал, что данная ситуация может быть реализована и другими способами.
14 окт 08, 13:30    [6303542]     Ответить | Цитировать Сообщить модератору
 Re: еще один небольшой фокус  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18480
sql+
Загадка в том, что до версии 9i в Oracle можно было для LOB-индекса LOB-сегмента(не тоже самое что индекс по LOB-полю) указать иной таблейспэйс, чем для самого сегмента. Начиная с 9i эту возможность убрали и LOB-индекс автоматически создаётся в том же пространтсве что и LOB-сегемент.
Да и в 8-ке синтаксис был, но игнорился (по крайней мере, 8.1.7.4)
15 окт 08, 03:03    [6306921]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить