Oracle mysq: различия между версиями

Материал из noname.com.ua
Перейти к навигацииПерейти к поиску
 
(не показано 11 промежуточных версий этого же участника)
Строка 1: Строка 1:
  +
[[Категория:Oracle]]
 
=Oracle=
 
=Oracle=
   
 
Здесь я записываю проблемы которые возникли при понимании Oracle
 
Здесь я записываю проблемы которые возникли при понимании Oracle
   
  +
==Просмотр параметров и переменных==
  +
===Параметры===
  +
<PRE>
  +
SHOW PARAMETERS
  +
</PRE>
  +
например
  +
<PRE>
  +
SQL> SHOW PARAMETERS DB_CREATE;
  +
  +
NAME TYPE VALUE
  +
------------------------------------ ----------- ------------------------------
  +
db_create_file_dest string
  +
db_create_online_log_dest_1 string
  +
db_create_online_log_dest_2 string
  +
db_create_online_log_dest_3 string
  +
db_create_online_log_dest_4 string
  +
db_create_online_log_dest_5 string
  +
</PRE>
  +
  +
===Пулы памяти===
  +
<PRE>
  +
SQL> SELECT * from v$sgastat;
  +
...
  +
POOL NAME BYTES
  +
------------ -------------------------- ----------
  +
shared pool KTI latches 576
  +
shared pool KKJ WRK LAT 480
  +
shared pool kfkhsh_kfdsg 4104
  +
shared pool event statistics ptr arra 1360
  +
shared pool KGKP randnum 40000
  +
large pool PX msg pool 903840
  +
large pool free memory 3290464
  +
java pool free memory 4194304
  +
  +
602 rows selected.
  +
</PRE>
  +
  +
==SHOW TABLES==
  +
<PRE>
  +
SELECT * FROM USER_TABLES;
  +
</PRE>
 
==CREATE DATABASE==
 
==CREATE DATABASE==
 
В Oracle понятие DATABASE отличается от MySQL. <BR>
 
В Oracle понятие DATABASE отличается от MySQL. <BR>
С точки зрения Oracle, "База данных" - это отдельный экземпляр, т.е. в терминах MySQL это фактически отдельная (или почти отдельная инсталляция). Потому, создание базы данных в случае Oraclre - достаточно трудоемкий (и не очевидный) процесс.
+
С точки зрения Oracle, "База данных" - это отдельный экземпляр, т.е. в терминах MySQL это фактически отдельная (или почти отдельная инсталляция). Потому, создание базы данных в случае Oraclre - достаточно трудоемкий (и не очевидный) процесс.
  +
  +
==Tablespace==
  +
Tablespace - это контейнер для данных (таблиц и индексов но НЕ триггеров) и по сути - файл на диске.
  +
<PRE>
  +
ALTER SYSTEM SET DB_CREATE_FILE_DEST = '$ORACLE_HOME/tablespace/ts_test';
  +
</PRE>
  +
  +
<PRE>
  +
CREATE TABLESPACE TS_sirmax DATAFILE '$ORACLE_HOME/tablespace/ts_test/sirmax.dat' SIZE 100M REUSE AUTOEXTEND ON NEXT 2M MAXSIZE 200M
  +
</PRE>
  +
  +
<PRE>
  +
SQL> SELECT tablespace_name, file_name, status, bytes FROM dba_data_files WHERE tablespace_name LIKE 'TS_SIRMAX%';
  +
  +
TABLESPACE_NAME FILE_NAME STATUS BYTES
  +
------------------------------ -------------------------------------------------------------------------------- --------- ----------
  +
TS_SIRMAX /export/home/oracle/10g/tablespace/ts_test/sirmax.dat AVAILABLE 104857600
  +
</PRE>
   
  +
* http://www.firststeps.ru/sql/oracle/r.php?122
  +
* http://download.oracle.com/docs/cd/B13789_01/server.101/b10759/statements_7003.htm
   
 
==Пользователь или схема==
 
==Пользователь или схема==
 
