powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Про индексы
19 сообщений из 19, страница 1 из 1
Про индексы
    #32158076
Animal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господа, что-то я совсем запутался, подскажите кто может.
Насколько я понимаю индексы если не указывать в создании явный таблеспэйс то он создается в таблеспэйс рабочий спэйс изера, который создает этот индекс. (поправте если я не прав)


Так вот вопрос
Есть скрипт в котором создаются индексы без явного указания таблеспэйса и еще там создаются и модернизируются таблицы тоже без явного указания таблеспэйса. (так что изменение рабочего спэйся для юзера перед скриптом на нужный для индексов и замена его на обратный невозможно. править скрипт тоже не представляется возможным, потому что это не одноразово (новые скрипты приходят такимиже и как бы все таки лень постоянно их править))

Возможно ли как-нибудь Оракл заставить создавать индексы в другом по-умолчанию таблеспэйсе чем рабочий, указанный для юзера???
...
Рейтинг: 0 / 0
Про индексы
    #32158125
Vladimir_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
после прогона скриптов можно сгенерить скрипт для переноса индексов в другое пространство. Примерно так
alter index <owner.indexname> rebuild tablespase <имя ts>
...
Рейтинг: 0 / 0
Про индексы
    #32158127
Animal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С переносом в другое место тоже не фантан потому как происходит увеличение старого таблеспэйса а вот это как раз и не желательно.
С таким же успехом можно все оставить как есть
...
Рейтинг: 0 / 0
Про индексы
    #32158140
Vladimir_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тогда, наверное, лучше написать прогу-конвертор для добавления таблспейса к командам создания индекса и констрейнтам, создающим индексы.
...
Рейтинг: 0 / 0
Про индексы
    #32158181
Animal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проще убить тех кто пишет такой софт
...
Рейтинг: 0 / 0
Про индексы
    #32158459
Фотография Scott Tiger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спокойнее... Это не страшно. Хотя, если они и параметры хранения не указывают, впора пойти на кухню точить ножичек :)
...
Рейтинг: 0 / 0
Про индексы
    #32158486
Фотография softy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Напиши анализатор кода, который автоматически будут заменять названия исходных tablespaces на те которые тебе нужны.
...
Рейтинг: 0 / 0
Про индексы
    #32158826
denim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
можно по-хакерски - поменять в ts$ имя табл. пространства, очистить shared pool, прогнать скрипт и поменять обратно. НО ЭТО ОЧЕНЬ НЕ ХОРОШО!!!
...
Рейтинг: 0 / 0
Про индексы
    #32158840
Фотография softy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"очистить shared pool"
to denim: А как быть с data buffer ? Послать на?
...
Рейтинг: 0 / 0
Про индексы
    #32158849
denim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to soft...
а причём здесь data buffer?
...
Рейтинг: 0 / 0
Про индексы
    #32158872
Фотография softy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Данные в буфере данных связаны с определённой таб. областью.
Как ты собираешься менять ts$ в этом случае?
...
Рейтинг: 0 / 0
Про индексы
    #32158886
denim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to soft...
Так они же не по имени табл. пространств связаны, а по ID. А в ts$ нужно менять ТОЛЬКО поле NAME. А shared pool надо чистить, потому что там живёт словарь данных, в котором как раз прописано соответствие имени табл. пр-ва и его ID.


Ты это... поробуй :) усё получится, проверено. Но править словать данных, как ты сам понимаешь... дело не благодарное.
...
Рейтинг: 0 / 0
Про индексы
    #32158898
Фотография softy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Ты это... поробуй :) "

to denim: Нет, спасибо, как нибудь в следующий раз :)
...
Рейтинг: 0 / 0
Про индексы
    #32158910
Фотография MaxU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот небольшая программка на Perl, которую я использовал для похожего случая...

не забудь поменять значения "$tbl_tbsp" (tablespace for tables) и "$ind_tbsp" (tablespace for indexes) для своего случая.

пример использования:

Код: plaintext
1.
perl prg.pl .


"точка" - "перелопатить" ВСЕ файлы начиная с текущей директории (рекурсивно) с расширением ".sql"

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
#!/usr/bin/perl -w

$prg =  "abaxx.pl" ;

die  "Usage: perl $prg <StartDir>" 
  if(scalar(@ARGV) <  1 );

$tbl_tbsp =  "TS_TBL_MID" ;
$ind_tbsp =  "TS_IND_MID" ;


&recurse ($ARGV[ 0 ]);

#&AddTableSpaceClause ( $ARGV[ 0 ] );

