Oracle_scripte/Tanel/setup/create_xviews.sql
2014-09-17 13:23:48 +02:00

75 lines
2.3 KiB
SQL

--------------------------------------------------------------------------------
--
-- Name: create_xviews.sql
-- Purpose: Create views, grants and synonyms for X$ fixed tables
-- to be accessible for all users
-- Usage: Run from sqlplus as SYS: @create_xviews.sql
--
--
-- Author: (c) Tanel Poder http://www.tanelpoder.com
--
-- Other: WARNING!!! You probably don't want to create X$ views for all
-- X$ tables in prodution environments!
-- Some X$ tables may be dangerous for your databases performance
-- and stability.
--
-- Also you may have issues with dropping those views after a database
-- upgrade (ORA-600s when dropping them etc)
-- So if you have such views, you should drop them before upgrade
-- and recreate afterwards.
--
-- This script will not overwrite any existing X_$% SYS objects as
-- those may be required by other performance tools
--
--------------------------------------------------------------------------------
@saveset
set pagesize 0
set linesize 500
set trimspool on
set feedback off
set termout off
set echo off
PROMPT Have you read the WARNING section in this scripts header?!
PROMPT Press enter to create views for X$ tables or CTRL+C to cancel...
spool create_xviews.tmp
select 'create view '||replace(name,'X$','X_$')||' as select * from '||name||';'
from (
select name from v$fixed_table where name like 'X$%'
minus
select replace(object_name,'X_$','X$') from dba_objects where owner = 'SYS' and object_name like 'X\_$%' escape '\'
);
select 'grant select on SYS.'||replace(name,'X$','X_$')||' to public;'
from (
select name from v$fixed_table where name like 'X$%'
minus
select replace(object_name,'X_$','X$') from dba_objects where owner = 'SYS' and object_name like 'X\_$%' escape '\'
);
select 'create public synonym '||name||' for SYS.'||replace(name,'X$','X_$')||';'
from (
select name from v$fixed_table where name like 'X$%'
minus
select replace(object_name,'X_$','X$') from dba_objects where owner = 'SYS' and object_name like 'X\_$%' escape '\'
);
spool create_xviews.lst
set termout on echo on feedback on
@create_xviews.tmp
host rm create_xviews.tmp
host del create_xviews.tmp
@loadset
prompt Done.