При восстановлении базы данных из одной версии базы на другой (Например, из 2000 в 2005) возникает ошибка:
Error 3154: The backup set holds a backup of a database other than the existing database.
Для того чтобы избежать этой ошибки необходимо:
1) В новой базе создать базу с аналогичным названием
2) И выполнить Restore базы с опцией REPLACE
Например,
ALTER DATABASE testdb
SET SINGLE_USER WITH
ROLLBACK IMMEDIATE
RESTORE DATABASE testdb
FROM DISK = 'C:\backup\databases\testdb.bak'
WITH MOVE 'testdb' TO 'C:\Program Files\Microsoft SQL Server\MSSQL\MSSQL\DATA\testdb.mdf',
MOVE 'testdb_log' TO 'C:\Program Files\Microsoft SQL Server\MSSQL\MSSQL\DATA\testdb_log.ldf',
REPLACE
четверг, 19 ноября 2009 г.
вторник, 17 ноября 2009 г.
Oracle database listener password
Добавление пароля для LISTENER
1) Открыть файл $ORACLE_HOME/network/admin/listener.ora
2) Добавить в конце PASSWORDS_{LISTENER_NAME}=newpassword
3) $ORACLE_HOME/bin/lsnrctl
LSNRCTL> set current_listener listener
Current Listener is listener
LSNRCTL> change_password
Old password:
New password:
Reenter new password:
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC0)))
Password changed for listener
The command completed successfully
LSNRCTL> set password
Password:
The command completed successfully
LSNRCTL> save_config
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC0)))
Saved LISTENER configuration parameters.
Listener Parameter File /u01/app/oracle/9.2.0/network/admin/listener.ora
Old Parameter File /u01/app/oracle/9.2.0/network/admin/listener.bak
The command completed successfully
LSNRCTL>
4) В файле listener.ora появится строка PASSWORDS_LISTENER =
Удаления пароля для LISTENER
$ORACLE_HOME/bin/lsnrctl
LSNRCTL> set password
Password:
The command completed successfully
LSNRCTL> stop
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC0)))
The command completed successfully
LSNRCTL> start
или удалить строку "PASSWORDS_LISTENER =" и перезапустить LISTENER
1) Открыть файл $ORACLE_HOME/network/admin/listener.ora
2) Добавить в конце PASSWORDS_{LISTENER_NAME}=newpassword
3) $ORACLE_HOME/bin/lsnrctl
LSNRCTL> set current_listener listener
Current Listener is listener
LSNRCTL> change_password
Old password:
New password:
Reenter new password:
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC0)))
Password changed for listener
The command completed successfully
LSNRCTL> set password
Password:
The command completed successfully
LSNRCTL> save_config
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC0)))
Saved LISTENER configuration parameters.
Listener Parameter File /u01/app/oracle/9.2.0/network/admin/listener.ora
Old Parameter File /u01/app/oracle/9.2.0/network/admin/listener.bak
The command completed successfully
LSNRCTL>
4) В файле listener.ora появится строка PASSWORDS_LISTENER =
Удаления пароля для LISTENER
$ORACLE_HOME/bin/lsnrctl
LSNRCTL> set password
Password:
The command completed successfully
LSNRCTL> stop
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC0)))
The command completed successfully
LSNRCTL> start
или удалить строку "PASSWORDS_LISTENER =" и перезапустить LISTENER
Ярлыки:
Oracle 9i
Установка и настройка Oracle Names Server (ONS)
1. Необходимо убедиться в наличии ONS в списке установленных приложений (с помощью Oracle Universal Installer , кнопка Installed Products). В случае отсутствия в списке, необходимо установить ONS (Oracle Universal Installer > Enterprise Manager Products).
2. Создание Names Server :
Каким образом будет создан ONS зависит от того, как вы хотите хранить информацию о региональных базах данных. Возможно хранение информации:
- в БД доступной ONS. Информация хранится в БД и в ONS чекпоинт файлах. Если БД недоступна используются чекпоинт файлы.
- в чекпоинт файлах и реплицируется с другими ONS.
По умолчанию чсекпоинт файлы хранятся в директории $ORACLE_HOME/network/names. В UNIX среде папка names по умолчанию отсутствует. Необходимо вручную создавать данную папку.
Чекпоинт файлы:
ckpcfg.ora Contains a backup copy of the configuration parameters stored in the ONRS_CONFIG table in the region database
ckpcch.ora Contains all current non-authoritative data that has been retrieved and cached from remote regions and has not expired yet
ckptop.ora and ckpdom.ora These files contain all authoritative data for the region. The ckptop.ora file defines the domains in the administrative region and the Oracle Names servers authoritative for each domain. The ckdom.ora file contains the authoritative data for each domain.
If the Oracle Names server uses a region database, then these files serve as a copy of the region data in the tables as of the last reload. This data is used when the Oracle Names server starts if the database is inaccessible.
If the Oracle Names server is not using the database, these files are its only persistent storage and are loaded by the Oracle Names server at startup. The Oracle Names server considers the data in these file to be current if there are no other Oracle Names servers in the region. The files are kept current as of the last update to the region.
В случае запуска ONS без никаких настроек по умолчанию имя дается в формате ONAMES_host. Протокол по умолчанию TCP/IP, порт 1575.
Хранение информации в таблицах БД :
Шаг 1. Конфигурация сервера баз данных
1. Войти в БД под пользователем SYSTEM
SQL> connect SYSTEM/password
2. Создайте пользователя, который может соединяться к таблицам БД
CREATE USER user IDENTIFIED BY password
DEFAULT TABLESPACE users
TEMPORARY TABLESPACE temp;
GRANT CREATE SESSION TO user;
GRANT RESOURCE users TO user;
GRANT CREATE SYNONYM TO user;
3. Запустите скрипт namesini.sql расположенный $ORACLE_HOME/network/admin (UNIX) и ORACLE_HOME\network\admin\names (Windows NT)
SQL> CONNECT user/password
SQL>@ORACLE_HOME\network\admin\names\namesini.sql
Создание Oracle Names Server
1. Запускаем Oracle Net Manager
$ORACLE_HOME/bin/netmgr
Ставим указатель на ORACLE NAMES SERVERS. В пункте меню Edit выбираем Create.
После создания на правой панели окна выбираем Manage Server, ставим указатель на Server Operations > Start > Apply
Выбираем Manage Data вкладку Net Service Names ставим указатель на пункт Load > Browse (указываем используемый файл tnsnames.ora) > Execute
После окончания настроек необходимо не забывать сохранить новые настройки File > Save Network Configuration
Удаление Oracle Names Server
Для удаления ONS необходимо :
1. Ввести команду REORDER_NS {onames_server}{domain}
NAMESCTL> REORDER_NS {onames_server}{domain}
2. Остановить ONS
NAMESCTL> stop
3. Удалить файл names.ora из директории ORACLE_HOME/network/admin
4. Удалить файлы ckp*.ora из директории ORACLE_HOME/network/names
5. Перенастройте клиентскую часть соответствующим образом
Содержимое конфигурационных файлов:
Names.ora
NAMES.SERVER_NAME = testserver
NAMES.ADDRESSES =
(ADDRESS = (PROTOCOL = TCP)(HOST = testhost)(PORT = 1621))
Ckpdom.ora
SERVER1. = (DATA_LIST=(FLAGS=0x1)(TTL=86400)
(DATA=(TYPE=a.smd.)(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(Host = ***.**.**.**)(Port = 1521)) (CONNECT_DATA = (SID = NEWDB))) )
)
SERVER2. = (DATA_LIST=(FLAGS=0x1)(TTL=86400)
(DATA=(TYPE=a.smd.)(DESCRIPTION=(SOURCE_ROUTE=OFF)(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=**.**.**.**)(PORT=1521)))(CONNECT_DATA=(SID=NEWDB2)(SERVER=DEDICATED))) )
)
Cktop.ora
. = (DATA_LIST=(FLAGS=0x11)
(DATA=(TYPE=ns.smd.)(NAME=testserver.) )
)
testserver. = (DATA_LIST=(FLAGS=0x209)
(DATA=(TYPE=a.smd.)(ADDRESS = (PROTOCOL = TCP)(HOST = testhost)(PORT = 1621)) )
(DATA=(TYPE=tos.npd.omd.)(CTEXT=ORACLE_NAMESERVER) )
(DATA=(TYPE=host.nm.omd.)(TEXT=testhost.test.ru) )
)
Содержимое конфигурационных файлов клиентской стороны:
Sqlnet.ora
NAMES.PREFERRED_SERVERS =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = **.**.**.**)(PORT = 1621))
)
NAMES.DIRECTORY_PATH=(ONAMES)
2. Создание Names Server :
Каким образом будет создан ONS зависит от того, как вы хотите хранить информацию о региональных базах данных. Возможно хранение информации:
- в БД доступной ONS. Информация хранится в БД и в ONS чекпоинт файлах. Если БД недоступна используются чекпоинт файлы.
- в чекпоинт файлах и реплицируется с другими ONS.
По умолчанию чсекпоинт файлы хранятся в директории $ORACLE_HOME/network/names. В UNIX среде папка names по умолчанию отсутствует. Необходимо вручную создавать данную папку.
Чекпоинт файлы:
ckpcfg.ora Contains a backup copy of the configuration parameters stored in the ONRS_CONFIG table in the region database
ckpcch.ora Contains all current non-authoritative data that has been retrieved and cached from remote regions and has not expired yet
ckptop.ora and ckpdom.ora These files contain all authoritative data for the region. The ckptop.ora file defines the domains in the administrative region and the Oracle Names servers authoritative for each domain. The ckdom.ora file contains the authoritative data for each domain.
If the Oracle Names server uses a region database, then these files serve as a copy of the region data in the tables as of the last reload. This data is used when the Oracle Names server starts if the database is inaccessible.
If the Oracle Names server is not using the database, these files are its only persistent storage and are loaded by the Oracle Names server at startup. The Oracle Names server considers the data in these file to be current if there are no other Oracle Names servers in the region. The files are kept current as of the last update to the region.
В случае запуска ONS без никаких настроек по умолчанию имя дается в формате ONAMES_host. Протокол по умолчанию TCP/IP, порт 1575.
Хранение информации в таблицах БД :
Шаг 1. Конфигурация сервера баз данных
1. Войти в БД под пользователем SYSTEM
SQL> connect SYSTEM/password
2. Создайте пользователя, который может соединяться к таблицам БД
CREATE USER user IDENTIFIED BY password
DEFAULT TABLESPACE users
TEMPORARY TABLESPACE temp;
GRANT CREATE SESSION TO user;
GRANT RESOURCE users TO user;
GRANT CREATE SYNONYM TO user;
3. Запустите скрипт namesini.sql расположенный $ORACLE_HOME/network/admin (UNIX) и ORACLE_HOME\network\admin\names (Windows NT)
SQL> CONNECT user/password
SQL>@ORACLE_HOME\network\admin\names\namesini.sql
Создание Oracle Names Server
1. Запускаем Oracle Net Manager
$ORACLE_HOME/bin/netmgr
Ставим указатель на ORACLE NAMES SERVERS. В пункте меню Edit выбираем Create.
После создания на правой панели окна выбираем Manage Server, ставим указатель на Server Operations > Start > Apply
Выбираем Manage Data вкладку Net Service Names ставим указатель на пункт Load > Browse (указываем используемый файл tnsnames.ora) > Execute
После окончания настроек необходимо не забывать сохранить новые настройки File > Save Network Configuration
Удаление Oracle Names Server
Для удаления ONS необходимо :
1. Ввести команду REORDER_NS {onames_server}{domain}
NAMESCTL> REORDER_NS {onames_server}{domain}
2. Остановить ONS
NAMESCTL> stop
3. Удалить файл names.ora из директории ORACLE_HOME/network/admin
4. Удалить файлы ckp*.ora из директории ORACLE_HOME/network/names
5. Перенастройте клиентскую часть соответствующим образом
Содержимое конфигурационных файлов:
Names.ora
NAMES.SERVER_NAME = testserver
NAMES.ADDRESSES =
(ADDRESS = (PROTOCOL = TCP)(HOST = testhost)(PORT = 1621))
Ckpdom.ora
SERVER1. = (DATA_LIST=(FLAGS=0x1)(TTL=86400)
(DATA=(TYPE=a.smd.)(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(Host = ***.**.**.**)(Port = 1521)) (CONNECT_DATA = (SID = NEWDB))) )
)
SERVER2. = (DATA_LIST=(FLAGS=0x1)(TTL=86400)
(DATA=(TYPE=a.smd.)(DESCRIPTION=(SOURCE_ROUTE=OFF)(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=**.**.**.**)(PORT=1521)))(CONNECT_DATA=(SID=NEWDB2)(SERVER=DEDICATED))) )
)
Cktop.ora
. = (DATA_LIST=(FLAGS=0x11)
(DATA=(TYPE=ns.smd.)(NAME=testserver.) )
)
testserver. = (DATA_LIST=(FLAGS=0x209)
(DATA=(TYPE=a.smd.)(ADDRESS = (PROTOCOL = TCP)(HOST = testhost)(PORT = 1621)) )
(DATA=(TYPE=tos.npd.omd.)(CTEXT=ORACLE_NAMESERVER) )
(DATA=(TYPE=host.nm.omd.)(TEXT=testhost.test.ru) )
)
Содержимое конфигурационных файлов клиентской стороны:
Sqlnet.ora
NAMES.PREFERRED_SERVERS =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = **.**.**.**)(PORT = 1621))
)
NAMES.DIRECTORY_PATH=(ONAMES)
Ярлыки:
Oracle 9i
ORA-02298: cannot validate
Для нахождения строк в таблице где строиться Foreign Key constraint, при котором возникает ошибка ORA-02298: cannot validate (SCOTT.EMP_FK_TEST) - parent keys not found необходимо выполнить следующие шаги:
1) Создать таблицу куда будут записываться все строки, для которых возникла ошибка
create table exceptions(row_id rowid,
owner varchar2(30),
table_name varchar2(30),
constraint varchar2(30));
2) Попробовать создать foreign key constraint с ключевыми словами "exceptions into exceptions"
Например,
ALTER TABLE emp ADD (
CONSTRAINT emp_fk_test
FOREIGN KEY (EMP_FK_T1)
REFERENCES dept (ID)
exceptions into exceptions);
3) Посмотреть все записи , для которых возникает ошибка
select * from exceptions;
4) Если удалить эти записи из дочерней таблицы ошибка исчезнет
Например,
delete from EMP where rowid in (select row_id from xxx_exceptions)
1) Создать таблицу куда будут записываться все строки, для которых возникла ошибка
create table exceptions(row_id rowid,
owner varchar2(30),
table_name varchar2(30),
constraint varchar2(30));
2) Попробовать создать foreign key constraint с ключевыми словами "exceptions into exceptions"
Например,
ALTER TABLE emp ADD (
CONSTRAINT emp_fk_test
FOREIGN KEY (EMP_FK_T1)
REFERENCES dept (ID)
exceptions into exceptions);
3) Посмотреть все записи , для которых возникает ошибка
select * from exceptions;
4) Если удалить эти записи из дочерней таблицы ошибка исчезнет
Например,
delete from EMP where rowid in (select row_id from xxx_exceptions)
Ярлыки:
Oracle 10g
понедельник, 16 ноября 2009 г.
Log Miner
Connected as SYS
SQL> insert into scott.emp values(7979,'ADAM','MANAGER',7782,to_date('03.12.1981','dd.mm.yyyy'),5000,1200,10);
1 row inserted
SQL> insert into scott.emp values(7978,'KELLY','MANAGER',7784,to_date('03.12.1982','dd.mm.yyyy'),5000,1200,10);
1 row inserted
SQL> commit;
Commit complete
SQL> select * from v$logfile;
GROUP# STATUS TYPE MEMBER IS_RECOVERY_DEST_FILE
---------- ------- ------- -------------------------------------------------------------------------------- ---------------------
3 ONLINE C:\ORACLE\PRODUCT\ORADATA\SHARP\REDO03.LOG NO
2 ONLINE C:\ORACLE\PRODUCT\ORADATA\SHARP\REDO02.LOG NO
1 ONLINE C:\ORACLE\PRODUCT\ORADATA\SHARP\REDO01.LOG NO
SQL> EXECUTE DBMS_LOGMNR.ADD_LOGFILE(LOGFILENAME => 'C:\ORACLE\PRODUCT\ORADATA\SHARP\REDO03.LOG', OPTIONS => DBMS_LOGMNR.NEW);
PL/SQL procedure successfully completed
SQL> EXECUTE DBMS_LOGMNR.ADD_LOGFILE(LOGFILENAME => 'C:\ORACLE\PRODUCT\ORADATA\SHARP\REDO02.LOG', OPTIONS => DBMS_LOGMNR.NEW);
PL/SQL procedure successfully completed
SQL> EXECUTE DBMS_LOGMNR.ADD_LOGFILE(LOGFILENAME => 'C:\ORACLE\PRODUCT\ORADATA\SHARP\REDO01.LOG', OPTIONS => DBMS_LOGMNR.NEW);
PL/SQL procedure successfully completed
SQL> EXECUTE DBMS_LOGMNR.START_LOGMNR(OPTIONS => DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG);
PL/SQL procedure successfully completed
select * from v$logmnr_contents where username='SCOTT' and table_name='EMP';
EXECUTE DBMS_LOGMNR.END_LOGMNR();
SQL> insert into scott.emp values(7979,'ADAM','MANAGER',7782,to_date('03.12.1981','dd.mm.yyyy'),5000,1200,10);
1 row inserted
SQL> insert into scott.emp values(7978,'KELLY','MANAGER',7784,to_date('03.12.1982','dd.mm.yyyy'),5000,1200,10);
1 row inserted
SQL> commit;
Commit complete
SQL> select * from v$logfile;
GROUP# STATUS TYPE MEMBER IS_RECOVERY_DEST_FILE
---------- ------- ------- -------------------------------------------------------------------------------- ---------------------
3 ONLINE C:\ORACLE\PRODUCT\ORADATA\SHARP\REDO03.LOG NO
2 ONLINE C:\ORACLE\PRODUCT\ORADATA\SHARP\REDO02.LOG NO
1 ONLINE C:\ORACLE\PRODUCT\ORADATA\SHARP\REDO01.LOG NO
SQL> EXECUTE DBMS_LOGMNR.ADD_LOGFILE(LOGFILENAME => 'C:\ORACLE\PRODUCT\ORADATA\SHARP\REDO03.LOG', OPTIONS => DBMS_LOGMNR.NEW);
PL/SQL procedure successfully completed
SQL> EXECUTE DBMS_LOGMNR.ADD_LOGFILE(LOGFILENAME => 'C:\ORACLE\PRODUCT\ORADATA\SHARP\REDO02.LOG', OPTIONS => DBMS_LOGMNR.NEW);
PL/SQL procedure successfully completed
SQL> EXECUTE DBMS_LOGMNR.ADD_LOGFILE(LOGFILENAME => 'C:\ORACLE\PRODUCT\ORADATA\SHARP\REDO01.LOG', OPTIONS => DBMS_LOGMNR.NEW);
PL/SQL procedure successfully completed
SQL> EXECUTE DBMS_LOGMNR.START_LOGMNR(OPTIONS => DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG);
PL/SQL procedure successfully completed
select * from v$logmnr_contents where username='SCOTT' and table_name='EMP';
EXECUTE DBMS_LOGMNR.END_LOGMNR();
Ярлыки:
Oracle 10g
Способы включения SQL Trace
Нашел в интернете описание разных способов включения трассировки (не помню уже с какого сайта, так что извините что нет ссылки). Решил сюда выложить, чтобы в случае чего воспользоваться. Может кому то еще поможет...
Способ 1
SQL> alter session set sql_trace = true;
SQL> alter session set events '10046 trace name context forever, level';
0 Выключить трейс
1 Включить трейс. Аналог 0
4 + значения bind-переменных
8 Добавить в трейс информацию о wait
12 Комбинация уровней 4 и 8
SQL> exec sys.dbms_system.set_sql_trace_in_session(, , true);
SQL> exec sys.dbms_system.set_ev(, , 10046, , '');
Способ 2
init.ora - sql_trace = true
Способ 3
SQL> select p.spid, p.pid
2 from v$process p, v$session s
3 where p.addr = s.paddr
4 and s.sid = &sid;
Способ 4
SVRMGR> oradebug setospid
или
SVRMGR> oradebug setorapid
SVRMGR> oradebug event 10046 trace name context forever, level
Способ 5
CREATE OR REPLACE TRIGGER trace_login_trigger
AFTER logon ON DATABASE
BEGIN
IF (USER = '') THEN
EXECUTE IMMEDIATE 'ALTER SESSION SET EVENTS ''10046 trace name
context forever, level ''';
END IF;
END;
/
Способ 1
SQL> alter session set sql_trace = true;
SQL> alter session set events '10046 trace name context forever, level
0 Выключить трейс
1 Включить трейс. Аналог 0
4 + значения bind-переменных
8 Добавить в трейс информацию о wait
12 Комбинация уровней 4 и 8
SQL> exec sys.dbms_system.set_sql_trace_in_session(
SQL> exec sys.dbms_system.set_ev(
Способ 2
init
Способ 3
SQL> select p.spid, p.pid
2 from v$process p, v$session s
3 where p.addr = s.paddr
4 and s.sid = &sid;
Способ 4
SVRMGR> oradebug setospid
или
SVRMGR> oradebug setorapid
SVRMGR> oradebug event 10046 trace name context forever, level
Способ 5
CREATE OR REPLACE TRIGGER trace_login_trigger
AFTER logon ON DATABASE
BEGIN
IF (USER = '
EXECUTE IMMEDIATE 'ALTER SESSION SET EVENTS ''10046 trace name
context forever, level ''';
END IF;
END;
/
Ярлыки:
Oracle 9i
четверг, 12 ноября 2009 г.
Oracle VPD. Restrict column-level access to users
CONNECT sys/password AS SYSDBA
GRANT EXECUTE ON dbms_rls TO scott;
-- В этом примере ограничение видимости включаем к колонке SAL таблицы SCOTT.EMP для пользователя SYSTEM
-- Для начала проверим как отображаются данные под SYSTEM до включения политики
Connect system/manager
SQL> select * from scott.emp;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
7369 SMITH CLERK 7902 17.12.1980 800,00 20
7499 ALLEN SALESMAN 7698 20.02.1981 1600,00 300,00 30
7521 WARD SALESMAN 7698 22.02.1981 1250,00 500,00 30
7566 JONES MANAGER 7839 02.04.1981 2975,00 20
7654 MARTIN SALESMAN 7698 28.09.1981 1250,00 1400,00 30
7698 BLAKE MANAGER 7839 01.05.1981 2850,00 30
7782 CLARK MANAGER 7839 09.06.1981 2450,00 10
7788 SCOTT ANALYST 7566 19.04.1987 3000,00 20
7839 KING PRESIDENT 17.11.1981 5000,00 10
7844 TURNER SALESMAN 7698 08.09.1981 1500,00 0,00 30
7876 ADAMS CLERK 7788 23.05.1987 1100,00 20
7900 JAMES CLERK 7698 03.12.1981 950,00 30
7902 FORD ANALYST 7566 03.12.1981 3000,00 20
7934 MILLER CLERK 7782 23.01.1982 1300,00 10
14 rows selected
-- Создать функцию ограничения доступа для пользователя SYSTEM
-- Заходим под SCOTT и создаем функцию для политики безопасности
connect scott/tiger
CREATE OR REPLACE FUNCTION pf_job (oowner IN VARCHAR2, ojname IN VARCHAR2)
RETURN VARCHAR2 AS
con VARCHAR2 (200);
BEGIN
con := 'USER != ''SYSTEM''';
RETURN (con);
END pf_job;
/
-- Создаем политику ограничивающий видимость данных в колонке SAL таблицы SCOTT.SAL
-- для пользователей указанных в функции pf_job
BEGIN
DBMS_RLS.ADD_POLICY (object_schema => 'scott',
object_name => 'emp',
policy_name => 'sp_job',
function_schema => 'scott',
policy_function => 'pf_job',
sec_relevant_cols => 'sal',
sec_relevant_cols_opt=>dbms_rls.ALL_ROWS);
END;
/
-- После включения ограничения видимости, для пользователя SYSTEM не видны данные колонки SAL
Connect system/manager
SQL> select * from scott.emp;
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
----- ---------- --------- ----- ----------- ---------- --------- ------
7369 SMITH CLERK 7902 17.12.1980 20
7499 ALLEN SALESMAN 7698 20.02.1981 300,00 30
7521 WARD SALESMAN 7698 22.02.1981 500,00 30
7566 JONES MANAGER 7839 02.04.1981 20
7654 MARTIN SALESMAN 7698 28.09.1981 1400,00 30
7698 BLAKE MANAGER 7839 01.05.1981 30
7782 CLARK MANAGER 7839 09.06.1981 10
7788 SCOTT ANALYST 7566 19.04.1987 20
7839 KING PRESIDENT 17.11.1981 10
7844 TURNER SALESMAN 7698 08.09.1981 0,00 30
7876 ADAMS CLERK 7788 23.05.1987 20
7900 JAMES CLERK 7698 03.12.1981 30
7902 FORD ANALYST 7566 03.12.1981 20
7934 MILLER CLERK 7782 23.01.1982 10
14 rows selected
Ярлыки:
Oracle 10g
Подписаться на:
Сообщения (Atom)