Янв 272012
 

Обе утилиты экспорта данных, exp и expdp имеют параметр query, который позволяет экспортировать не все строки таблицы, а только те, которые попадают под условие. Беда в том, что в этом параметре допускается использовать только условие WHERE. Это может привести к тому, что план запроса, который будет использовать exp/expdp окажется крайне неоптимальным, и экспорт будет идти неприемлемо долго, хотя результирующий набор не такой уж большой.
Есть любопытный способ заставить утилиту использовать hint, тем самым выбирать оптимальный план выполнения.
Для этого в файл параметров запишем параметр query вот в таком виде:

query = "WHERE ROWID IN 
(SELECT /*+ index (test_table TEST_TABLE$TEST_COL) */ 
ROWID 
FROM cube.test_table WHERE test_col !=2 )"

/*+ index (test_table TEST_TABLE$TEST_COL) */ - это и есть хинт, требующий использовать индекс TEST_TABLE$TEST_COL при запросе из таблицы test_table. Таким образом, хинт мы пишем в подзапросе, а внешний запрос работает по ROWID, это всегда быстро.

Мне так удалось сэкономить почти сутки, экспорт прошёл всего за час.

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre lang="" line="" escaped="" cssfile="">

(обязательно)

(обязательно)