(оригинал взят: <ccылка утеряна, кто знает - подскажите>
 
(оригинал взят: <ccылка утеряна, кто знает - подскажите>
  +
<BR>
 
В Oracle понятия "схема" и "пользователь" нераздельно слились воедино. Формально два разных слова "user" и "schema" используются в Oracle для обозначения одного и того же: "схемы-пользователя". Документация на этот счет стыдливо говорит, что "при заведении пользователя с помощью предложения CREATE USER автоматически создается схема с таким же именем".<BR>
 
В Oracle понятия "схема" и "пользователь" нераздельно слились воедино. Формально два разных слова "user" и "schema" используются в Oracle для обозначения одного и того же: "схемы-пользователя". Документация на этот счет стыдливо говорит, что "при заведении пользователя с помощью предложения CREATE USER автоматически создается схема с таким же именем".<BR>
 
С другой стороны, отдельных манипуляций со схемами в Oracle не предусмотрено.<BR>
 
С другой стороны, отдельных манипуляций со схемами в Oracle не предусмотрено.<BR>

Текущая версия на 11:47, 24 июня 2010

Oracle

Здесь я записываю проблемы которые возникли при понимании Oracle

Просмотр параметров и переменных

Параметры

SHOW PARAMETERS

например

SQL> SHOW PARAMETERS DB_CREATE;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_create_file_dest                  string
db_create_online_log_dest_1          string
db_create_online_log_dest_2          string
db_create_online_log_dest_3          string
db_create_online_log_dest_4          string
db_create_online_log_dest_5          string

Пулы памяти

SQL> SELECT *  from v$sgastat;
...
POOL         NAME                            BYTES
------------ -------------------------- ----------
shared pool  KTI latches                       576
shared pool  KKJ WRK LAT                       480
shared pool  kfkhsh_kfdsg                     4104
shared pool  event statistics ptr arra        1360
shared pool  KGKP randnum                    40000
large pool   PX msg pool                    903840
large pool   free memory                   3290464
java pool    free memory                   4194304

602 rows selected.

SHOW TABLES

SELECT * FROM USER_TABLES;

CREATE DATABASE

В Oracle понятие DATABASE отличается от MySQL.
С точки зрения Oracle, "База данных" - это отдельный экземпляр, т.е. в терминах MySQL это фактически отдельная (или почти отдельная инсталляция). Потому, создание базы данных в случае Oraclre - достаточно трудоемкий (и не очевидный) процесс.

Tablespace

Tablespace - это контейнер для данных (таблиц и индексов но НЕ триггеров) и по сути - файл на диске.

ALTER SYSTEM SET DB_CREATE_FILE_DEST = '$ORACLE_HOME/tablespace/ts_test';
CREATE TABLESPACE TS_sirmax  DATAFILE '$ORACLE_HOME/tablespace/ts_test/sirmax.dat' SIZE 100M REUSE AUTOEXTEND ON NEXT 2M MAXSIZE 200M
SQL> SELECT tablespace_name, file_name, status, bytes  FROM dba_data_files  WHERE tablespace_name LIKE 'TS_SIRMAX%';

TABLESPACE_NAME                FILE_NAME                                                                        STATUS         BYTES
------------------------------ -------------------------------------------------------------------------------- --------- ----------
TS_SIRMAX                       /export/home/oracle/10g/tablespace/ts_test/sirmax.dat                           AVAILABLE  104857600

Пользователь или схема

(оригинал взят: <ccылка утеряна, кто знает - подскажите>
В Oracle понятия "схема" и "пользователь" нераздельно слились воедино. Формально два разных слова "user" и "schema" используются в Oracle для обозначения одного и того же: "схемы-пользователя". Документация на этот счет стыдливо говорит, что "при заведении пользователя с помощью предложения CREATE USER автоматически создается схема с таким же именем".
С другой стороны, отдельных манипуляций со схемами в Oracle не предусмотрено.
Команда CREATE SCHEMA в Oracle обманчива; она не создает схему, как можно было бы подумать

Для разработчика же эти два понятия не идентичны. Так, схема представляет собой своего рода контейнер хранимых в БД объектов, несущий традиционно двойную функциональную нагрузку: как средства организации данных (объектов в базе много, но не всем приложениям все они интересны) и как средство защиты данных от посторонних приложений. Пользователь же, по своей изначальной идее - это конкретное лицо, которое может подключаться к СУБД для работы с теми или иными данными, проверяться на наличие полномочий, контролироваться на предмет совершаемых действий и т. д.

Данные принадлежат информационной системе, предприятию, а пользователи могут наниматься и увольняться. Как сымитировать такой способ работы в Oracle?

Решение
Возможно, кто-то уже придумал свое решение этой проблемы. Если нет - можно воспользоваться предлагаемым ниже.

Для хранения объектов "отдела кадров" создаем схему (-пользователя) HR:

CREATE USER hr IDENTIFIED BY hr; 

Далее по мере необходимого уточняем все свойства этой схемы, например:

ALTER USER hr DEFAULT TABLESPACE hr_ts DEFAULT TABLESPACE temp; и так далее. 

Для физических лиц создаем пользователей Oracle, например:

CREATE USER pete IDENTIFIED BY thisismepete;
CREATE USER mary IDENTIFIED BY maryiam;

Далее пользователям нужно приписать необходимые свойства. В типичном случае все они одинаковы, так что имеет смысл написать один-единственный сценарий, который наделял бы каждого нового "Петю" или "Машу" требуемыми полномочиями. Что туда должно входить ? Как минимум, системная привилегия CREATE SESSION. Но кроме этого, для доступа к своим таблицам от имени HR следует выдать что-то вроде

GRANT SELECT, INSERT, UPDATE, DELETE ON main_hr_table TO pete; 

Это еще не все. Пользователь PETE действительно теперь сможет подключаться к СУБД от своего имени и работать с таблицей MAIN_HR_TABLE, однако ссылаться на нее он будет вынужден по полному имени: HR.MAIN_HR_TABLE, так как это не его таблица. Можно ли избежать этого и заставить его чувствовать себя "как дома"? Можно. Ему достаточно выдать:

ALTER SESSION SET CURRENT_SCHEMA=hr; 

Удобнее, однако, эту команду "завернуть" в триггер, срабатывающий при подключении к "схеме" PETE, то есть выдать, например, от имени SYS:

CREATE OR REPLACE TRIGGER set_hr_schema_for_pete
AFTER LOGON ON pete.SCHEMA
BEGIN
 EXECUTE IMMEDIATE 'ALTER SESSION SET CURRENT_SCHEMA=hr';
END;
/ 

Теперь, подключаясь к СУБД, пользователь PETE будет видеть объекты HR "как свои", по короткому имени, правда свои собственные таблицы он вынужден будет называть "целиком", например PETE.MY_PETE_TABLE, но нам, кажется, это и не важно.

Особенности предложенного решения

  • его надо автоматизировать
  • невозможно создавать и удалять объекты
  • можно использовать системный аудит

Альтернатива Предложена в Oracle 9.0: "корпоративные пользователи" и сервер имен.