Вы находитесь на страницах старой версии сайта.
Переходите на новую версию Interface.Ru

FAQ по ORACLE


Часто Задаваемые Вопросы (FAQ) Oracle UNIX


Вопрос: Как задать значения переменных среды Oracle?

Ответ: Скрипт Оraenv поставляется с программой инсталляции. Вы можете использовать его для задания значений переменных среды, таких как ORACLE_HOME, ORACLE_SID. Переменную Oracle Home directory однако не следует задавать в скрипте явно.

Следующий пример показывает, как вызывать скрипт oraenv (в неинтерактивном режиме):

export ORACLE_SID=ORCL;

export ORAENV_ASK=NO

. oraenv

Замечание: точка перед "oraenv" необходима, чтобы скрипт oraenv выполнился вашей текущей оболочкой (shell) .


Вопрос: Как можно просмотреть список всех установленных продуктов?

Ответ: Для просмотра списка всех установленных продуктов и версий выполните команду:

cd $ORACLE_HOME/orainst

./inspdver


Вопрос: Можно ли осуществить экспорт непосредственно на ленту?

Ответ: Да, используйте вместо имени файла имя ленточного устройства. Например,

exp userid/password file=/dev/rmt0 table=emp volsize=1.2G

Замечание: Размер задается числом и заканчивается указанием a m, k, b (M, K, B). По умолчанию байты.


Вопрос: Можно ли архивировать сразу на ленту?

Ответ: Да, установите log_archive_dest = /dev/rmt0:100M в своем файле инициализации init.ora.

Можно также использовать ARCHMON с ARCH. Когда достигнут конец ленты, ARCH останавливается, дает сигнал ARCHMON и пользователю сообщается о необходимости установить новую ленту. Когда лента смонтирована, процесс архивирования возобновляется. Эта операция требует оперативного мониторинга.

$ archmon @P:TEST


Вопрос: Что делать, если недостаточно места для экспорта базы?

Ответ: Попробуйте выполнить экспорт и сжатие одновременно.

# Make a pipe
mknod expdat.dmp p # or mkfifo pipe
# Start compress sucking on the pipe in background
compress < expdat.dmp > expdat.dmp.Z &
# Wait a second or so before kicking off the export
sleep 5
# Start the export
exp scott/tiger file=expdat.dmp

Или экспортируйте по сети непосредственно в базу-получатель

Host A:
mknod FIFO.dmp p
exp u/p FILE=FIFO.dmp rest_of_parameters...

Host B:
mknod FIFO2.dmp p
rsh host1 dd if=FIFO.dmp > FIFO2.dmp &
imp u/p FILE=FIFO2.dmp rest_of_parameters...


Вопрос: Как выполнить экспорт/импорт быстрее?

Ответ: Для ускорения передачи (до 30%) больших объемов данных между двумя базами, перекомпилируйте программы для выполнения операций импорта/экспорта в однозадачном режиме. Этот метод потребует больше памяти и официально не поддерживается компанией Oracle, хотя сами они, похоже, его используют.

cd $ORACLE_HOME/rdbms/lib

make -f ins_rdbms.mk singletask

# make -f ins_rdbms.mk expst

# make -f ins_rdbms.mk impst

# make -f ins_rdbms.mk sqlldrst

# mv expst $ORACLE_HOME/bin/

# mv impst $ORACLE_HOME/bin/

# mv sqlldrst $ORACLE_HOME/bin/

Теперь используйте expst и impst вместо imp и exp.


Вопрос: Как выбрать значение из таблицы в переменную?

Ответ: В примере, приведенном ниже, значение из базы данных задается в качестве переменной среды.

#!/bin/sh

VALUE=`sqlplus -silent "user/password@instance" <<END

set pagesize 0 feedback off verify off heading off echo off

select max(c1) from t1;

exit;

END`

if [ -z "$VALUE" ]; then

echo "No rows returned from database"

exit 0

else

echo $VALUE

fi


Вопрос: Как отследить что делает тот или иной процесс?

Ответ:

truss -rall -wall -p <PID>

truss -p $ lsnrctl dbsnmp_start


Вопрос: Как заставить один скрипт работать со всеми БД?

Ответ: Все базы данных на вашей машине должны быть перечислены в файле /etc/oratab Посмотрите этот пример:

#!/bin/ksh

ALL_DATABASES=`cat /etc/oratab|grep -v "^#"|grep -v "N$"|cut -f1 -d:-s`

for DB in $ALL_DATABASES

do

unset TWO_TASK

export ORACLE_SID=$DB

export ORACLE_HOME=`grep "^${DB}:" /etc/oratab|cut -d: -f2 -s`

export PATH=$ORACLE_HOME/bin:$PATH

echo "---> Database $ORACLE_SID, using home $ORACLE_HOME"

sqlplus -s system/${DB}password @<< - EOF

select * from global_name;

exit;

EOF

done

Замечание: 'EOF' должен находиться в 1-ой позиции. Дефис перед EOF двумя строками выше инструктирует коммандный интерпретатор (shell) убирать табуляцию (TABы), (только их, не пробелы) до следующего EOF, что позволяет вам использовать TABы в других местах для улучшения читабельности вашего скрипта.


Вопрос: Почему Oracle не освобождает файловое пространство, когда удаляется табличная область (через команду drop)?

Ответ: Иногда, когда Вы удаляете табличную область (через команду drop) и затем файлы (используя rm), Oracle не освобождает файловое пространство, пока Вы не закроете его. Это действие требует подтверждения "df -k" командой. Такое поведение считается нормальным для Unix среды.

Используйте команду "fuser" перед удалением файлов Oracle. Если они задействованы другими процессами, пространство так и не освободится после rm команды. Если файл заблокирован SMON, подождите несколько минут до разблокировки.


Вопрос: Как скопировать Oracle software с машины на машину?

Ответ: Скопировать Oracle с машины на машину:

# use tar to copy files and directorys with permissions and ownership

tar cf - $ORACLE_HOME | rsh "cd $ORACLE_HOME; tar xf -"

Скопировать в другой каталог на том же сервере:

cd /new/oracle/dir/

(cd $ORACLE_HOME; tar cf - . ) | tar xvf –

Автор примеров Frank Naude.


За дополнительной информацией обращайтесь в компанию Interface Ltd.

Обсудить на форуме Oracle

Рекомендовать страницу

INTERFACE Ltd.
Телефон/Факс: +7 (495) 925-0049
Отправить E-Mail
http://www.interface.ru
Rambler's Top100
По техническим вопросам обращайтесь к вебмастеру