Xpoint
   [напомнить пароль]

Компьютеры::Базы данных (СУБД)::СУБД Oracle - F.A.Q.

Коннект к удаленному серверу.
или что такое ORA-12154 и как с ним бороться. Для соединения с удаленным сервером БД Oracle (рассматривается версия 8.1.5 и выше) на машине, с котрой планируется устанавливать соединение, необходимо установить Oracle клиента (обычно поставляется вместе с инсталляцией смого сервера или можно скачать отдельно с их сайта, версии клиента и сервера могут незначительно отличаться, нормально функционирует клиент 8.1.5 с сервером 8.1.6). Если особой необходимости нет, то желательно при установке как сервера, так и клиента указать минимальное количество протоколов связи и ограничиться только TCP/IP. Параметры, по которым клиент ищет сервер, с которым ему нужно связаться, описываются в файле ORACLE_HOME/network/admin/tnsnames.ora, например следующим образом:
This_client_name =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = hostname)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SID = sidname)
    )
  )
где: This_client_name - имя, котрое нужно указывать в параметре Connection String диалога установления соединения SQL Plus например. hostname - имя сервера, на котором установлен сервер Оракла. Желающие могут покопаться в системе Oracle Names, а для локальной сети достаточно указать имя компьютера (ну и не забыть прописать его в hosts). sidname - SID, заданный при создании базы данных на сервере Оракла. Проверять правильность конфигурирования соединения лучше всего с помощью SQL Plus. Если оно работает, то есть шанс, что и из других приложений удастся добиться установления соединения. Это если приложение способно правильно распознать переменную ORACLE_HOME. Если приложение эту переменную игнорирует, то следует поэкспериментировать с копированием файла tnsnames.ora в директории, в которой например это приложение выполняется.
В некоторых случаях возниает проблема - ORA-06401. Решается удалением из tnsnames.ora всех символов перевода каретки, т.е. файл преобразуется к Юникс-формату, где конец строки обозначается только символом завершения строки - new line.
Особняком стоит native JDBC для Оракла, которому клиент не требуется. Там в строке соединения указываются все те же параметры, что и в tnsnames.
Можно ли средствами Oracle запустить функцию/процедуру в заданное время?
Для этих целей в Oracle существует модуль DBMS_JOB, позволяющий задвать расписание для выполнения определенных процедур. Как и все в Оракле, богат разнообразными настройками.
Использование DDL-операторов в процедурах на примере CREATE TABLE
Во первых строках заметим, что DDL-операторы в хранимых процедурах (функциях, триггерах) PL\SQL применять нельзя, но можно выполнить их через можуль DBMS_SQL и получить собственно искомый результат.
   v_cursor number; 
    v_create varchar2(50); 
begin 
    v_create := 'create table example (ex number)'; 
    begin 
        v_cursor := dbms_sql.open_cursor; 
        dbms_sql.parse(v_cursor, v_create, dbms_sql.v7); 
    exception 
        when others then 
            dbms_sql.close_cursor(v_cursor); 
            raise; 
    end; 
    dbms_sql.close_cursor(v_cursor); 
end dbms_create; 
Для выполнения процедуры, естно, надо заиметь привилегии(у нас диктатура администратора, а не демократия). (С) Алексей Филиппов
Можно ли создать вычисляемое поле, и как быть с null + число = null, а нужно число.
Такая функция называется NVL. NVL(x, 0), если x not NULL, то вернет число, в противном случае 0. Всегда NVL(x, 0)+число=число;
Как построить дерево средствами Оракл?
Задавать древовидные связи крайне просто - с помощью внешнего ключа, ссылающегося на первичный ключ той же таблицы. Т.е. в таблице должны быть записи вида:
ID -- primary key
PARENT_ID --foreign key
Выводить древовидную структуру уже несколько сложнее. Для этого можно использовать объединения, где одна и та же таблица представляется разными алиасами. Примерно так:
SELECT parent.name AS parent, child.name AS child
FROM table AS parent, table AS child
WHERE parent.id=child.parent_id
ORDER BY child.parent_id
Сортировка используется для группировки детей одного родителя вместе. В общем случае уровень вложенности может быть любой, просто добавлется еще одно объединение и сортировка уже по нескольким полям - дедушка, родитель ...
Как показывает опыт, такой схемы вполне достатоно для большого круга задач. К тому же она обладает весьма полезным свойством - практически одинаково (с точностью до диалекта SQL) реализуется в большинстве известных СУБД (включая MySQL :)

Кроме того, можно почитать весьма интересную статью про построение деревьев в Оракл здесь: http://www.arsdigita.com/books/sql/trees.html
Для чего необходим Oracle Names Server?
Если БД всего одна - не нужен. Нужен лишь при большой и распределенной структуре баз данных для хранения информации о том "как мы будем коннектиться к БД <tra-la-la>" в одном месте.
Как проверить, что Оракл установлен и работает правильно?
Самые простые проверки (для определения - жив ли Оракл в принципе).
1) lsnrctl status Если нет ошибок - значит листенер "up & running" и может принимать коннекты от пользователей.
2) sqlplus /nolog connect sys/<sys_pwd> as sysdba select count(*) from v$session; Если не выдает ошибки и count(*) > 0 Оракл жив-здоров и как минимум серверные процессы активны.
Powered by POEM™ Engine Copyright © 2002-2005