sub recurse {
    my $dir = shift;
    opendir(DIR, $dir) || die  "can't opendir $dir: $!";
    my @files = readdir(DIR);
    closedir DIR;
    foreach ( @files ) {
        next if ( $_ eq '..' or $_ eq '.' );
#        print $_;
        my $file = "$dir/$_";
        if ( -d $file ) {
           &recurse ( $file );
        }
        if ( -f $file && m/\.sql$/i ) {
	   print "Processing: $file\n";
           &AddTableSpaceClause ( $file );
        }
    }
}

sub AddTableSpaceClause {
  my ($fname) = @_;

  my ($tmp_file) = "#tmp#.tmp";
  my ($delim) = $/;

  undef $/;

  open (SRC, "<$fname") || die("Can't open $fname" );
  open (TMP,  ">$tmp_file" ) || die( "Can't open $tmp_file" );

  while (<SRC>) {
    s#(CONSTRAINT\s+\w+\s+((UNIQUE)|(PRIMARY\s+KEY))\s+.*?\))#$ 1  USING INDEX TABLESPACE $ind_tbsp#ismg;
    s#(^CREATE\s+TABLE\s+\w+\s+\(.*?)([\/\;])$#$ 1  TABLESPACE $tbl_tbsp\n$ 2 \n#ismg;
    s#(^CREATE\s+TABLE\s+\w+\s+)(AS\s+.*?)([\/\;])$#$ 1  TABLESPACE $tbl_tbsp $ 2 \n$ 3 \n#ismg;
    s#(^CREATE\s+UNIQUE\s+INDEX\s+.*?)([\/\;])$#$ 1  TABLESPACE $ind_tbsp\n$ 2 \n#ismg;
    s#(^CREATE\s+PRIMARY\s+KEY\s+INDEX\s+.*?)([\/\;])$#$ 1  TABLESPACE $ind_tbsp\n$ 2 \n#ismg;
    s#(^CREATE\s+INDEX\s+.*?)([\/\;])$#$ 1  TABLESPACE $ind_tbsp\n$ 2 \n#ismg;
    print TMP  "$_" ;
  }

  close (TMP);
  close (SRC);

  rename $tmp_file, $fname;

  $/ = $delim;
}


проверял на ActivePerl от ActiveState

не забудь сохранить перед этим исходные файлы!
и еще - не стоит ее запускать дважды - я такую проверку не делал...
...
Рейтинг: 0 / 0
Про индексы
    #32158916
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А еще бывает пишут создание PRIMARY KEY или UNIQUE CONSTRANT вообще без указания индекса:(
...
Рейтинг: 0 / 0
Про индексы
    #32159039
Znich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я решал подобную проблему так:

.. создаю таблицы в рабочем пространстве пользователя

ALTER USER user_name DEFAULT TABLESPACE index_tablespace;

.. создаю индексы

ALTER USER user_name DEFAULT TABLESPACE user_tablespace;

минус описанной схемы - надо знать таблеспэйс пользователя по-умолчанию, чтобы его потом задать. И обходится в принципе этот минус легко - перед запуском скрипта можно опросить, какой таблеспейс у него выставлен, в переменную, а там уже дело техники. Если за этим вопрос станет - подсоблю :)
...
Рейтинг: 0 / 0
Про индексы
    #32159102
Animal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to Znich
я решал подобную проблему так:

.. создаю таблицы в рабочем пространстве пользователя

ALTER USER user_name DEFAULT TABLESPACE index_tablespace;

.. создаю индексы

ALTER USER user_name DEFAULT TABLESPACE user_tablespace


повторяю еще раз этот вариант не подходит
Есть скрипт в котором создаются индексы без явного указания таблеспэйса и еще там создаются и модернизируются таблицы тоже без явного указания таблеспэйса. (так что изменение рабочего спэйся для юзера перед скриптом на нужный для индексов и замена его на обратный невозможно . править скрипт тоже не представляется возможным, потому что это не одноразово (новые скрипты приходят такимиже и как бы все таки лень постоянно их править))


to Denim
можно по-хакерски - поменять в ts$ имя табл. пространства , очистить shared pool, прогнать скрипт и поменять обратно. НО ЭТО ОЧЕНЬ НЕ ХОРОШО!!!

А чем собственно это отличается от выше сказанного???



to MaxU
спасибо за исходник конечно.
Но тема писать конвертор не совсем устраивает.

Просто хотелось как-то все-таки по хорошому, а видно прейдется как всегда.

ВСЕМ СПАСИБО
...
Рейтинг: 0 / 0
Про индексы
    #32159160
denim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to Animal

А если создать "левого" пользователя с правильными ts, а потом раздать гранты, насоздавать синонимов?
...
Рейтинг: 0 / 0
Про индексы
    #32159161
denim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to Animal

А если создать "левого" пользователя с правильными ts, прогнать скрипт под ним, а потом раздать гранты, насоздавать синонимов?
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Про индексы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]