How to Drop/Rename Standby Redolog file in Oracle 11g
While performing the dataguard Broker, we need to drop the standby database while switchover the standby . As it seems an easy task but it is bit tricky . Below are the steps to drop the redolog file from standby database :
On Standby Database :
SQL> select member,type from v$logfile;
MEMBER TYPE
---------------------------------- -----------
D:\APP\STANDBY\ORADATA\REDO03.LOG ONLINE
D:\APP\STANDBY\ORADATA\REDO02.LOG ONLINE
D:\APP\STANDBY\ORADATA\REDO01.LOG ONLINE
D:\APP\STANDBY\ORADATA\REDO04.LOG STANDBY
D:\APP\STANDBY\ORADATA\REDO05.LOG STANDBY
Here,we have to drop the two standby redolog file .
SQL> alter database drop standby logfile group 4;
alter database drop standby logfile group 4
*
ERROR at line 1:
ORA-01156: recovery or flashback in progress may need access to files
Now to solve this issue we have cancel the managed recovery session and set "standby_file_management" to manual and drop the standby redolog file as
SQL> alter database recover managed standby database cancel ;
Database altered.
SQL> alter system set standby_file_management='MANUAL' ;
System altered.
SQL>alter database drop standby logfile group 4;
Database altered.
SQL>alter database drop standby logfile group 5;
Database altered.
If the status of standby redolog show the "clearing_current" then we cannot drop "clearing_current" status logs,and for that we have to sync with Primary and clear the log first before dropping as
SQL> alter database clear logfile group n;
Once the standby redologs are dropped then again back to recover the standby.
SQL>alter system set standby_file_management='AUTO' ;
System altered.
SQL> alter database recover managed standby database disconnect from session ;
Adding a standby/Redo log file to standby database:
1. Check the member present in standby database.
SQL> select member from v$logfile;
MEMBER
----------------------------------
D:\STANDB1\REDO03.LOG
D:\STANDB1\REDO02.LOG
D:\STANDB1\REDO01.LOG
2. Cancel the recovery Process.
SQL> alter database recover managed standby database cancel;
Database altered.
3. Check the standby_file_management parameter and set the parameter to MANUAL.
SQL> show parameter standby_file_
NAME TYPE VALUE
------------------------------------ ----------- ------
standby_file_management string AUTO
SQL> alter system set standby_file_management=manual scope=both;
System altered.
SQL> show parameter standby_file_
NAME TYPE VALUE
------------------------------------ ----------- ------
standby_file_management string MANUAL
4. Add Redo Logfiles in Standby Database.
SQL> alter database add logfile group 4 'D:\STANDB1\REDO04.LOG' size 100M;
Database altered.
SQL> alter database add logfile group 5 'D:\STANDB1\REDO05.LOG' size 100M;
Database altered.
SQL> alter database add logfile group 6 'D:\STANDB1\REDO06.LOG' size 100M;
SQL> alter database add standby logfile group 7 'D:\STANDB1\STDREDO07.LOG' size 100M;
Database altered.
SQL> alter database add standby logfile group 8 'D:\STANDB1\STDREDO08.LOG' size 100M;
Database altered.
SQL> alter database add standby logfile group 9 'D:\STANDB1\STdREDO09.LOG' size 100M;
Database altered.
SQL> alter database add standby logfile group 10 'D:\STANDB1\STdREDO10.LOG' size 100M;
Database altered.
Wednesday, February 19, 2014
Monday, February 17, 2014
Oracle Active Data Guard Or Oracle GoldenGate
Oracle Active Data Guard and Oracle GoldenGate
Oracle Active Data Guard and Oracle Golden Gate are strategic capabilities within Oracle's software portfolio. While they generally fall into the category of replication technologies, each has a very different area of focus.
Oracle Active Data Guard provides the best data protection and availability for Oracle Database in the simplest most economical manner by maintaining an exact physical replica of the production copy at a remote location that is open read-only while replication is active. Active Data Guard eliminates compromise inherent in storage remote-mirroring or logical replication solutions though deep integration with Oracle Database and through the simplicity achieved by complete focus on providing real-time data protection and availability for Oracle data.
GoldenGate is an advanced logical replication product that supports multi-master replication, hub and spoke deployment and data transformation, providing customers very flexible options to address the complete range of replication requirements. GoldenGate also supports replication between a broad range of heterogeneous hardware platforms and database management systems. Unlike Active Data Guard, GoldenGate captures primary database changes by reading redo records from disk, transforming those records into a platform independent trail file format, and transmitting the trail file to the target database. GoldenGate maintains a logical replica by converting the trail file into SQL and applying SQL to the target database. The target database is open read-write while synchronization occurs.
When do I use Oracle Active Data Guard?
Use Active Data Guard where emphasis is on simplicity, best data protection, data availability and highest performance:
When do I use Oracle GoldenGate?
Use Oracle GoldenGate when a replica database must be open read-write while replication is active, or for advanced replication requirements beyond what is addressed by Active Data Guard:
When do I use Active Data Guard and GoldenGate Together
Active Data Guard and GoldenGate are not mutually exclusive. The following examples of high availability architectures that include the simultaneous use of both technologies:
Reference links :
http://www.oracle.com/technetwork/database/features/availability/dataguardgoldengate-096557.html
Oracle Active Data Guard and Oracle Golden Gate are strategic capabilities within Oracle's software portfolio. While they generally fall into the category of replication technologies, each has a very different area of focus.
Oracle Active Data Guard provides the best data protection and availability for Oracle Database in the simplest most economical manner by maintaining an exact physical replica of the production copy at a remote location that is open read-only while replication is active. Active Data Guard eliminates compromise inherent in storage remote-mirroring or logical replication solutions though deep integration with Oracle Database and through the simplicity achieved by complete focus on providing real-time data protection and availability for Oracle data.
GoldenGate is an advanced logical replication product that supports multi-master replication, hub and spoke deployment and data transformation, providing customers very flexible options to address the complete range of replication requirements. GoldenGate also supports replication between a broad range of heterogeneous hardware platforms and database management systems. Unlike Active Data Guard, GoldenGate captures primary database changes by reading redo records from disk, transforming those records into a platform independent trail file format, and transmitting the trail file to the target database. GoldenGate maintains a logical replica by converting the trail file into SQL and applying SQL to the target database. The target database is open read-write while synchronization occurs.
When do I use Oracle Active Data Guard?
Use Active Data Guard where emphasis is on simplicity, best data protection, data availability and highest performance:
- Secure physical replication, standby database is open read-only, it is impossible to modify standby data independent of primary transactions
- Simplest, fastest, one-way replication of a complete Oracle Database. No requirements for supplemental logging or performance implications for tables having no primary key or unique index. Little if any performance tuning required at the standby database, the default configuration handles most workloads.
- No restrictions - Oracle Data Guard Redo Apply supports all Oracle features and transparently replicates all data and storage types, PL/SQL packages and DDL without special considerations
- Best data protection – Replication direct from memory isolates the standby from I/O corruption that can occur at the primary database. Detect silent lost-write corruption that can occur independently on primary or standby. Automatically detect and repair physical block corruption that can occur independently on primary or standby.
- Choice of synchronous with zero data loss, or asynchronous with near-zero data loss protection
- Simple to improve ROI by offloading read-only workload and/or backups to a synchronized physical standby
- Transparency of backups - an Oracle Data Guard primary and standby are physically exact copies of each other, RMAN backups are completely interchangeable
- Minimize planned downtime and risk using Data Guard standby; standby first patching, database rolling upgrades, and select platform migrations (see My Oracle Support Note 413484.1 for mixed platform combinations)
- A single command will convert a physical standby database as a test system open read-write. A second command will convert it back to a physical standby database and resynchronize it with the primary; primary data is protected at all times.
- Integrated management of a complete configuration - Oracle Data Guard Broker command line or Oracle Enterprise Manager Cloud Control, integrated automatic database and client failover
When do I use Oracle GoldenGate?
Use Oracle GoldenGate when a replica database must be open read-write while replication is active, or for advanced replication requirements beyond what is addressed by Active Data Guard:
- Any requirement where the replica database must be open read-write while synchronizing with the primary database
- Any advanced replication requirements such as: multimaster and bidirectional replication, subset replication, many to one replication, cross endian replication, and data transformations
- Maintenance and migrations where zero downtime using bi-directional replication is required
- Application upgrades that modify back-end database objects. GoldenGate maintains availability and reduces planned downtime by replicating between old and new versions of the database (the user implements mapping between differences in database objects in old and new versions of the database
- Any cross platform migration not supported by Data Guard (e.g. cross endian platform migration)
- Any replication requirement where you replicate from a more recent version of Oracle Database to an earlier version of Oracle Database (e.g. from Oracle Database 11g to Oracle Database 10g)
When do I use Active Data Guard and GoldenGate Together
Active Data Guard and GoldenGate are not mutually exclusive. The following examples of high availability architectures that include the simultaneous use of both technologies:
- An Active Data Guard standby is utilized for disaster protection and database rolling upgrades for a mission critical OLTP database. GoldenGate is used to extract data from the Data Guard primary database (or from the standby database using GoldenGate ALO mode) for ETL update of an enterprise data warehouse.
- GoldenGate subset replication is used extract, transforms, and aggregate data from numerous data sources into a central operational data store (ODS). The ODS supports mission critical application systems that generate significant revenue for the company. An Active Data Guard standby database is used to protect the ODS, providing optimal data protection and availability.
- GoldenGate multi-master replication is utilized to synchronize several databases, each located in different geographies. Each GoldenGate copy has its own local synchronous Data Guard standby database that enables zero data loss failover should an outage occur. GoldenGate capture and apply processes are easily restarted on the new primary database following a failover since primary and standby are an exact, up-to-date replica of each other.
- Reducing planned downtime for various planned maintenance activities not supported by Data Guard – such as cross-endian platform migration or application upgrades that modify back-end database objects. In many cases customers wish to isolate a current mission critical production environment having a Data Guard primary and standby database from being impacted by the maintenance activity. A parallel environment (new primary and standby) is deployed on the new release or new platform and GoldenGate one-way or bi-directional replication is used to keep old and new environments synchronized. Production is moved to the new environment once sufficiently tested. GoldenGate can continue to replicate to the previous environment for fast fall-back until the stability of the new version is no longer in question, at which time the old environment can be de-commissioned.
Reference links :
http://www.oracle.com/technetwork/database/features/availability/dataguardgoldengate-096557.html
Thursday, February 6, 2014
TOAD USER SCRIPT
SCRIPT TO CREATE TOAD USER :
I really had to struggle a lot to get this script.Creating these objects as toad user will allow u to gathers stats for disk ,data file and table spaces growth and trending.
This scipt need to be run as toad user to create all the tables & ddl needed for toad user and space management graphs.
REM This script was created by version 10.6.1.3 of the TOAD Server Side Objects Wizard
DEFINE OWNER = 'TOAD'
Prompt ============================================================================
Prompt Creating the TOAD User
Prompt ============================================================================
Prompt Creating the TOAD User
CREATE USER TOAD IDENTIFIED BY toad1234
DEFAULT TABLESPACE TOAD
TEMPORARY TABLESPACE TEMP
QUOTA UNLIMITED ON TOAD;
Prompt Granting System Privileges to TOAD
Grant UNLIMITED TABLESPACE to TOAD;
Grant ALTER SESSION to TOAD;
Grant CREATE SEQUENCE to TOAD;
Grant CREATE SESSION to TOAD;
Grant CREATE SYNONYM to TOAD;
Grant CREATE TRIGGER to TOAD;
Grant CREATE PUBLIC SYNONYM to TOAD;
Grant CREATE TABLE to TOAD;
Grant CREATE VIEW to TOAD;
Grant CREATE PROCEDURE to TOAD;
Prompt ============================================================================
Prompt Granting CREATE PUBLIC SYNONYM and DROP PUBLIC SYNONYM
Prompt ============================================================================
Prompt Granting CREATE PUBLIC SYNONYM to TOAD
GRANT CREATE PUBLIC SYNONYM TO TOAD;
Prompt Granting DROP PUBLIC SYNONYM to TOAD
GRANT DROP PUBLIC SYNONYM TO TOAD;
Prompt ============================================================================
Prompt Adding necessary grants to TOAD
Prompt ============================================================================
Prompt Granting SELECT ANY DICTIONARY to TOAD
GRANT SELECT ANY DICTIONARY TO &&OWNER;
Prompt ============================================================================
Prompt Granting EXECUTE ANY PROCEDURE to %s (Used for the Profiler)
Prompt ============================================================================
Prompt Granting EXECUTE ANY PROCEDURE to TOAD (Used for the Profiler)
GRANT EXECUTE ANY PROCEDURE TO TOAD;
Prompt ============================================================================
Prompt Granting CREATE ROLE
Prompt ============================================================================
Prompt Granting CREATE ROLE to TOAD (Used for Team Coding)
GRANT CREATE ROLE TO TOAD;
Prompt ============================================================================
Prompt Granting CREATE VIEW
Prompt ============================================================================
Prompt Granting CREATE VIEW to TOAD
GRANT CREATE VIEW TO TOAD;
Prompt ============================================================================
Prompt Connecting as TOAD
Prompt ============================================================================
Prompt Connecting as TOAD
CONNECT TOAD/toad1234@QPDEV_BV
Prompt
Prompt ============================================================================
Prompt Creating TOAD Profiler Objects in TOAD schema
Prompt ============================================================================
DEFINE tablespace_info = ' TABLESPACE TOAD'
DEFINE ALLT = DBA_TRIGGERS
DEFINE ALLS = DBA_SOURCE
Prompt Creating table PLSQL_PROFILER_RUNS
CREATE TABLE &&OWNER..plsql_profiler_runs
(
runid NUMBER primary key, -- unique run identifier, from plsql_profiler_runnumber
related_run NUMBER, -- runid of related run (for client-server correlation)
run_owner VARCHAR2(32), -- user that executed the procedure
run_proc VARCHAR2(256), -- procedure that was executed
run_date DATE, -- start time of run
run_comment VARCHAR2(2047), -- user provided comment for this run
run_total_time NUMBER, -- elapsed time for this run
run_system_info VARCHAR2(2047), -- currently unused
run_comment1 VARCHAR2(256), -- additional comment
spare1 VARCHAR2(256) -- unused
)
&&tablespace_info;
Prompt Adding comment to PLSQL_PROFILER_RUNS
COMMENT ON TABLE &&OWNER..plsql_profiler_runs IS
'Run-specific information for the PL/SQL profiler';
Prompt Creating table PLSQL_PROFILER_UNITS
CREATE TABLE &&OWNER..plsql_profiler_units
(
runid NUMBER references &&OWNER..plsql_profiler_runs ON DELETE cascade,
unit_number NUMBER, -- internally generated library unit #
unit_type VARCHAR2(32), -- library unit type
unit_owner VARCHAR2(32), -- library unit owner name
unit_name VARCHAR2(32), -- library unit name
unit_timestamp DATE,
-- timestamp on library unit, can be used to detect changes to unit between runs
total_time NUMBER DEFAULT 0 NOT NULL,
spare1 NUMBER, -- unused
spare2 NUMBER, -- unused
primary key (runid, unit_number)
)
&&tablespace_info;
Prompt Adding comment to PLSQL_PROFILER_UNITS
COMMENT ON TABLE &&OWNER..plsql_profiler_units IS
'Information about each library unit in a run';
Prompt Creating table PLSQL_PROFILER_DATA
CREATE TABLE &&OWNER..plsql_profiler_data
(
runid NUMBER, -- unique (generated) run identifier
unit_number NUMBER, -- internally generated library unit #
line# NUMBER NOT NULL, -- line number in unit
text VARCHAR2(4000), -- source for the line
total_occur NUMBER, -- number of times line was executed
total_time NUMBER, -- total time spent executing line
min_time NUMBER, -- minimum execution time for this line
max_time NUMBER, -- maximum execution time for this line
spare1 NUMBER, -- unused
spare2 NUMBER, -- unused
spare3 NUMBER, -- unused
spare4 NUMBER, -- unused
primary key (runid, unit_number, line#),
foreign key (runid, unit_number) references &&OWNER..plsql_profiler_units ON DELETE CASCADE)
&&tablespace_info;
Prompt Adding comment to PLSQL_PROFILER_DATA
COMMENT ON TABLE &&OWNER..plsql_profiler_data IS
'Accumulated data from all profiler runs';
Prompt Creating package spec TOAD_PROFILER
CREATE OR REPLACE PACKAGE &&OWNER..toad_profiler is
procedure rollup_unit(run_number IN number, UnitNumber IN number,
UnitType IN varchar2, UnitOwner IN varchar2, UnitName IN varchar2);
procedure rollup_run(run_number IN number);
procedure rollup_all_runs;
end toad_profiler;
/
Prompt Creating package body TOAD_PROFILER
CREATE OR REPLACE PACKAGE BODY &&OWNER..toad_profiler is
-- compute the total time spent executing this unit - the sum of the
-- time spent executing lines in this unit (for this run)
procedure rollup_unit(run_number IN number, UnitNumber IN number,
UnitType IN varchar2, UnitOwner IN varchar2, UnitName IN varchar2) is
TYPE TSourceTable IS TABLE OF VARCHAR2(4000) INDEX BY BINARY_INTEGER;
SourceTable TSourceTable;
TriggerBody long;
FoundTriggerSource boolean;
Cnt number;
LnStart number;
LnEnd number;
Pos number;
vText varchar2(4000);
IsWrapped boolean;
TotalTime number;
-- Select the lines for the unit to find source code
cursor cLines(run_number number, UnitNumber number) is
select line# from plsql_profiler_data
where runid = run_number and unit_number = UnitNumber;
begin
select sum(total_time) into TotalTime
from plsql_profiler_data
where runid = run_number and unit_number = UnitNumber;
if TotalTime IS NULL then
TotalTime := 0;
end if;
update plsql_profiler_units set total_time = TotalTime
where runid = run_number and unit_number = UnitNumber;
-- Get trigger source into index-by table
if UnitType = 'TRIGGER' then
begin
FoundTriggerSource := True;
select trigger_body into TriggerBody
from dba_triggers where owner = UnitOwner and trigger_name = UnitName;
exception
when NO_DATA_FOUND then
FoundTriggerSource := False;
end;
if FoundTriggerSource then
Cnt := 1;
LnStart := 1;
loop
LnEnd := INSTR(TriggerBody, CHR(10), 1, Cnt);
if (LnEnd = 0) then
SourceTable(Cnt) := SubStr(TriggerBody, LnStart);
else
SourceTable(Cnt) := Substr(TriggerBody, LnStart, (LnEnd-LnStart));
end if;
LnStart := LnStart + (LnEnd-LnStart)+1;
Cnt := Cnt+1;
exit when (lnEnd = 0);
end loop;
end if;
-- see if the code is wrapped
else
begin
select upper(text) into vtext from dba_source s
where s.type = UnitType and s.owner = UnitOwner and
s.name = UnitName and s.line = 1;
IsWrapped := (INSTR(vText, ' WRAPPED') > 0);
exception
when NO_DATA_FOUND then
IsWrapped := False;
end;
end if;
-- Get the source for each line in unit
Cnt := 1;
for linerec in cLines(run_number, UnitNumber) loop
if UnitType = 'TRIGGER' then
if FoundTriggerSource then
vText := SourceTable(linerec.line#);
else
if Cnt = 1 then
vText := '<source unavailable>';
else
vText := null;
end if;
end if;
else
if IsWrapped then
if Cnt = 1 then
vText := '<wrapped>';
else
vText := null;
end if;
else
begin
select text into vtext from dba_source s
where s.type = UnitType and s.owner = UnitOwner and
s.name = UnitName and s.line = linerec.line#;
exception
when NO_DATA_FOUND then
vText := null;
end;
end if;
end if;
-- store the source line
update plsql_profiler_data d set d.text = vText
where d.runid = run_number and d.unit_number = UnitNumber and
d.line# = linerec.line#;
Cnt := Cnt+1;
end loop;
end rollup_unit;
-- rollup all units for the given run
procedure rollup_run(run_number IN number) is
tabpos number;
comment varchar2(2047);
proc varchar2(256 );
--
-- only select those units which have not been rolled up yet
cursor cunits(run_number number) is
select unit_number, unit_type, unit_owner, unit_name
from plsql_profiler_units
where runid = run_number and total_time = 0
order by unit_number asc;
begin
-- Fix Oracle's calling a 'PACKAGE' a 'PACKAGE SPEC'
update plsql_profiler_units set unit_type = 'PACKAGE'
where runid = run_number and unit_type like 'PACKAGE SPEC%';
-- parse the RUN_COMMENT column to get the procedure name
-- (note: this replaces the BI_PLSQL_PROFILER_RUNS trigger.
select run_proc, run_comment into proc, comment
from plsql_profiler_runs where runid = run_number;
if proc is null then
tabpos := INSTR(comment, CHR(8));
if tabpos > 0 THEN
proc := SUBSTR(comment, tabpos+1);
comment := SUBSTR(comment, 1, tabpos-1);
else
proc := 'ANONYMOUS BLOCK';
end if;
update plsql_profiler_runs
set run_owner = USER, run_proc = proc, run_comment = comment
where runid = run_number;
end if;
for unitrec in cunits(run_number) loop
rollup_unit(run_number, unitrec.unit_number, unitrec.unit_type,
unitrec.unit_owner, unitrec.unit_name);
end loop;
end rollup_run;
-- rollup all runs
procedure rollup_all_runs is
cursor crunid is
select runid from plsql_profiler_runs order by runid asc;
begin
for runidrec in crunid loop
rollup_run(runidrec.runid);
end loop crunid;
commit;
end rollup_all_runs;
end toad_profiler;
/
Prompt Creating sequence PLSQL_PROFILER_RUNNUMBER
CREATE SEQUENCE &&OWNER..plsql_profiler_runnumber START WITH 1 NOCACHE;
Prompt ============================================================================
Prompt Adding public synonyms for Profiler objects
Prompt ============================================================================
Prompt Creating public synonym PLSQL_PROFILER_DATA
CREATE OR REPLACE PUBLIC SYNONYM PLSQL_PROFILER_DATA FOR &&OWNER..PLSQL_PROFILER_DATA;
Prompt Creating public synonym PLSQL_PROFILER_UNITS
CREATE OR REPLACE PUBLIC SYNONYM PLSQL_PROFILER_UNITS FOR &&OWNER..PLSQL_PROFILER_UNITS;
Prompt Creating public synonym PLSQL_PROFILER_RUNS
CREATE OR REPLACE PUBLIC SYNONYM PLSQL_PROFILER_RUNS FOR &&OWNER..PLSQL_PROFILER_RUNS;
Prompt Creating public synonym PLSQL_PROFILER_RUNNUMBER
CREATE OR REPLACE PUBLIC SYNONYM PLSQL_PROFILER_RUNNUMBER FOR &&OWNER..PLSQL_PROFILER_RUNNUMBER;
Prompt Creating public synonym TOAD_PROFILER
CREATE OR REPLACE PUBLIC SYNONYM TOAD_PROFILER FOR &&OWNER..TOAD_PROFILER;
Prompt ============================================================================
Prompt Granting privileges to PUBLIC on Profiler objects
Prompt ============================================================================
Prompt Granting SELECT, INSERT, UPDATE, DELETE on PLSQL_PROFILER_DATA to PUBLIC
GRANT SELECT, INSERT, UPDATE, DELETE ON &&OWNER..PLSQL_PROFILER_DATA TO PUBLIC;
Prompt Granting SELECT, INSERT, UPDATE, DELETE on PLSQL_PROFILER_UNITS to PUBLIC
GRANT SELECT, INSERT, UPDATE, DELETE ON &&OWNER..PLSQL_PROFILER_UNITS TO PUBLIC;
Prompt Granting SELECT, INSERT, UPDATE, DELETE on PLSQL_PROFILER_RUNS to PUBLIC
GRANT SELECT, INSERT, UPDATE, DELETE ON &&OWNER..PLSQL_PROFILER_RUNS TO PUBLIC;
Prompt Granting SELECT on PLSQL_PROFILER_RUNNUMBER to PUBLIC
GRANT SELECT ON &&OWNER..PLSQL_PROFILER_RUNNUMBER TO PUBLIC;
Prompt Granting EXECUTE on TOAD_PROFILER to PUBLIC
GRANT EXECUTE ON &&OWNER..TOAD_PROFILER TO PUBLIC;
Prompt ============================================================================
Prompt Creating TOAD Security table
Prompt ============================================================================
Prompt Creating table TOAD.TOAD_RESTRICTIONS
CREATE TABLE TOAD.TOAD_RESTRICTIONS (
USER_NAME VARCHAR2(32) NOT NULL,
FEATURE VARCHAR2(20) NOT NULL,
CONSTRAINT TOAD_RES_PK
PRIMARY KEY ( FEATURE, USER_NAME ) )
TABLESPACE TOAD;
Prompt ============================================================================
Prompt Creating/Upgrading Team Coding objects
Prompt ============================================================================
DEFINE tablespace_info = ' TABLESPACE TOAD'
DEFINE tablespace_ind_info = ' TABLESPACE TOAD'
DEFINE TC_ADMIN = TC_ADMIN_ROLE
DEFINE TC_MGR = TC_MGR_ROLE
DEFINE TC_LDR = TC_LDR_ROLE
Prompt Creating role TC_ADMIN_ROLE
CREATE ROLE TC_ADMIN_ROLE;
Prompt Creating role TC_MGR_ROLE
CREATE ROLE TC_MGR_ROLE;
Prompt Creating role TC_LDR_ROLE
CREATE ROLE TC_LDR_ROLE;
/*
The table TC_MASK has a column called OBJECT_NAME, whose length is normally
set to 649 in order to accommodate a 2K block size on a pre-9i database. If you
have extremely long file paths, and your database allows you to increase the size of the
column, then you may wish to increase the size of this column after running this script,
by running:
ALTER TABLE TC_MASK MODIFY OBJECT_NAME VARCHAR2(2000);
*/
DEFINE path_length = 2000
Prompt Creating table TC_FILEEXT
CREATE TABLE &&OWNER..tc_fileext
(
vcs_objtype varchar2(20) NOT NULL,
vcs_objext varchar2(10) NOT NULL
)
&&tablespace_info
;
Prompt Adding primary key to TC_FILEEXT
ALTER table &&OWNER..tc_fileext
add primary key (vcs_objtype)
using index
&&tablespace_ind_info
;
Prompt Inserting procedure extension
INSERT INTO &&OWNER..tc_fileext
(vcs_objtype, vcs_objext)
VALUES ('PROCEDURE', 'PRC');
Prompt Inserting trigger extension
INSERT INTO &&OWNER..tc_fileext
(vcs_objtype, vcs_objext)
VALUES ('TRIGGER', 'TRG');
Prompt Inserting function extension
INSERT INTO &&OWNER..tc_fileext
(vcs_objtype, vcs_objext)
VALUES ('FUNCTION', 'FNC');
Prompt Inserting package extension
INSERT INTO &&OWNER..tc_fileext
(vcs_objtype, vcs_objext)
VALUES ('PACKAGE', 'PKS');
Prompt Inserting package body extension
INSERT INTO &&OWNER..tc_fileext
(vcs_objtype, vcs_objext)
VALUES ('PACKAGE BODY', 'PKB');
Prompt Inserting type extension
INSERT INTO &&OWNER..tc_fileext
(vcs_objtype, vcs_objext)
VALUES ('TYPE', 'TYP');
Prompt Inserting type body extension
INSERT INTO &&OWNER..tc_fileext
(vcs_objtype, vcs_objext)
VALUES ('TYPE BODY', 'TPB');
Prompt Inserting view extension
INSERT INTO &&OWNER..tc_fileext
(vcs_objtype, vcs_objext)
VALUES ('VIEW', 'VW');
Prompt Creating table TC_OBJSTATUS
CREATE TABLE &&OWNER..tc_objstatus
(
psl_object_id NUMBER ,
psl_object_type VARCHAR2(12) NOT NULL,
psl_object_owner VARCHAR2(30) NOT NULL,
psl_object_name VARCHAR2(2000) NOT NULL,
psl_checked_out VARCHAR2(1) NOT NULL,
psl_checked_out_by VARCHAR2(30) NOT NULL,
psl_check_out_timestamp DATE NOT NULL,
psl_check_in_timestamp DATE,
psl_frozen VARCHAR2(1) NOT NULL,
psl_frozen_by VARCHAR2(30),
psl_frozen_timestamp DATE,
psl_comments VARCHAR2(2000),
constraint tc_objstatus_pk
primary key (psl_object_id)
using index &&tablespace_ind_info
)
&&tablespace_info
;
Prompt Creating index TC_OBJSTATUS_NDX
CREATE UNIQUE index &&OWNER..tc_objstatus_ndx
on tc_objstatus (psl_object_id, psl_checked_out, psl_frozen, psl_checked_out_by)
&&tablespace_ind_info
;
Prompt Creating table TC_OBJSTATUS_VCS
CREATE TABLE &&OWNER..tc_objstatus_vcs
(
psl_object_id NUMBER NOT NULL,
project_id NUMBER,
filename VARCHAR2(2000),
locked_by VARCHAR2(255)
)
&&tablespace_info
;
Prompt Adding primary key to TC_OBJSTATUS_VCS
ALTER table &&OWNER..tc_objstatus_vcs
add constraint tc_objstatus_vcs_pk
primary key (psl_object_id)
using index &&tablespace_ind_info
;
Prompt Creating sequence TC_SCRIPT_ID
CREATE SEQUENCE &&OWNER..tc_script_id
INCREMENT BY -1
MINVALUE -2147483648
MAXVALUE -10
NOCYCLE
NOORDER
NOCACHE
;
Prompt Creating table TC_GROUP
CREATE TABLE &&OWNER..tc_group
(
project_id NUMBER NOT NULL,
project_name VARCHAR2(255) NOT NULL,
workdir VARCHAR2(2000),
creation_date DATE NOT NULL,
last_modified_date DATE,
author VARCHAR2(30),
checked_out INTEGER,
checked_out_timestamp DATE,
checked_out_by VARCHAR2(30),
checked_in_timestamp DATE,
vcp_project VARCHAR2(2000),
vcs_db VARCHAR2(2000),
frozen VARCHAR2(1) DEFAULT 'N',
frozen_by VARCHAR2(30),
frozen_timestamp DATE,
version VARCHAR2(6)
)
&&tablespace_info
;
Prompt Adding primary key to TC_GROUP
ALTER table &&OWNER..tc_group
add primary key (project_id)
using index &&tablespace_ind_info
;
Prompt Creating sequence TC_GROUP_ID
CREATE SEQUENCE &&OWNER..TC_GROUP_ID
INCREMENT BY 1
MINVALUE 1
MAXVALUE 2147483647
NOCYCLE
NOORDER
NOCACHE
;
Prompt Creating table TC_MASK
CREATE TABLE &&OWNER..tc_mask
(
project_id number NOT NULL,
object_name varchar2(&&path_length) NOT NULL,
object_type number NOT NULL,
schema_name varchar2(30) NOT NULL,
exclude number NOT NULL,
comments varchar2(1000)
)
&&tablespace_info
;
Prompt Adding primary key to TC_MASK
ALTER table &&OWNER..tc_mask
add constraint tc_mask_pk
primary key (project_id, object_name, object_type, schema_name, exclude)
using index &&tablespace_ind_info;
Prompt Creating table TC_USERMAPPING
CREATE TABLE &&OWNER..tc_usermapping
(
project_id number NOT NULL,
username varchar2(30),
schema varchar2(30)
)
&&tablespace_info
;
Prompt Creating table TC_CONFIG
CREATE TABLE &&OWNER..tc_config
(
options VARCHAR2(16),
set_working_directory VARCHAR2(255),
script_ext VARCHAR2(255),
vcs_vcp_name NUMBER,
vcs_db VARCHAR2(255),
vcs_sub_vcp VARCHAR2(255),
frozen VARCHAR2(1),
frozen_by VARCHAR2(30),
frozen_timestamp DATE,
version VARCHAR2(16)
)
&&tablespace_info
;
Prompt Inserting Config defaults
INSERT INTO &&OWNER..tc_config
(script_ext, vcs_vcp_name, frozen, version)
VALUES ('*.sql;', -1, 'N', '0060TOAD08500000');
Prompt Creating table TC_TIMESTAMP
CREATE TABLE &&OWNER..tc_timestamp (
tp_timestamp date,
project_timestamp date,
um_timestamp date
)
&&tablespace_info
;
Prompt Inserting null row into TC_TIMESTAMP
INSERT INTO &&OWNER..tc_timestamp
(tp_timestamp, project_timestamp, um_timestamp)
VALUES (NULL, NULL, NULL);
Prompt Creating trigger TC_TIMESTAMP_OBJSTATUS
CREATE OR REPLACE TRIGGER &&OWNER..tc_timestamp_objstatus
AFTER INSERT OR DELETE OR UPDATE
ON &&OWNER..tc_objstatus
REFERENCING OLD AS OLD NEW AS NEW
BEGIN
UPDATE &&OWNER..tc_timestamp
SET tp_timestamp = SYSDATE;
END;
/
Prompt Creating trigger TC_TIMESTAMP_MASK
CREATE OR REPLACE TRIGGER &&OWNER..tc_timestamp_mask
AFTER INSERT OR DELETE OR UPDATE
ON &&OWNER..tc_mask
REFERENCING OLD AS OLD NEW AS NEW
BEGIN
UPDATE &&OWNER..tc_timestamp
SET project_timestamp = SYSDATE;
END;
/
Prompt Creating trigger TC_TIMESTAMP_GROUP
CREATE OR REPLACE TRIGGER &&OWNER..tc_timestamp_group
AFTER INSERT OR DELETE OR UPDATE
ON &&OWNER..tc_group
REFERENCING OLD AS OLD NEW AS NEW
BEGIN
UPDATE &&OWNER..tc_timestamp
SET project_timestamp = SYSDATE;
END;
/
Prompt Creating trigger TC_TIMESTAMP_USERMAPPING
CREATE OR REPLACE TRIGGER &&OWNER..tc_timestamp_usermapping
AFTER INSERT OR UPDATE OR DELETE
ON &&OWNER..tc_usermapping
REFERENCING NEW AS NEW OLD AS OLD
BEGIN
UPDATE &&OWNER..tc_timestamp
SET um_timestamp = SYSDATE;
END;
/
Prompt Creating trigger TC_DELETE_GROUP
CREATE OR REPLACE TRIGGER &&OWNER..tc_delete_group
BEFORE DELETE
ON &&OWNER..tc_group
REFERENCING OLD AS OLD NEW AS NEW
FOR EACH ROW
BEGIN
DELETE FROM &&OWNER..tc_mask
WHERE project_id = :OLD.project_id;
DELETE FROM &&OWNER..tc_usermapping
WHERE project_id = :OLD.project_id;
DELETE FROM &&OWNER..tc_objstatus_vcs
WHERE project_id = :OLD.project_id;
/* the tc_delete_obj trigger (below) takes care of the tc_objstatus table */
END;
/
Prompt Creating trigger TC_DELETE_OBJ
CREATE OR REPLACE TRIGGER &&OWNER..tc_delete_obj
BEFORE DELETE
ON &&OWNER..tc_objstatus_vcs
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
begin
DELETE FROM &&OWNER..tc_objstatus
WHERE psl_object_id = :OLD.psl_object_id;
end;
/
SET DEFINE ON
Prompt Granting SELECT, UPDATE on TC_FILEEXT to PUBLIC
GRANT SELECT, UPDATE ON &&OWNER..TC_FILEEXT TO PUBLIC;
Prompt Granting SELECT, INSERT, UPDATE, DELETE on TC_OBJSTATUS to PUBLIC
GRANT SELECT, INSERT, UPDATE, DELETE ON &&OWNER..TC_OBJSTATUS TO PUBLIC;
Prompt Granting SELECT, INSERT, UPDATE, DELETE on TC_OBJSTATUS_VCS to PUBLIC
GRANT SELECT, INSERT, UPDATE, DELETE ON &&OWNER..TC_OBJSTATUS_VCS TO PUBLIC;
Prompt Granting SELECT on TC_GROUP_ID to PUBLIC
GRANT SELECT ON &&OWNER..TC_GROUP_ID TO PUBLIC;
Prompt Granting SELECT on TC_GROUP to PUBLIC
GRANT SELECT ON &&OWNER..TC_GROUP TO PUBLIC;
Prompt Granting SELECT on TC_MASK to PUBLIC
GRANT SELECT ON &&OWNER..TC_MASK TO PUBLIC;
Prompt Granting SELECT, INSERT, UPDATE, DELETE on TC_USERMAPPING to PUBLIC
GRANT SELECT, INSERT, UPDATE, DELETE ON &&OWNER..TC_USERMAPPING TO PUBLIC;
Prompt Granting SELECT on TC_CONFIG to PUBLIC
GRANT SELECT ON &&OWNER..TC_CONFIG TO PUBLIC;
Prompt Granting SELECT, INSERT, UPDATE, DELETE on TC_TIMESTAMP to PUBLIC
GRANT SELECT, INSERT, UPDATE, DELETE ON &&OWNER..TC_TIMESTAMP TO PUBLIC;
Prompt Granting SELECT on TC_SCRIPT_ID to PUBLIC
GRANT SELECT ON &&OWNER..TC_SCRIPT_ID TO PUBLIC;
DEFINE TC_ADM = TC_ADMIN_ROLE
Prompt Granting SELECT, UPDATE on TC_FILEEXT to &&TC_ADMIN
GRANT SELECT, UPDATE ON &&OWNER..TC_FILEEXT TO &&TC_ADMIN;
Prompt Granting SELECT, INSERT, UPDATE, DELETE on TC_OBJSTATUS to &&TC_ADMIN
GRANT SELECT, INSERT, UPDATE, DELETE ON &&OWNER..TC_OBJSTATUS TO &&TC_ADMIN;
Prompt Granting SELECT, INSERT, UPDATE, DELETE on TC_OBJSTATUS_VCS to &&TC_ADMIN
GRANT SELECT, INSERT, UPDATE, DELETE ON &&OWNER..TC_OBJSTATUS_VCS TO &&TC_ADMIN;
Prompt Granting SELECT on TC_GROUP_ID to &&TC_ADMIN
GRANT SELECT ON &&OWNER..TC_GROUP_ID TO &&TC_ADMIN;
Prompt Granting SELECT, INSERT, UPDATE, DELETE on TC_GROUP to &&TC_ADMIN
GRANT SELECT, INSERT, UPDATE, DELETE ON &&OWNER..TC_GROUP TO &&TC_ADMIN;
Prompt Granting SELECT, INSERT, UPDATE, DELETE on TC_MASK to &&TC_ADMIN
GRANT SELECT, INSERT, UPDATE, DELETE ON &&OWNER..TC_MASK TO &&TC_ADMIN;
Prompt Granting SELECT, INSERT, UPDATE, DELETE on TC_USERMAPPING to &&TC_ADMIN
GRANT SELECT, INSERT, UPDATE, DELETE ON &&OWNER..TC_USERMAPPING TO &&TC_ADMIN;
Prompt Granting SELECT, INSERT, UPDATE, DELETE on TC_CONFIG to &&TC_ADMIN
GRANT SELECT, INSERT, UPDATE, DELETE ON &&OWNER..TC_CONFIG TO &&TC_ADMIN;
Prompt Granting SELECT, INSERT, UPDATE, DELETE on TC_TIMESTAMP to &&TC_ADMIN
GRANT SELECT, INSERT, UPDATE, DELETE ON &&OWNER..TC_TIMESTAMP TO &&TC_ADMIN;
Prompt Granting SELECT on TC_SCRIPT_ID to &&TC_ADMIN
GRANT SELECT ON &&OWNER..TC_SCRIPT_ID TO &&TC_ADMIN;
DEFINE TC_MGR = TC_MGR_ROLE
Prompt Granting SELECT on TC_FILEEXT to &&TC_MGR
GRANT SELECT ON &&OWNER..TC_FILEEXT TO &&TC_MGR;
Prompt Granting SELECT, INSERT, UPDATE, DELETE on TC_OBJSTATUS to &&TC_MGR
GRANT SELECT, INSERT, UPDATE, DELETE ON &&OWNER..TC_OBJSTATUS TO &&TC_MGR;
Prompt Granting SELECT, INSERT, UPDATE, DELETE on TC_OBJSTATUS_VCS to &&TC_MGR
GRANT SELECT, INSERT, UPDATE, DELETE ON &&OWNER..TC_OBJSTATUS_VCS TO &&TC_MGR;
Prompt Granting SELECT on TC_GROUP_ID to &&TC_MGR
GRANT SELECT ON &&OWNER..TC_GROUP_ID TO &&TC_MGR;
Prompt Granting SELECT, INSERT, UPDATE, DELETE on TC_GROUP to &&TC_MGR
GRANT SELECT, INSERT, UPDATE, DELETE ON &&OWNER..TC_GROUP TO &&TC_MGR;
Prompt Granting SELECT, INSERT, UPDATE, DELETE on TC_MASK to &&TC_MGR
GRANT SELECT, INSERT, UPDATE, DELETE ON &&OWNER..TC_MASK TO &&TC_MGR;
Prompt Granting SELECT, INSERT, UPDATE, DELETE on TC_USERMAPPING to &&TC_MGR
GRANT SELECT, INSERT, UPDATE, DELETE ON &&OWNER..TC_USERMAPPING TO &&TC_MGR;
Prompt Granting SELECT on TC_CONFIG to &&TC_MGR
GRANT SELECT ON &&OWNER..TC_CONFIG TO &&TC_MGR;
Prompt Granting SELECT, INSERT, UPDATE, DELETE on TC_TIMESTAMP to &&TC_MGR
GRANT SELECT, INSERT, UPDATE, DELETE ON &&OWNER..TC_TIMESTAMP TO &&TC_MGR;
Prompt Granting SELECT on TC_SCRIPT_ID to &&TC_MGR
GRANT SELECT ON &&OWNER..TC_SCRIPT_ID TO &&TC_MGR;
DEFINE TC_LDR = TC_LDR_ROLE
Prompt Granting SELECT on TC_FILEEXT to &&TC_LDR
GRANT SELECT ON &&OWNER..TC_FILEEXT TO &&TC_LDR;
Prompt Granting SELECT, INSERT, UPDATE (PSL_FROZEN, PSL_FROZEN_BY, PSL_FROZEN_TIMESTAMP) on TC_OBJSTATUS to &&TC_LDR
GRANT SELECT, INSERT, UPDATE (PSL_FROZEN, PSL_FROZEN_BY, PSL_FROZEN_TIMESTAMP) ON &&OWNER..TC_OBJSTATUS TO &&TC_LDR;
Prompt Granting SELECT, INSERT, UPDATE, DELETE on TC_OBJSTATUS to &&TC_LDR
GRANT SELECT, INSERT, UPDATE, DELETE ON &&OWNER..TC_OBJSTATUS TO &&TC_LDR;
Prompt Granting SELECT, INSERT, UPDATE, DELETE on TC_OBJSTATUS_VCS to &&TC_LDR
GRANT SELECT, INSERT, UPDATE, DELETE ON &&OWNER..TC_OBJSTATUS_VCS TO &&TC_LDR;
Prompt Granting SELECT on TC_GROUP_ID to &&TC_LDR
GRANT SELECT ON &&OWNER..TC_GROUP_ID TO &&TC_LDR;
Prompt Granting SELECT, INSERT, UPDATE on TC_GROUP to &&TC_LDR
GRANT SELECT, INSERT, UPDATE ON &&OWNER..TC_GROUP TO &&TC_LDR;
Prompt Granting SELECT, INSERT, UPDATE, DELETE on TC_MASK to &&TC_LDR
GRANT SELECT, INSERT, UPDATE, DELETE ON &&OWNER..TC_MASK TO &&TC_LDR;
Prompt Granting SELECT, INSERT, UPDATE, DELETE on TC_USERMAPPING to &&TC_LDR
GRANT SELECT, INSERT, UPDATE, DELETE ON &&OWNER..TC_USERMAPPING TO &&TC_LDR;
Prompt Granting SELECT on TC_CONFIG to &&TC_LDR
GRANT SELECT ON &&OWNER..TC_CONFIG TO &&TC_LDR;
Prompt Granting SELECT, INSERT, UPDATE, DELETE on TC_TIMESTAMP to &&TC_LDR
GRANT SELECT, INSERT, UPDATE, DELETE ON &&OWNER..TC_TIMESTAMP TO &&TC_LDR;
Prompt Granting SELECT on TC_SCRIPT_ID to &&TC_LDR
GRANT SELECT ON &&OWNER..TC_SCRIPT_ID TO &&TC_LDR;
Prompt Creating public synonym QUEST_COM_TEAM_CODING
CREATE OR REPLACE PUBLIC SYNONYM QUEST_COM_TEAM_CODING FOR &&OWNER..TC_CONFIG;
Prompt ============================================================================
Prompt Creating/Upgrading CodeXpert objects
Prompt ============================================================================
DEFINE TSP_TABS = ' TABLESPACE TOAD'
DEFINE TSP_INDS = ' TABLESPACE TOAD'
Prompt Creating table CX_CATEGORYS
CREATE TABLE &&OWNER..CX_CATEGORYS
(
CAT_ID INTEGER NOT NULL,
DESCRIPTION VARCHAR2(20) NOT NULL
)
&&TSP_TABS;
Prompt Adding primary key to CX_CATEGORYS
ALTER TABLE &&OWNER..CX_CATEGORYS ADD (
PRIMARY KEY
(CAT_ID)
USING INDEX
&&TSP_INDS
); Prompt Creating table CX_TYPES
CREATE TABLE &&OWNER..CX_TYPES
(
TYP_ID INTEGER NOT NULL,
DESCRIPTION VARCHAR2(20) NOT NULL
)
&&TSP_TABS;
Prompt Adding primary key to CX_TYPES
ALTER TABLE &&OWNER..CX_TYPES ADD (
PRIMARY KEY
(TYP_ID)
USING INDEX
&&TSP_INDS
);
Prompt Creating table CX_BASERULES
CREATE TABLE &&OWNER..CX_BASERULES
(
RUL_ID INTEGER NOT NULL,
CAT_ID INTEGER NOT NULL,
SEV_ID INTEGER NOT NULL,
TYP_ID INTEGER NOT NULL,
DEFINITION VARCHAR2(1000) NOT NULL
)
&&TSP_TABS;
Prompt Adding primary key to CX_BASERULES
ALTER TABLE &&OWNER..CX_BASERULES ADD (
PRIMARY KEY
(RUL_ID)
USING INDEX
&&TSP_INDS
);
Prompt Creating table CX_SEVERITYS
CREATE TABLE &&OWNER..CX_SEVERITYS
(
SEV_ID INTEGER NOT NULL,
DESCRIPTION VARCHAR2(20) NOT NULL
)
&&TSP_TABS;
Prompt Adding primary key to CX_SEVERITYS
ALTER TABLE &&OWNER..CX_SEVERITYS ADD (
PRIMARY KEY
(SEV_ID)
USING INDEX
&&TSP_INDS
);
Prompt Creating table CX_RULESETS
CREATE TABLE &&OWNER..CX_RULESETS
(
TITLE VARCHAR2(100) NOT NULL,
AUTHOR VARCHAR2(50),
CREATED DATE NOT NULL,
MODIFIED DATE
)
&&TSP_TABS;
Prompt Adding primary key to CX_RULESETS
ALTER TABLE &&OWNER..CX_RULESETS ADD (
PRIMARY KEY
(TITLE)
USING INDEX
&&TSP_INDS
);
Prompt Creating table CX_SETRULES
CREATE TABLE &&OWNER..CX_SETRULES
(
RUL_ID INTEGER NOT NULL,
TITLE VARCHAR2(100) NOT NULL
)
&&TSP_TABS;
Prompt Adding primary key to CX_SETRULES
ALTER TABLE &&OWNER..CX_SETRULES ADD (
PRIMARY KEY
(RUL_ID, TITLE)
USING INDEX
&&TSP_INDS
);
Prompt Creating table CX_XPERTLINES
CREATE TABLE &&OWNER..CX_XPERTLINES
(
RUNNAME VARCHAR2(100) NOT NULL,
ITEMNO INTEGER NOT NULL,
LINENO INTEGER NOT NULL,
LINEPOS INTEGER NOT NULL,
RUL_ID INTEGER NOT NULL,
TITLE VARCHAR2(100) NOT NULL
)
&&TSP_TABS;
Prompt Creating table CX_XPERTITEMS
CREATE TABLE &&OWNER..CX_XPERTITEMS
(
RUNNAME VARCHAR2(100) NOT NULL,
ITEMNO INTEGER NOT NULL,
INSTANCE VARCHAR2(20) NOT NULL,
"SCHEMA" VARCHAR2(50) NOT NULL,
OBJNAME VARCHAR2(50) NOT NULL,
OBJTYPE VARCHAR2(100),
SCRIPT CLOB
)
&&TSP_TABS;
Prompt Adding primary key to CX_XPERTITEMS
ALTER TABLE &&OWNER..CX_XPERTITEMS ADD (
PRIMARY KEY
(RUNNAME, ITEMNO)
USING INDEX
&&TSP_INDS
);
Prompt Creating table CX_METRICS
CREATE TABLE &&OWNER..CX_METRICS
(
RUNNAME VARCHAR2(100) NOT NULL,
ITEMNO INTEGER NOT NULL,
SCORE FLOAT(126) NOT NULL,
MET_NAME VARCHAR2(50) NOT NULL,
MET_MEANING VARCHAR2(50) NOT NULL
)
&&TSP_TABS;
Prompt Adding primary key to CX_METRICS
ALTER TABLE &&OWNER..CX_METRICS ADD (
PRIMARY KEY
(RUNNAME, ITEMNO, MET_NAME, MET_MEANING)
USING INDEX
&&TSP_INDS
);
Prompt Creating table CX_XPERTRUN
CREATE TABLE &&OWNER..CX_XPERTRUN
(
RUN_ID INTEGER NOT NULL,
RUNNAME VARCHAR2(100) NOT NULL,
RUNDATE DATE NOT NULL,
RUNCOMMENT VARCHAR2(1000)
)
&&TSP_TABS;
Prompt Adding primary key to CX_XPERTRUN
ALTER TABLE &&OWNER..CX_XPERTRUN ADD (
PRIMARY KEY
(RUNNAME)
USING INDEX
&&TSP_INDS
);
Prompt Creating sequence CX_XPERTRUN_ID
CREATE SEQUENCE &&OWNER..CX_XPERTRUN_ID
START WITH 1
MAXVALUE 999999999999999999999999999
MINVALUE 1
NOCYCLE
NOCACHE
NOORDER;
Prompt Creating trigger CX_XPERTRUN_INSERT
CREATE TRIGGER &&OWNER..CX_XPERTRUN_INSERT
BEFORE INSERT ON &&OWNER..CX_XPERTRUN
FOR EACH ROW
DECLARE
tmpVar NUMBER;
BEGIN
tmpVar := 0;
SELECT &&OWNER..CX_XPERTRUN_ID.NEXTVAL INTO tmpVar FROM dual;
:NEW.RUN_ID := tmpVar;
END CX_XPERTRUN_INSERT;
/
Prompt Creating table CX_METRICRANGES
CREATE TABLE &&OWNER..CX_METRICRANGES
(
MET_NAME VARCHAR2(50) NOT NULL,
MET_MEANING VARCHAR2(50) NOT NULL,
RANGE_LO FLOAT(126) NOT NULL,
RANGE_HI FLOAT(126) NOT NULL,
COLOR VARCHAR2(50) NOT NULL
)
&&TSP_TABS;
Prompt Adding primary key to CX_METRICRANGES
ALTER TABLE &&OWNER..CX_METRICRANGES ADD (
PRIMARY KEY
(MET_NAME, MET_MEANING)
USING INDEX
&&TSP_INDS
);
Prompt Granting SELECT, INSERT, UPDATE, DELETE on CX_CATEGORYS to PUBLIC
GRANT SELECT, INSERT, UPDATE, DELETE ON &&OWNER..CX_CATEGORYS TO PUBLIC;
Prompt Granting SELECT, INSERT, UPDATE, DELETE on CX_SEVERITYS to PUBLIC
GRANT SELECT, INSERT, UPDATE, DELETE ON &&OWNER..CX_SEVERITYS TO PUBLIC;
Prompt Granting SELECT, INSERT, UPDATE, DELETE on CX_TYPES to PUBLIC
GRANT SELECT, INSERT, UPDATE, DELETE ON &&OWNER..CX_TYPES TO PUBLIC;
Prompt Granting SELECT, INSERT, UPDATE, DELETE on CX_BASERULES to PUBLIC
GRANT SELECT, INSERT, UPDATE, DELETE ON &&OWNER..CX_BASERULES TO PUBLIC;
Prompt Granting SELECT, INSERT, UPDATE, DELETE on CX_RULESETS to PUBLIC
GRANT SELECT, INSERT, UPDATE, DELETE ON &&OWNER..CX_RULESETS TO PUBLIC;
Prompt Granting SELECT, INSERT, UPDATE, DELETE on CX_SETRULES to PUBLIC
GRANT SELECT, INSERT, UPDATE, DELETE ON &&OWNER..CX_SETRULES TO PUBLIC;
Prompt Granting SELECT, INSERT, UPDATE, DELETE on CX_XPERTRUN to PUBLIC
GRANT SELECT, INSERT, UPDATE, DELETE ON &&OWNER..CX_XPERTRUN TO PUBLIC;
Prompt Granting SELECT, INSERT, UPDATE, DELETE on CX_XPERTITEMS to PUBLIC
GRANT SELECT, INSERT, UPDATE, DELETE ON &&OWNER..CX_XPERTITEMS TO PUBLIC;
Prompt Granting SELECT, INSERT, UPDATE, DELETE on CX_XPERTLINES to PUBLIC
GRANT SELECT, INSERT, UPDATE, DELETE ON &&OWNER..CX_XPERTLINES TO PUBLIC;
Prompt Granting SELECT, INSERT, UPDATE, DELETE on CX_METRICS to PUBLIC
GRANT SELECT, INSERT, UPDATE, DELETE ON &&OWNER..CX_METRICS TO PUBLIC;
Prompt Granting SELECT, INSERT, UPDATE, DELETE on CX_METRICRANGES to PUBLIC
GRANT SELECT, INSERT, UPDATE, DELETE ON &&OWNER..CX_METRICRANGES TO PUBLIC;
Prompt Creating public synonym QUEST_COM_CODEXPERT
CREATE PUBLIC SYNONYM QUEST_COM_CODEXPERT FOR &&OWNER..CX_XPERTRUN;
Prompt Creating public synonym CX_XPERTRUN
CREATE PUBLIC SYNONYM CX_XPERTRUN FOR &&OWNER..CX_XPERTRUN;
Prompt Creating public synonym CX_XPERTLINES
CREATE PUBLIC SYNONYM CX_XPERTLINES FOR &&OWNER..CX_XPERTLINES;
Prompt Creating public synonym CX_XPERTITEMS
CREATE PUBLIC SYNONYM CX_XPERTITEMS FOR &&OWNER..CX_XPERTITEMS;
Prompt Creating public synonym CX_TYPES
CREATE PUBLIC SYNONYM CX_TYPES FOR &&OWNER..CX_TYPES;
Prompt Creating public synonym CX_SEVERITYS
CREATE PUBLIC SYNONYM CX_SEVERITYS FOR &&OWNER..CX_SEVERITYS;
Prompt Creating public synonym CX_SETRULES
CREATE PUBLIC SYNONYM CX_SETRULES FOR &&OWNER..CX_SETRULES;
Prompt Creating public synonym CX_RULESETS
CREATE PUBLIC SYNONYM CX_RULESETS FOR &&OWNER..CX_RULESETS;
Prompt Creating public synonym CX_METRICS
CREATE PUBLIC SYNONYM CX_METRICS FOR &&OWNER..CX_METRICS;
Prompt Creating public synonym CX_METRICRANGES
CREATE PUBLIC SYNONYM CX_METRICRANGES FOR &&OWNER..CX_METRICRANGES;
Prompt Creating public synonym CX_CATEGORYS
CREATE PUBLIC SYNONYM CX_CATEGORYS FOR &&OWNER..CX_CATEGORYS;
Prompt Creating public synonym CX_BASERULES
CREATE PUBLIC SYNONYM CX_BASERULES FOR &&OWNER..CX_BASERULES;
Prompt ============================================================================
Prompt Creating/Upgrading Data Generation objects
Prompt ============================================================================
Prompt Creating package spec TOAD_DATAGEN
@"C:\Program Files (x86)\Quest Software\Toad for Oracle 10.6\data_gen.pks"
Prompt Creating package body TOAD_DATAGEN
@"C:\Program Files (x86)\Quest Software\Toad for Oracle 10.6\data_gen.plb"
Prompt Granting EXECUTE on TOAD_DATAGEN to PUBLIC
GRANT EXECUTE ON &&OWNER..TOAD_DATAGEN TO PUBLIC;
Prompt Creating public synonym TOAD_DATAGEN
CREATE OR REPLACE PUBLIC SYNONYM TOAD_DATAGEN FOR &&OWNER..TOAD_DATAGEN;
I really had to struggle a lot to get this script.Creating these objects as toad user will allow u to gathers stats for disk ,data file and table spaces growth and trending.
This scipt need to be run as toad user to create all the tables & ddl needed for toad user and space management graphs.
REM This script was created by version 10.6.1.3 of the TOAD Server Side Objects Wizard
DEFINE OWNER = 'TOAD'
Prompt ============================================================================
Prompt Creating the TOAD User
Prompt ============================================================================
Prompt Creating the TOAD User
CREATE USER TOAD IDENTIFIED BY toad1234
DEFAULT TABLESPACE TOAD
TEMPORARY TABLESPACE TEMP
QUOTA UNLIMITED ON TOAD;
Prompt Granting System Privileges to TOAD
Grant UNLIMITED TABLESPACE to TOAD;
Grant ALTER SESSION to TOAD;
Grant CREATE SEQUENCE to TOAD;
Grant CREATE SESSION to TOAD;
Grant CREATE SYNONYM to TOAD;
Grant CREATE TRIGGER to TOAD;
Grant CREATE PUBLIC SYNONYM to TOAD;
Grant CREATE TABLE to TOAD;
Grant CREATE VIEW to TOAD;
Grant CREATE PROCEDURE to TOAD;
Prompt ============================================================================
Prompt Granting CREATE PUBLIC SYNONYM and DROP PUBLIC SYNONYM
Prompt ============================================================================
Prompt Granting CREATE PUBLIC SYNONYM to TOAD
GRANT CREATE PUBLIC SYNONYM TO TOAD;
Prompt Granting DROP PUBLIC SYNONYM to TOAD
GRANT DROP PUBLIC SYNONYM TO TOAD;
Prompt ============================================================================
Prompt Adding necessary grants to TOAD
Prompt ============================================================================
Prompt Granting SELECT ANY DICTIONARY to TOAD
GRANT SELECT ANY DICTIONARY TO &&OWNER;
Prompt ============================================================================
Prompt Granting EXECUTE ANY PROCEDURE to %s (Used for the Profiler)
Prompt ============================================================================
Prompt Granting EXECUTE ANY PROCEDURE to TOAD (Used for the Profiler)
GRANT EXECUTE ANY PROCEDURE TO TOAD;
Prompt ============================================================================
Prompt Granting CREATE ROLE
Prompt ============================================================================
Prompt Granting CREATE ROLE to TOAD (Used for Team Coding)
GRANT CREATE ROLE TO TOAD;
Prompt ============================================================================
Prompt Granting CREATE VIEW
Prompt ============================================================================
Prompt Granting CREATE VIEW to TOAD
GRANT CREATE VIEW TO TOAD;
Prompt ============================================================================
Prompt Connecting as TOAD
Prompt ============================================================================
Prompt Connecting as TOAD
CONNECT TOAD/toad1234@QPDEV_BV
Prompt
Prompt ============================================================================
Prompt Creating TOAD Profiler Objects in TOAD schema
Prompt ============================================================================
DEFINE tablespace_info = ' TABLESPACE TOAD'
DEFINE ALLT = DBA_TRIGGERS
DEFINE ALLS = DBA_SOURCE
Prompt Creating table PLSQL_PROFILER_RUNS
CREATE TABLE &&OWNER..plsql_profiler_runs
(
runid NUMBER primary key, -- unique run identifier, from plsql_profiler_runnumber
related_run NUMBER, -- runid of related run (for client-server correlation)
run_owner VARCHAR2(32), -- user that executed the procedure
run_proc VARCHAR2(256), -- procedure that was executed
run_date DATE, -- start time of run
run_comment VARCHAR2(2047), -- user provided comment for this run
run_total_time NUMBER, -- elapsed time for this run
run_system_info VARCHAR2(2047), -- currently unused
run_comment1 VARCHAR2(256), -- additional comment
spare1 VARCHAR2(256) -- unused
)
&&tablespace_info;
Prompt Adding comment to PLSQL_PROFILER_RUNS
COMMENT ON TABLE &&OWNER..plsql_profiler_runs IS
'Run-specific information for the PL/SQL profiler';
Prompt Creating table PLSQL_PROFILER_UNITS
CREATE TABLE &&OWNER..plsql_profiler_units
(
runid NUMBER references &&OWNER..plsql_profiler_runs ON DELETE cascade,
unit_number NUMBER, -- internally generated library unit #
unit_type VARCHAR2(32), -- library unit type
unit_owner VARCHAR2(32), -- library unit owner name
unit_name VARCHAR2(32), -- library unit name
unit_timestamp DATE,
-- timestamp on library unit, can be used to detect changes to unit between runs
total_time NUMBER DEFAULT 0 NOT NULL,
spare1 NUMBER, -- unused
spare2 NUMBER, -- unused
primary key (runid, unit_number)
)
&&tablespace_info;
Prompt Adding comment to PLSQL_PROFILER_UNITS
COMMENT ON TABLE &&OWNER..plsql_profiler_units IS
'Information about each library unit in a run';
Prompt Creating table PLSQL_PROFILER_DATA
CREATE TABLE &&OWNER..plsql_profiler_data
(
runid NUMBER, -- unique (generated) run identifier
unit_number NUMBER, -- internally generated library unit #
line# NUMBER NOT NULL, -- line number in unit
text VARCHAR2(4000), -- source for the line
total_occur NUMBER, -- number of times line was executed
total_time NUMBER, -- total time spent executing line
min_time NUMBER, -- minimum execution time for this line
max_time NUMBER, -- maximum execution time for this line
spare1 NUMBER, -- unused
spare2 NUMBER, -- unused
spare3 NUMBER, -- unused
spare4 NUMBER, -- unused
primary key (runid, unit_number, line#),
foreign key (runid, unit_number) references &&OWNER..plsql_profiler_units ON DELETE CASCADE)
&&tablespace_info;
Prompt Adding comment to PLSQL_PROFILER_DATA
COMMENT ON TABLE &&OWNER..plsql_profiler_data IS
'Accumulated data from all profiler runs';
Prompt Creating package spec TOAD_PROFILER
CREATE OR REPLACE PACKAGE &&OWNER..toad_profiler is
procedure rollup_unit(run_number IN number, UnitNumber IN number,
UnitType IN varchar2, UnitOwner IN varchar2, UnitName IN varchar2);
procedure rollup_run(run_number IN number);
procedure rollup_all_runs;
end toad_profiler;
/
Prompt Creating package body TOAD_PROFILER
CREATE OR REPLACE PACKAGE BODY &&OWNER..toad_profiler is
-- compute the total time spent executing this unit - the sum of the
-- time spent executing lines in this unit (for this run)
procedure rollup_unit(run_number IN number, UnitNumber IN number,
UnitType IN varchar2, UnitOwner IN varchar2, UnitName IN varchar2) is
TYPE TSourceTable IS TABLE OF VARCHAR2(4000) INDEX BY BINARY_INTEGER;
SourceTable TSourceTable;
TriggerBody long;
FoundTriggerSource boolean;
Cnt number;
LnStart number;
LnEnd number;
Pos number;
vText varchar2(4000);
IsWrapped boolean;
TotalTime number;
-- Select the lines for the unit to find source code
cursor cLines(run_number number, UnitNumber number) is
select line# from plsql_profiler_data
where runid = run_number and unit_number = UnitNumber;
begin
select sum(total_time) into TotalTime
from plsql_profiler_data
where runid = run_number and unit_number = UnitNumber;
if TotalTime IS NULL then
TotalTime := 0;
end if;
update plsql_profiler_units set total_time = TotalTime
where runid = run_number and unit_number = UnitNumber;
-- Get trigger source into index-by table
if UnitType = 'TRIGGER' then
begin
FoundTriggerSource := True;
select trigger_body into TriggerBody
from dba_triggers where owner = UnitOwner and trigger_name = UnitName;
exception
when NO_DATA_FOUND then
FoundTriggerSource := False;
end;
if FoundTriggerSource then
Cnt := 1;
LnStart := 1;
loop
LnEnd := INSTR(TriggerBody, CHR(10), 1, Cnt);
if (LnEnd = 0) then
SourceTable(Cnt) := SubStr(TriggerBody, LnStart);
else
SourceTable(Cnt) := Substr(TriggerBody, LnStart, (LnEnd-LnStart));
end if;
LnStart := LnStart + (LnEnd-LnStart)+1;
Cnt := Cnt+1;
exit when (lnEnd = 0);
end loop;
end if;
-- see if the code is wrapped
else
begin
select upper(text) into vtext from dba_source s
where s.type = UnitType and s.owner = UnitOwner and
s.name = UnitName and s.line = 1;
IsWrapped := (INSTR(vText, ' WRAPPED') > 0);
exception
when NO_DATA_FOUND then
IsWrapped := False;
end;
end if;
-- Get the source for each line in unit
Cnt := 1;
for linerec in cLines(run_number, UnitNumber) loop
if UnitType = 'TRIGGER' then
if FoundTriggerSource then
vText := SourceTable(linerec.line#);
else
if Cnt = 1 then
vText := '<source unavailable>';
else
vText := null;
end if;
end if;
else
if IsWrapped then
if Cnt = 1 then
vText := '<wrapped>';
else
vText := null;
end if;
else
begin
select text into vtext from dba_source s
where s.type = UnitType and s.owner = UnitOwner and
s.name = UnitName and s.line = linerec.line#;
exception
when NO_DATA_FOUND then
vText := null;
end;
end if;
end if;
-- store the source line
update plsql_profiler_data d set d.text = vText
where d.runid = run_number and d.unit_number = UnitNumber and
d.line# = linerec.line#;
Cnt := Cnt+1;
end loop;
end rollup_unit;
-- rollup all units for the given run
procedure rollup_run(run_number IN number) is
tabpos number;
comment varchar2(2047);
proc varchar2(256 );
--
-- only select those units which have not been rolled up yet
cursor cunits(run_number number) is
select unit_number, unit_type, unit_owner, unit_name
from plsql_profiler_units
where runid = run_number and total_time = 0
order by unit_number asc;
begin
-- Fix Oracle's calling a 'PACKAGE' a 'PACKAGE SPEC'
update plsql_profiler_units set unit_type = 'PACKAGE'
where runid = run_number and unit_type like 'PACKAGE SPEC%';
-- parse the RUN_COMMENT column to get the procedure name
-- (note: this replaces the BI_PLSQL_PROFILER_RUNS trigger.
select run_proc, run_comment into proc, comment
from plsql_profiler_runs where runid = run_number;
if proc is null then
tabpos := INSTR(comment, CHR(8));
if tabpos > 0 THEN
proc := SUBSTR(comment, tabpos+1);
comment := SUBSTR(comment, 1, tabpos-1);
else
proc := 'ANONYMOUS BLOCK';
end if;
update plsql_profiler_runs
set run_owner = USER, run_proc = proc, run_comment = comment
where runid = run_number;
end if;
for unitrec in cunits(run_number) loop
rollup_unit(run_number, unitrec.unit_number, unitrec.unit_type,
unitrec.unit_owner, unitrec.unit_name);
end loop;
end rollup_run;
-- rollup all runs
procedure rollup_all_runs is
cursor crunid is
select runid from plsql_profiler_runs order by runid asc;
begin
for runidrec in crunid loop
rollup_run(runidrec.runid);
end loop crunid;
commit;
end rollup_all_runs;
end toad_profiler;
/
Prompt Creating sequence PLSQL_PROFILER_RUNNUMBER
CREATE SEQUENCE &&OWNER..plsql_profiler_runnumber START WITH 1 NOCACHE;
Prompt ============================================================================
Prompt Adding public synonyms for Profiler objects
Prompt ============================================================================
Prompt Creating public synonym PLSQL_PROFILER_DATA
CREATE OR REPLACE PUBLIC SYNONYM PLSQL_PROFILER_DATA FOR &&OWNER..PLSQL_PROFILER_DATA;
Prompt Creating public synonym PLSQL_PROFILER_UNITS
CREATE OR REPLACE PUBLIC SYNONYM PLSQL_PROFILER_UNITS FOR &&OWNER..PLSQL_PROFILER_UNITS;
Prompt Creating public synonym PLSQL_PROFILER_RUNS
CREATE OR REPLACE PUBLIC SYNONYM PLSQL_PROFILER_RUNS FOR &&OWNER..PLSQL_PROFILER_RUNS;
Prompt Creating public synonym PLSQL_PROFILER_RUNNUMBER
CREATE OR REPLACE PUBLIC SYNONYM PLSQL_PROFILER_RUNNUMBER FOR &&OWNER..PLSQL_PROFILER_RUNNUMBER;
Prompt Creating public synonym TOAD_PROFILER
CREATE OR REPLACE PUBLIC SYNONYM TOAD_PROFILER FOR &&OWNER..TOAD_PROFILER;
Prompt ============================================================================
Prompt Granting privileges to PUBLIC on Profiler objects
Prompt ============================================================================
Prompt Granting SELECT, INSERT, UPDATE, DELETE on PLSQL_PROFILER_DATA to PUBLIC
GRANT SELECT, INSERT, UPDATE, DELETE ON &&OWNER..PLSQL_PROFILER_DATA TO PUBLIC;
Prompt Granting SELECT, INSERT, UPDATE, DELETE on PLSQL_PROFILER_UNITS to PUBLIC
GRANT SELECT, INSERT, UPDATE, DELETE ON &&OWNER..PLSQL_PROFILER_UNITS TO PUBLIC;
Prompt Granting SELECT, INSERT, UPDATE, DELETE on PLSQL_PROFILER_RUNS to PUBLIC
GRANT SELECT, INSERT, UPDATE, DELETE ON &&OWNER..PLSQL_PROFILER_RUNS TO PUBLIC;
Prompt Granting SELECT on PLSQL_PROFILER_RUNNUMBER to PUBLIC
GRANT SELECT ON &&OWNER..PLSQL_PROFILER_RUNNUMBER TO PUBLIC;
Prompt Granting EXECUTE on TOAD_PROFILER to PUBLIC
GRANT EXECUTE ON &&OWNER..TOAD_PROFILER TO PUBLIC;
Prompt ============================================================================
Prompt Creating TOAD Security table
Prompt ============================================================================
Prompt Creating table TOAD.TOAD_RESTRICTIONS
CREATE TABLE TOAD.TOAD_RESTRICTIONS (
USER_NAME VARCHAR2(32) NOT NULL,
FEATURE VARCHAR2(20) NOT NULL,
CONSTRAINT TOAD_RES_PK
PRIMARY KEY ( FEATURE, USER_NAME ) )
TABLESPACE TOAD;
Prompt ============================================================================
Prompt Creating/Upgrading Team Coding objects
Prompt ============================================================================
DEFINE tablespace_info = ' TABLESPACE TOAD'
DEFINE tablespace_ind_info = ' TABLESPACE TOAD'
DEFINE TC_ADMIN = TC_ADMIN_ROLE
DEFINE TC_MGR = TC_MGR_ROLE
DEFINE TC_LDR = TC_LDR_ROLE
Prompt Creating role TC_ADMIN_ROLE
CREATE ROLE TC_ADMIN_ROLE;
Prompt Creating role TC_MGR_ROLE
CREATE ROLE TC_MGR_ROLE;
Prompt Creating role TC_LDR_ROLE
CREATE ROLE TC_LDR_ROLE;
/*
The table TC_MASK has a column called OBJECT_NAME, whose length is normally
set to 649 in order to accommodate a 2K block size on a pre-9i database. If you
have extremely long file paths, and your database allows you to increase the size of the
column, then you may wish to increase the size of this column after running this script,
by running:
ALTER TABLE TC_MASK MODIFY OBJECT_NAME VARCHAR2(2000);
*/
DEFINE path_length = 2000
Prompt Creating table TC_FILEEXT
CREATE TABLE &&OWNER..tc_fileext
(
vcs_objtype varchar2(20) NOT NULL,
vcs_objext varchar2(10) NOT NULL
)
&&tablespace_info
;
Prompt Adding primary key to TC_FILEEXT
ALTER table &&OWNER..tc_fileext
add primary key (vcs_objtype)
using index
&&tablespace_ind_info
;
Prompt Inserting procedure extension
INSERT INTO &&OWNER..tc_fileext
(vcs_objtype, vcs_objext)
VALUES ('PROCEDURE', 'PRC');
Prompt Inserting trigger extension
INSERT INTO &&OWNER..tc_fileext
(vcs_objtype, vcs_objext)
VALUES ('TRIGGER', 'TRG');
Prompt Inserting function extension
INSERT INTO &&OWNER..tc_fileext
(vcs_objtype, vcs_objext)
VALUES ('FUNCTION', 'FNC');
Prompt Inserting package extension
INSERT INTO &&OWNER..tc_fileext
(vcs_objtype, vcs_objext)
VALUES ('PACKAGE', 'PKS');
Prompt Inserting package body extension
INSERT INTO &&OWNER..tc_fileext
(vcs_objtype, vcs_objext)
VALUES ('PACKAGE BODY', 'PKB');
Prompt Inserting type extension
INSERT INTO &&OWNER..tc_fileext
(vcs_objtype, vcs_objext)
VALUES ('TYPE', 'TYP');
Prompt Inserting type body extension
INSERT INTO &&OWNER..tc_fileext
(vcs_objtype, vcs_objext)
VALUES ('TYPE BODY', 'TPB');
Prompt Inserting view extension
INSERT INTO &&OWNER..tc_fileext
(vcs_objtype, vcs_objext)
VALUES ('VIEW', 'VW');
Prompt Creating table TC_OBJSTATUS
CREATE TABLE &&OWNER..tc_objstatus
(
psl_object_id NUMBER ,
psl_object_type VARCHAR2(12) NOT NULL,
psl_object_owner VARCHAR2(30) NOT NULL,
psl_object_name VARCHAR2(2000) NOT NULL,
psl_checked_out VARCHAR2(1) NOT NULL,
psl_checked_out_by VARCHAR2(30) NOT NULL,
psl_check_out_timestamp DATE NOT NULL,
psl_check_in_timestamp DATE,
psl_frozen VARCHAR2(1) NOT NULL,
psl_frozen_by VARCHAR2(30),
psl_frozen_timestamp DATE,
psl_comments VARCHAR2(2000),
constraint tc_objstatus_pk
primary key (psl_object_id)
using index &&tablespace_ind_info
)
&&tablespace_info
;
Prompt Creating index TC_OBJSTATUS_NDX
CREATE UNIQUE index &&OWNER..tc_objstatus_ndx
on tc_objstatus (psl_object_id, psl_checked_out, psl_frozen, psl_checked_out_by)
&&tablespace_ind_info
;
Prompt Creating table TC_OBJSTATUS_VCS
CREATE TABLE &&OWNER..tc_objstatus_vcs
(
psl_object_id NUMBER NOT NULL,
project_id NUMBER,
filename VARCHAR2(2000),
locked_by VARCHAR2(255)
)
&&tablespace_info
;
Prompt Adding primary key to TC_OBJSTATUS_VCS
ALTER table &&OWNER..tc_objstatus_vcs
add constraint tc_objstatus_vcs_pk
primary key (psl_object_id)
using index &&tablespace_ind_info
;
Prompt Creating sequence TC_SCRIPT_ID
CREATE SEQUENCE &&OWNER..tc_script_id
INCREMENT BY -1
MINVALUE -2147483648
MAXVALUE -10
NOCYCLE
NOORDER
NOCACHE
;
Prompt Creating table TC_GROUP
CREATE TABLE &&OWNER..tc_group
(
project_id NUMBER NOT NULL,
project_name VARCHAR2(255) NOT NULL,
workdir VARCHAR2(2000),
creation_date DATE NOT NULL,
last_modified_date DATE,
author VARCHAR2(30),
checked_out INTEGER,
checked_out_timestamp DATE,
checked_out_by VARCHAR2(30),
checked_in_timestamp DATE,
vcp_project VARCHAR2(2000),
vcs_db VARCHAR2(2000),
frozen VARCHAR2(1) DEFAULT 'N',
frozen_by VARCHAR2(30),
frozen_timestamp DATE,
version VARCHAR2(6)
)
&&tablespace_info
;
Prompt Adding primary key to TC_GROUP
ALTER table &&OWNER..tc_group
add primary key (project_id)
using index &&tablespace_ind_info
;
Prompt Creating sequence TC_GROUP_ID
CREATE SEQUENCE &&OWNER..TC_GROUP_ID
INCREMENT BY 1
MINVALUE 1
MAXVALUE 2147483647
NOCYCLE
NOORDER
NOCACHE
;
Prompt Creating table TC_MASK
CREATE TABLE &&OWNER..tc_mask
(
project_id number NOT NULL,
object_name varchar2(&&path_length) NOT NULL,
object_type number NOT NULL,
schema_name varchar2(30) NOT NULL,
exclude number NOT NULL,
comments varchar2(1000)
)
&&tablespace_info
;
Prompt Adding primary key to TC_MASK
ALTER table &&OWNER..tc_mask
add constraint tc_mask_pk
primary key (project_id, object_name, object_type, schema_name, exclude)
using index &&tablespace_ind_info;
Prompt Creating table TC_USERMAPPING
CREATE TABLE &&OWNER..tc_usermapping
(
project_id number NOT NULL,
username varchar2(30),
schema varchar2(30)
)
&&tablespace_info
;
Prompt Creating table TC_CONFIG
CREATE TABLE &&OWNER..tc_config
(
options VARCHAR2(16),
set_working_directory VARCHAR2(255),
script_ext VARCHAR2(255),
vcs_vcp_name NUMBER,
vcs_db VARCHAR2(255),
vcs_sub_vcp VARCHAR2(255),
frozen VARCHAR2(1),
frozen_by VARCHAR2(30),
frozen_timestamp DATE,
version VARCHAR2(16)
)
&&tablespace_info
;
Prompt Inserting Config defaults
INSERT INTO &&OWNER..tc_config
(script_ext, vcs_vcp_name, frozen, version)
VALUES ('*.sql;', -1, 'N', '0060TOAD08500000');
Prompt Creating table TC_TIMESTAMP
CREATE TABLE &&OWNER..tc_timestamp (
tp_timestamp date,
project_timestamp date,
um_timestamp date
)
&&tablespace_info
;
Prompt Inserting null row into TC_TIMESTAMP
INSERT INTO &&OWNER..tc_timestamp
(tp_timestamp, project_timestamp, um_timestamp)
VALUES (NULL, NULL, NULL);
Prompt Creating trigger TC_TIMESTAMP_OBJSTATUS
CREATE OR REPLACE TRIGGER &&OWNER..tc_timestamp_objstatus
AFTER INSERT OR DELETE OR UPDATE
ON &&OWNER..tc_objstatus
REFERENCING OLD AS OLD NEW AS NEW
BEGIN
UPDATE &&OWNER..tc_timestamp
SET tp_timestamp = SYSDATE;
END;
/
Prompt Creating trigger TC_TIMESTAMP_MASK
CREATE OR REPLACE TRIGGER &&OWNER..tc_timestamp_mask
AFTER INSERT OR DELETE OR UPDATE
ON &&OWNER..tc_mask
REFERENCING OLD AS OLD NEW AS NEW
BEGIN
UPDATE &&OWNER..tc_timestamp
SET project_timestamp = SYSDATE;
END;
/
Prompt Creating trigger TC_TIMESTAMP_GROUP
CREATE OR REPLACE TRIGGER &&OWNER..tc_timestamp_group
AFTER INSERT OR DELETE OR UPDATE
ON &&OWNER..tc_group
REFERENCING OLD AS OLD NEW AS NEW
BEGIN
UPDATE &&OWNER..tc_timestamp
SET project_timestamp = SYSDATE;
END;
/
Prompt Creating trigger TC_TIMESTAMP_USERMAPPING
CREATE OR REPLACE TRIGGER &&OWNER..tc_timestamp_usermapping
AFTER INSERT OR UPDATE OR DELETE
ON &&OWNER..tc_usermapping
REFERENCING NEW AS NEW OLD AS OLD
BEGIN
UPDATE &&OWNER..tc_timestamp
SET um_timestamp = SYSDATE;
END;
/
Prompt Creating trigger TC_DELETE_GROUP
CREATE OR REPLACE TRIGGER &&OWNER..tc_delete_group
BEFORE DELETE
ON &&OWNER..tc_group
REFERENCING OLD AS OLD NEW AS NEW
FOR EACH ROW
BEGIN
DELETE FROM &&OWNER..tc_mask
WHERE project_id = :OLD.project_id;
DELETE FROM &&OWNER..tc_usermapping
WHERE project_id = :OLD.project_id;
DELETE FROM &&OWNER..tc_objstatus_vcs
WHERE project_id = :OLD.project_id;
/* the tc_delete_obj trigger (below) takes care of the tc_objstatus table */
END;
/
Prompt Creating trigger TC_DELETE_OBJ
CREATE OR REPLACE TRIGGER &&OWNER..tc_delete_obj
BEFORE DELETE
ON &&OWNER..tc_objstatus_vcs
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
begin
DELETE FROM &&OWNER..tc_objstatus
WHERE psl_object_id = :OLD.psl_object_id;
end;
/
SET DEFINE ON
Prompt Granting SELECT, UPDATE on TC_FILEEXT to PUBLIC
GRANT SELECT, UPDATE ON &&OWNER..TC_FILEEXT TO PUBLIC;
Prompt Granting SELECT, INSERT, UPDATE, DELETE on TC_OBJSTATUS to PUBLIC
GRANT SELECT, INSERT, UPDATE, DELETE ON &&OWNER..TC_OBJSTATUS TO PUBLIC;
Prompt Granting SELECT, INSERT, UPDATE, DELETE on TC_OBJSTATUS_VCS to PUBLIC
GRANT SELECT, INSERT, UPDATE, DELETE ON &&OWNER..TC_OBJSTATUS_VCS TO PUBLIC;
Prompt Granting SELECT on TC_GROUP_ID to PUBLIC
GRANT SELECT ON &&OWNER..TC_GROUP_ID TO PUBLIC;
Prompt Granting SELECT on TC_GROUP to PUBLIC
GRANT SELECT ON &&OWNER..TC_GROUP TO PUBLIC;
Prompt Granting SELECT on TC_MASK to PUBLIC
GRANT SELECT ON &&OWNER..TC_MASK TO PUBLIC;
Prompt Granting SELECT, INSERT, UPDATE, DELETE on TC_USERMAPPING to PUBLIC
GRANT SELECT, INSERT, UPDATE, DELETE ON &&OWNER..TC_USERMAPPING TO PUBLIC;
Prompt Granting SELECT on TC_CONFIG to PUBLIC
GRANT SELECT ON &&OWNER..TC_CONFIG TO PUBLIC;
Prompt Granting SELECT, INSERT, UPDATE, DELETE on TC_TIMESTAMP to PUBLIC
GRANT SELECT, INSERT, UPDATE, DELETE ON &&OWNER..TC_TIMESTAMP TO PUBLIC;
Prompt Granting SELECT on TC_SCRIPT_ID to PUBLIC
GRANT SELECT ON &&OWNER..TC_SCRIPT_ID TO PUBLIC;
DEFINE TC_ADM = TC_ADMIN_ROLE
Prompt Granting SELECT, UPDATE on TC_FILEEXT to &&TC_ADMIN
GRANT SELECT, UPDATE ON &&OWNER..TC_FILEEXT TO &&TC_ADMIN;
Prompt Granting SELECT, INSERT, UPDATE, DELETE on TC_OBJSTATUS to &&TC_ADMIN
GRANT SELECT, INSERT, UPDATE, DELETE ON &&OWNER..TC_OBJSTATUS TO &&TC_ADMIN;
Prompt Granting SELECT, INSERT, UPDATE, DELETE on TC_OBJSTATUS_VCS to &&TC_ADMIN
GRANT SELECT, INSERT, UPDATE, DELETE ON &&OWNER..TC_OBJSTATUS_VCS TO &&TC_ADMIN;
Prompt Granting SELECT on TC_GROUP_ID to &&TC_ADMIN
GRANT SELECT ON &&OWNER..TC_GROUP_ID TO &&TC_ADMIN;
Prompt Granting SELECT, INSERT, UPDATE, DELETE on TC_GROUP to &&TC_ADMIN
GRANT SELECT, INSERT, UPDATE, DELETE ON &&OWNER..TC_GROUP TO &&TC_ADMIN;
Prompt Granting SELECT, INSERT, UPDATE, DELETE on TC_MASK to &&TC_ADMIN
GRANT SELECT, INSERT, UPDATE, DELETE ON &&OWNER..TC_MASK TO &&TC_ADMIN;
Prompt Granting SELECT, INSERT, UPDATE, DELETE on TC_USERMAPPING to &&TC_ADMIN
GRANT SELECT, INSERT, UPDATE, DELETE ON &&OWNER..TC_USERMAPPING TO &&TC_ADMIN;
Prompt Granting SELECT, INSERT, UPDATE, DELETE on TC_CONFIG to &&TC_ADMIN
GRANT SELECT, INSERT, UPDATE, DELETE ON &&OWNER..TC_CONFIG TO &&TC_ADMIN;
Prompt Granting SELECT, INSERT, UPDATE, DELETE on TC_TIMESTAMP to &&TC_ADMIN
GRANT SELECT, INSERT, UPDATE, DELETE ON &&OWNER..TC_TIMESTAMP TO &&TC_ADMIN;
Prompt Granting SELECT on TC_SCRIPT_ID to &&TC_ADMIN
GRANT SELECT ON &&OWNER..TC_SCRIPT_ID TO &&TC_ADMIN;
DEFINE TC_MGR = TC_MGR_ROLE
Prompt Granting SELECT on TC_FILEEXT to &&TC_MGR
GRANT SELECT ON &&OWNER..TC_FILEEXT TO &&TC_MGR;
Prompt Granting SELECT, INSERT, UPDATE, DELETE on TC_OBJSTATUS to &&TC_MGR
GRANT SELECT, INSERT, UPDATE, DELETE ON &&OWNER..TC_OBJSTATUS TO &&TC_MGR;
Prompt Granting SELECT, INSERT, UPDATE, DELETE on TC_OBJSTATUS_VCS to &&TC_MGR
GRANT SELECT, INSERT, UPDATE, DELETE ON &&OWNER..TC_OBJSTATUS_VCS TO &&TC_MGR;
Prompt Granting SELECT on TC_GROUP_ID to &&TC_MGR
GRANT SELECT ON &&OWNER..TC_GROUP_ID TO &&TC_MGR;
Prompt Granting SELECT, INSERT, UPDATE, DELETE on TC_GROUP to &&TC_MGR
GRANT SELECT, INSERT, UPDATE, DELETE ON &&OWNER..TC_GROUP TO &&TC_MGR;
Prompt Granting SELECT, INSERT, UPDATE, DELETE on TC_MASK to &&TC_MGR
GRANT SELECT, INSERT, UPDATE, DELETE ON &&OWNER..TC_MASK TO &&TC_MGR;
Prompt Granting SELECT, INSERT, UPDATE, DELETE on TC_USERMAPPING to &&TC_MGR
GRANT SELECT, INSERT, UPDATE, DELETE ON &&OWNER..TC_USERMAPPING TO &&TC_MGR;
Prompt Granting SELECT on TC_CONFIG to &&TC_MGR
GRANT SELECT ON &&OWNER..TC_CONFIG TO &&TC_MGR;
Prompt Granting SELECT, INSERT, UPDATE, DELETE on TC_TIMESTAMP to &&TC_MGR
GRANT SELECT, INSERT, UPDATE, DELETE ON &&OWNER..TC_TIMESTAMP TO &&TC_MGR;
Prompt Granting SELECT on TC_SCRIPT_ID to &&TC_MGR
GRANT SELECT ON &&OWNER..TC_SCRIPT_ID TO &&TC_MGR;
DEFINE TC_LDR = TC_LDR_ROLE
Prompt Granting SELECT on TC_FILEEXT to &&TC_LDR
GRANT SELECT ON &&OWNER..TC_FILEEXT TO &&TC_LDR;
Prompt Granting SELECT, INSERT, UPDATE (PSL_FROZEN, PSL_FROZEN_BY, PSL_FROZEN_TIMESTAMP) on TC_OBJSTATUS to &&TC_LDR
GRANT SELECT, INSERT, UPDATE (PSL_FROZEN, PSL_FROZEN_BY, PSL_FROZEN_TIMESTAMP) ON &&OWNER..TC_OBJSTATUS TO &&TC_LDR;
Prompt Granting SELECT, INSERT, UPDATE, DELETE on TC_OBJSTATUS to &&TC_LDR
GRANT SELECT, INSERT, UPDATE, DELETE ON &&OWNER..TC_OBJSTATUS TO &&TC_LDR;
Prompt Granting SELECT, INSERT, UPDATE, DELETE on TC_OBJSTATUS_VCS to &&TC_LDR
GRANT SELECT, INSERT, UPDATE, DELETE ON &&OWNER..TC_OBJSTATUS_VCS TO &&TC_LDR;
Prompt Granting SELECT on TC_GROUP_ID to &&TC_LDR
GRANT SELECT ON &&OWNER..TC_GROUP_ID TO &&TC_LDR;
Prompt Granting SELECT, INSERT, UPDATE on TC_GROUP to &&TC_LDR
GRANT SELECT, INSERT, UPDATE ON &&OWNER..TC_GROUP TO &&TC_LDR;
Prompt Granting SELECT, INSERT, UPDATE, DELETE on TC_MASK to &&TC_LDR
GRANT SELECT, INSERT, UPDATE, DELETE ON &&OWNER..TC_MASK TO &&TC_LDR;
Prompt Granting SELECT, INSERT, UPDATE, DELETE on TC_USERMAPPING to &&TC_LDR
GRANT SELECT, INSERT, UPDATE, DELETE ON &&OWNER..TC_USERMAPPING TO &&TC_LDR;
Prompt Granting SELECT on TC_CONFIG to &&TC_LDR
GRANT SELECT ON &&OWNER..TC_CONFIG TO &&TC_LDR;
Prompt Granting SELECT, INSERT, UPDATE, DELETE on TC_TIMESTAMP to &&TC_LDR
GRANT SELECT, INSERT, UPDATE, DELETE ON &&OWNER..TC_TIMESTAMP TO &&TC_LDR;
Prompt Granting SELECT on TC_SCRIPT_ID to &&TC_LDR
GRANT SELECT ON &&OWNER..TC_SCRIPT_ID TO &&TC_LDR;
Prompt Creating public synonym QUEST_COM_TEAM_CODING
CREATE OR REPLACE PUBLIC SYNONYM QUEST_COM_TEAM_CODING FOR &&OWNER..TC_CONFIG;
Prompt ============================================================================
Prompt Creating/Upgrading CodeXpert objects
Prompt ============================================================================
DEFINE TSP_TABS = ' TABLESPACE TOAD'
DEFINE TSP_INDS = ' TABLESPACE TOAD'
Prompt Creating table CX_CATEGORYS
CREATE TABLE &&OWNER..CX_CATEGORYS
(
CAT_ID INTEGER NOT NULL,
DESCRIPTION VARCHAR2(20) NOT NULL
)
&&TSP_TABS;
Prompt Adding primary key to CX_CATEGORYS
ALTER TABLE &&OWNER..CX_CATEGORYS ADD (
PRIMARY KEY
(CAT_ID)
USING INDEX
&&TSP_INDS
); Prompt Creating table CX_TYPES
CREATE TABLE &&OWNER..CX_TYPES
(
TYP_ID INTEGER NOT NULL,
DESCRIPTION VARCHAR2(20) NOT NULL
)
&&TSP_TABS;
Prompt Adding primary key to CX_TYPES
ALTER TABLE &&OWNER..CX_TYPES ADD (
PRIMARY KEY
(TYP_ID)
USING INDEX
&&TSP_INDS
);
Prompt Creating table CX_BASERULES
CREATE TABLE &&OWNER..CX_BASERULES
(
RUL_ID INTEGER NOT NULL,
CAT_ID INTEGER NOT NULL,
SEV_ID INTEGER NOT NULL,
TYP_ID INTEGER NOT NULL,
DEFINITION VARCHAR2(1000) NOT NULL
)
&&TSP_TABS;
Prompt Adding primary key to CX_BASERULES
ALTER TABLE &&OWNER..CX_BASERULES ADD (
PRIMARY KEY
(RUL_ID)
USING INDEX
&&TSP_INDS
);
Prompt Creating table CX_SEVERITYS
CREATE TABLE &&OWNER..CX_SEVERITYS
(
SEV_ID INTEGER NOT NULL,
DESCRIPTION VARCHAR2(20) NOT NULL
)
&&TSP_TABS;
Prompt Adding primary key to CX_SEVERITYS
ALTER TABLE &&OWNER..CX_SEVERITYS ADD (
PRIMARY KEY
(SEV_ID)
USING INDEX
&&TSP_INDS
);
Prompt Creating table CX_RULESETS
CREATE TABLE &&OWNER..CX_RULESETS
(
TITLE VARCHAR2(100) NOT NULL,
AUTHOR VARCHAR2(50),
CREATED DATE NOT NULL,
MODIFIED DATE
)
&&TSP_TABS;
Prompt Adding primary key to CX_RULESETS
ALTER TABLE &&OWNER..CX_RULESETS ADD (
PRIMARY KEY
(TITLE)
USING INDEX
&&TSP_INDS
);
Prompt Creating table CX_SETRULES
CREATE TABLE &&OWNER..CX_SETRULES
(
RUL_ID INTEGER NOT NULL,
TITLE VARCHAR2(100) NOT NULL
)
&&TSP_TABS;
Prompt Adding primary key to CX_SETRULES
ALTER TABLE &&OWNER..CX_SETRULES ADD (
PRIMARY KEY
(RUL_ID, TITLE)
USING INDEX
&&TSP_INDS
);
Prompt Creating table CX_XPERTLINES
CREATE TABLE &&OWNER..CX_XPERTLINES
(
RUNNAME VARCHAR2(100) NOT NULL,
ITEMNO INTEGER NOT NULL,
LINENO INTEGER NOT NULL,
LINEPOS INTEGER NOT NULL,
RUL_ID INTEGER NOT NULL,
TITLE VARCHAR2(100) NOT NULL
)
&&TSP_TABS;
Prompt Creating table CX_XPERTITEMS
CREATE TABLE &&OWNER..CX_XPERTITEMS
(
RUNNAME VARCHAR2(100) NOT NULL,
ITEMNO INTEGER NOT NULL,
INSTANCE VARCHAR2(20) NOT NULL,
"SCHEMA" VARCHAR2(50) NOT NULL,
OBJNAME VARCHAR2(50) NOT NULL,
OBJTYPE VARCHAR2(100),
SCRIPT CLOB
)
&&TSP_TABS;
Prompt Adding primary key to CX_XPERTITEMS
ALTER TABLE &&OWNER..CX_XPERTITEMS ADD (
PRIMARY KEY
(RUNNAME, ITEMNO)
USING INDEX
&&TSP_INDS
);
Prompt Creating table CX_METRICS
CREATE TABLE &&OWNER..CX_METRICS
(
RUNNAME VARCHAR2(100) NOT NULL,
ITEMNO INTEGER NOT NULL,
SCORE FLOAT(126) NOT NULL,
MET_NAME VARCHAR2(50) NOT NULL,
MET_MEANING VARCHAR2(50) NOT NULL
)
&&TSP_TABS;
Prompt Adding primary key to CX_METRICS
ALTER TABLE &&OWNER..CX_METRICS ADD (
PRIMARY KEY
(RUNNAME, ITEMNO, MET_NAME, MET_MEANING)
USING INDEX
&&TSP_INDS
);
Prompt Creating table CX_XPERTRUN
CREATE TABLE &&OWNER..CX_XPERTRUN
(
RUN_ID INTEGER NOT NULL,
RUNNAME VARCHAR2(100) NOT NULL,
RUNDATE DATE NOT NULL,
RUNCOMMENT VARCHAR2(1000)
)
&&TSP_TABS;
Prompt Adding primary key to CX_XPERTRUN
ALTER TABLE &&OWNER..CX_XPERTRUN ADD (
PRIMARY KEY
(RUNNAME)
USING INDEX
&&TSP_INDS
);
Prompt Creating sequence CX_XPERTRUN_ID
CREATE SEQUENCE &&OWNER..CX_XPERTRUN_ID
START WITH 1
MAXVALUE 999999999999999999999999999
MINVALUE 1
NOCYCLE
NOCACHE
NOORDER;
Prompt Creating trigger CX_XPERTRUN_INSERT
CREATE TRIGGER &&OWNER..CX_XPERTRUN_INSERT
BEFORE INSERT ON &&OWNER..CX_XPERTRUN
FOR EACH ROW
DECLARE
tmpVar NUMBER;
BEGIN
tmpVar := 0;
SELECT &&OWNER..CX_XPERTRUN_ID.NEXTVAL INTO tmpVar FROM dual;
:NEW.RUN_ID := tmpVar;
END CX_XPERTRUN_INSERT;
/
Prompt Creating table CX_METRICRANGES
CREATE TABLE &&OWNER..CX_METRICRANGES
(
MET_NAME VARCHAR2(50) NOT NULL,
MET_MEANING VARCHAR2(50) NOT NULL,
RANGE_LO FLOAT(126) NOT NULL,
RANGE_HI FLOAT(126) NOT NULL,
COLOR VARCHAR2(50) NOT NULL
)
&&TSP_TABS;
Prompt Adding primary key to CX_METRICRANGES
ALTER TABLE &&OWNER..CX_METRICRANGES ADD (
PRIMARY KEY
(MET_NAME, MET_MEANING)
USING INDEX
&&TSP_INDS
);
Prompt Granting SELECT, INSERT, UPDATE, DELETE on CX_CATEGORYS to PUBLIC
GRANT SELECT, INSERT, UPDATE, DELETE ON &&OWNER..CX_CATEGORYS TO PUBLIC;
Prompt Granting SELECT, INSERT, UPDATE, DELETE on CX_SEVERITYS to PUBLIC
GRANT SELECT, INSERT, UPDATE, DELETE ON &&OWNER..CX_SEVERITYS TO PUBLIC;
Prompt Granting SELECT, INSERT, UPDATE, DELETE on CX_TYPES to PUBLIC
GRANT SELECT, INSERT, UPDATE, DELETE ON &&OWNER..CX_TYPES TO PUBLIC;
Prompt Granting SELECT, INSERT, UPDATE, DELETE on CX_BASERULES to PUBLIC
GRANT SELECT, INSERT, UPDATE, DELETE ON &&OWNER..CX_BASERULES TO PUBLIC;
Prompt Granting SELECT, INSERT, UPDATE, DELETE on CX_RULESETS to PUBLIC
GRANT SELECT, INSERT, UPDATE, DELETE ON &&OWNER..CX_RULESETS TO PUBLIC;
Prompt Granting SELECT, INSERT, UPDATE, DELETE on CX_SETRULES to PUBLIC
GRANT SELECT, INSERT, UPDATE, DELETE ON &&OWNER..CX_SETRULES TO PUBLIC;
Prompt Granting SELECT, INSERT, UPDATE, DELETE on CX_XPERTRUN to PUBLIC
GRANT SELECT, INSERT, UPDATE, DELETE ON &&OWNER..CX_XPERTRUN TO PUBLIC;
Prompt Granting SELECT, INSERT, UPDATE, DELETE on CX_XPERTITEMS to PUBLIC
GRANT SELECT, INSERT, UPDATE, DELETE ON &&OWNER..CX_XPERTITEMS TO PUBLIC;
Prompt Granting SELECT, INSERT, UPDATE, DELETE on CX_XPERTLINES to PUBLIC
GRANT SELECT, INSERT, UPDATE, DELETE ON &&OWNER..CX_XPERTLINES TO PUBLIC;
Prompt Granting SELECT, INSERT, UPDATE, DELETE on CX_METRICS to PUBLIC
GRANT SELECT, INSERT, UPDATE, DELETE ON &&OWNER..CX_METRICS TO PUBLIC;
Prompt Granting SELECT, INSERT, UPDATE, DELETE on CX_METRICRANGES to PUBLIC
GRANT SELECT, INSERT, UPDATE, DELETE ON &&OWNER..CX_METRICRANGES TO PUBLIC;
Prompt Creating public synonym QUEST_COM_CODEXPERT
CREATE PUBLIC SYNONYM QUEST_COM_CODEXPERT FOR &&OWNER..CX_XPERTRUN;
Prompt Creating public synonym CX_XPERTRUN
CREATE PUBLIC SYNONYM CX_XPERTRUN FOR &&OWNER..CX_XPERTRUN;
Prompt Creating public synonym CX_XPERTLINES
CREATE PUBLIC SYNONYM CX_XPERTLINES FOR &&OWNER..CX_XPERTLINES;
Prompt Creating public synonym CX_XPERTITEMS
CREATE PUBLIC SYNONYM CX_XPERTITEMS FOR &&OWNER..CX_XPERTITEMS;
Prompt Creating public synonym CX_TYPES
CREATE PUBLIC SYNONYM CX_TYPES FOR &&OWNER..CX_TYPES;
Prompt Creating public synonym CX_SEVERITYS
CREATE PUBLIC SYNONYM CX_SEVERITYS FOR &&OWNER..CX_SEVERITYS;
Prompt Creating public synonym CX_SETRULES
CREATE PUBLIC SYNONYM CX_SETRULES FOR &&OWNER..CX_SETRULES;
Prompt Creating public synonym CX_RULESETS
CREATE PUBLIC SYNONYM CX_RULESETS FOR &&OWNER..CX_RULESETS;
Prompt Creating public synonym CX_METRICS
CREATE PUBLIC SYNONYM CX_METRICS FOR &&OWNER..CX_METRICS;
Prompt Creating public synonym CX_METRICRANGES
CREATE PUBLIC SYNONYM CX_METRICRANGES FOR &&OWNER..CX_METRICRANGES;
Prompt Creating public synonym CX_CATEGORYS
CREATE PUBLIC SYNONYM CX_CATEGORYS FOR &&OWNER..CX_CATEGORYS;
Prompt Creating public synonym CX_BASERULES
CREATE PUBLIC SYNONYM CX_BASERULES FOR &&OWNER..CX_BASERULES;
Prompt ============================================================================
Prompt Creating/Upgrading Data Generation objects
Prompt ============================================================================
Prompt Creating package spec TOAD_DATAGEN
@"C:\Program Files (x86)\Quest Software\Toad for Oracle 10.6\data_gen.pks"
Prompt Creating package body TOAD_DATAGEN
@"C:\Program Files (x86)\Quest Software\Toad for Oracle 10.6\data_gen.plb"
Prompt Granting EXECUTE on TOAD_DATAGEN to PUBLIC
GRANT EXECUTE ON &&OWNER..TOAD_DATAGEN TO PUBLIC;
Prompt Creating public synonym TOAD_DATAGEN
CREATE OR REPLACE PUBLIC SYNONYM TOAD_DATAGEN FOR &&OWNER..TOAD_DATAGEN;
Wednesday, February 5, 2014
Monitoring standby database made easy
we can use a simple trick to check if the standby database is up to date or not :
The trick is we are going to create a table and populate it every minute on primary server with a scheduled job using a simple procedure.When we query the standby server we will see the table synced and if it is not the server is struck some where and has an issue.
Table DDL :
CREATE TABLE "ORACLE"."DG_SYNC_STATUS"
( "TSTAMP" TIMESTAMP (6),
"DB_UNIQUE_NAME" VARCHAR2(30 BYTE),
"PRIMARY_SCN" NUMBER,
"STANDBY_SCN" NUMBER,
"PROTECTION_MODE" VARCHAR2(20 BYTE),
"PROTECTION_LEVEL" VARCHAR2(20 BYTE)
) TABLESPACE "USERS" ;
then we will create a simple procedure to populate the table every minute and this also will cleanup rows older than sysdate -3 so you don't have to worry about cleaning it up or space issues.
create or replace
PROCEDURE DG_SYNC_STATUS_CHECK_PRC
AS
BEGIN
INSERT INTO DG_SYNC_STATUS (TSTAMP,DB_UNIQUE_NAME,PRIMARY_SCN,PROTECTION_MODE,PROTECTION_LEVEL)
SELECT SYSTIMESTAMP, DB_UNIQUE_NAME, CURRENT_SCN, PROTECTION_MODE, PROTECTION_LEVEL
FROM V$DATABASE ;
DELETE FROM DG_SYNC_STATUS
WHERE TSTAMP < SYSTIMESTAMP - 3;
COMMIT;
END;
Once the table and procedure is created.schedule a job to execute this procedure to populate table every minute.here is sample screenshot for your scheduled job.
here is sample output of table being populated
That's it easy and simple way to check if the databases are in sync are not.Don't forget that you have to query the standby server to check if they are in sync or not.
Not a big solution but help full if you want to check daily.
The trick is we are going to create a table and populate it every minute on primary server with a scheduled job using a simple procedure.When we query the standby server we will see the table synced and if it is not the server is struck some where and has an issue.
Table DDL :
CREATE TABLE "ORACLE"."DG_SYNC_STATUS"
( "TSTAMP" TIMESTAMP (6),
"DB_UNIQUE_NAME" VARCHAR2(30 BYTE),
"PRIMARY_SCN" NUMBER,
"STANDBY_SCN" NUMBER,
"PROTECTION_MODE" VARCHAR2(20 BYTE),
"PROTECTION_LEVEL" VARCHAR2(20 BYTE)
) TABLESPACE "USERS" ;
then we will create a simple procedure to populate the table every minute and this also will cleanup rows older than sysdate -3 so you don't have to worry about cleaning it up or space issues.
create or replace
PROCEDURE DG_SYNC_STATUS_CHECK_PRC
AS
BEGIN
INSERT INTO DG_SYNC_STATUS (TSTAMP,DB_UNIQUE_NAME,PRIMARY_SCN,PROTECTION_MODE,PROTECTION_LEVEL)
SELECT SYSTIMESTAMP, DB_UNIQUE_NAME, CURRENT_SCN, PROTECTION_MODE, PROTECTION_LEVEL
FROM V$DATABASE ;
DELETE FROM DG_SYNC_STATUS
WHERE TSTAMP < SYSTIMESTAMP - 3;
COMMIT;
END;
Once the table and procedure is created.schedule a job to execute this procedure to populate table every minute.here is sample screenshot for your scheduled job.
here is sample output of table being populated
That's it easy and simple way to check if the databases are in sync are not.Don't forget that you have to query the standby server to check if they are in sync or not.
Not a big solution but help full if you want to check daily.
Tuesday, February 4, 2014
ORA-00301: error in adding log file 'stdby02.log' - file cannot be created
SQL> alter database add standby logfile '/u02/oracle/oradata/stdby01.log' size 512M;
Database altered.
SQL> alter database add standby logfile '/u02/oracle/oradata/stdby02.log' size 512M;
Database altered.
SQL> alter database drop standby logfile '/u02/oracle/oradata/stdby01.log';
Database altered.
SQL> SELECT GROUP#,THREAD#,SEQUENCE#,ARCHIVED,STATUS FROM V$STANDBY_LOG;
GROUP# THREAD# SEQUENCE# ARC STATU
------ ---------- ---------- --- -----
6 0 0 YES UNASS
IGNED
SQL> alter database drop standby logfile '/u02/oracle/oradata//stdby02.log';
Database altered.
SQL> SELECT GROUP#,THREAD#,SEQUENCE#,ARCHIVED,STATUS FROM V$STANDBY_LOG;
no rows selected
SQL> ALTER DATABASE ADD STANDBY LOGFILE '/u02/oracle/oradata/stdby01.log' size 512M;
ALTER DATABASE ADD STANDBY LOGFILE '/u02/oracle/oradata/stdby01.log' size 512M
*
ERROR at line 1:
ORA-00301: error in adding log file '/u02/oracle/oradata/stdby01.log' - file cannot be created
ORA-27038: created file already exists
Additional information: 1
SQL> alter database add standby logfile '/u02/oracle/oradata/stdby03.log' size 512M;
Database altered.
SQL> alter database add standby logfile '/u02/oracle/oradata/stdby04.log' size 512M;
Database altered.
Subscribe to:
Posts (Atom)