How to get the SQL which invoked a trigger
Hi,
I have a table from which the rows are getting deleted without our knowledge.
To track this I've put a trigger on delete of this table. I want to know which SQL is actually invoking this Delete trigger so that I can capture it inside the trigger and log it somewhere so that I can analyze from where this SQL is fired.
Please let me know if any one can help me regarding this.
Thanks,
Makrand
If possible try and explore the FGA (Fine Grained Auditing) option . You may not need to create any triggers on the table and look up V$ views.
Instead, define a RULE on the table. FGA will track the DML operation performed based on the RULE you defined
i.e Consider a policy/Rule defined on the table TEMP as follows.
begin
dbms_fga.add_policy (
object_schema => 'SCHEMA_NAME',
object_name => 'TEMP',
policy_name => 'TEMP_DELETE',
audit_column => NULL,
audit_condition => NULL,
statement_types => 'DELETE'
end;
DBA_FGA_AUDIT_TRAIL view can then give you all the information required.
You will need to have execute privilege on DBMS_FGA package.
FGA will help if you are on 10g. In 9i it has a limitation – It can only use SELECT and not the other DML operations. So if you are on 9i, follow what the other members have mentioned ‘cause FGA will not be of much help to you.
I[b] have not used this feature - Maybe you can give it a try and update the forum members. The limitation using FGA is that Auditing on the table is still enabled when ROLLBACK statement is issued.
My preference will be using this feature instead of writing triggers on the table.
Try using Google search and get more info on the FGA.. Good Luck !
Shailender Mehta
Similar Messages
-
How to get the sql which executing?
I want to know the query sql runing in timesten? how can I get it?
For example, in oracle 9i we can use below sql to get the query sql runinig in oracle.
1.select OSUSER, PROGRAM, USERNAME, SCHEMANAME, B.Cpu_Time, STATUS, B.SQL_TEXT
2. from V$SESSION A
3. LEFT JOIN V$SQL B ON A.SQL_ADDRESS = B.ADDRESS
4. AND A.SQL_HASH_VALUE = B.HASH_VALUE
5. order by b.cpu_time desc
thanks!Sorry, there is no way to get this information in TimesTen. You can use internal tracing to see each SQL statement as it is executed but (a) the performance hit is severe and (b) there is no timing or CPU usage information available.
If you want to know how long a specific SQL statement takes to execute you need to add timing instrumentation to your application code.
Chris -
How to get the SQL Signon that Agent Jobs "Run As" or "Executed as User"
How to get the SQL Signon that Agent Jobs "Run As" or "Executed as User"?
I have an install SQL scripts that creates a Linked Server. I want to put some security on the Linked Server and only grant the Agent Job Signon (the "Run As" or "Executed as User") access to the linked server. I need to retrieve the
Agent Job Signon (something like "NT SERVICE\SQLAgent$FIDEV360BI02").
I could query certain jobs and SUBSTRING the Message column - using some form of the query below, which would return "Executed as user: NT SERVICE\SQLAgent$SSDEVBI02. The step succeeded." But that is pretty imprecise.
use msdb
SELECT [JobName] = JOB.name,
[Step] = HIST.step_id,
[StepName] = HIST.step_name,
[Message] = HIST.message,
[Status] = CASE WHEN HIST.run_status = 0 THEN 'Failed'
WHEN HIST.run_status = 1 THEN 'Succeeded'
WHEN HIST.run_status = 2 THEN 'Retry'
WHEN HIST.run_status = 3 THEN 'Canceled'
END,
[RunDate] = HIST.run_date,
[RunTime] = HIST.run_time,
[Duration] = HIST.run_duration,
[Retries] = HIST.retries_attempted
FROM sysjobs JOB
INNER JOIN sysjobhistory HIST ON HIST.job_id = JOB.job_id
-- CHANGE THIS
-- WHERE JOB.name like '%GroupMaster%' or Job.name like '%etlv%'
ORDER BY HIST.run_date, HIST.run_timeby default all sql jobs are executed as sql server agent account, unless otherwise a proxy is setup.
you can get the proxy information as Olaf mentioned, if the proxy_id is null for the step, it implies that the job step was executed as sql server service account and in such case it will be null
so, if it is null, it ran as sql server agent account.
so, one work around is get the sql server agent service account and if the proxy is null, that means it ran as sql server agent account, so, use isnull function. the disadvantage would be if the sql server agent account was switched, you might not get the
accurate information as the new account will show up though the job really ran as old account, to get this information, you need to get this from the logmessage column as you mentioned above.
try this code...
/*from sql 2008r2 sp1, you get the service accounts using tsql,otherwise you have to query the registry keys*/
declare @sqlserveragentaccount varchar(2000)
select @sqlserveragentaccount= service_account
from sys.dm_server_services
where servicename like '%sql%server%agent%'
select message,isnull(name,@sqlserveragentaccount) as AccountName
from sysjobhistory a inner join sysjobsteps b
on a.step_id=b.step_id and a.job_id=b.job_id
left outer join sysproxies c on c.proxy_id=b.proxy_id
Hope it Helps!! -
How to identify the SQLs which are using the tables and new columns
Hi
I m using oracle 10G Database in windows. Developers have added some columns in some of the database tables and were asking to check whether there is some impact on performance or not. I have not done this performance tuning before. Kindly help me how to proceed further.
How to obtain the sqls which are touching the tables and the new columns? It would be really great if you can help me with this.
ThanksYou can try to use DBA_DEPENDENCIES to get PL/SQL objects using tables: http://download.oracle.com/docs/cd/B19306_01/server.102/b14237/statviews_1041.htm#i1576452.
However if SQL code is not stored in database in a trigger, a procedure, a function, a package or a view, it is impossible to retrieve all SQL code referencing some table from database dictionary: for this you would have to analyze application source code. -
How to get the text which was clicked in a A href tag.
I am displaying the names from database in a page as hyperlink. When this hyperlink is clicked I want to display the corresponding address from DB. What the problem is when the link is clicked how to get the name which is clicked. I know only to link to a page using href. Now I want the text which has been clicked. Pls help.
Sorry to interrupt here!
For the code you suggested:
David,
if the target path is "http://localhost/testing.jsp", then
the code would become:
David.
So what would the difference between the code shown above and this code:
David
What is the function for these two symbols: "<<" and ">>"? -
How to get the records which has a specified x/y coordinates
Hi,
How to get the records which has a specified x/y coordinates. I have a table which has street data. And another table has a point data. Now I just want to get the records from street data which includes the points in the point data table. Can any one give your suggestions
Thanks and Regards
AravindanAravinda,
If you want to find the line segments which intersect the given
set of points, you can do that with SDO_RELATE.
siva -
How to get the SQL file name in SQL*plus
hi all,
I have created two sql file at C drive as "c:\Createtable.sql" and "c:\Deletetable.sql"
afterwards i open
C:\>sqlplus
SQL*Plus: Release 10.2.0.1.0 - Production on Wed Jan 30 11:37:10 2008
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Enter user-name: scott/tiger
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL> @C:\Createtable.sql'
Table created.
SQL> @'C:\Deletetable.sql'
Table dropped.
SQL>My problem is to get the name of the file as "c:\createtable.sql" and "C:\Deletetable.sql" in sql*plus enviornment.
Thanks & Regards
SinghDear Damorgan,
>>your version number to three decimal places
My Oracle DB Version i have already stated in my previous post is 10.2.0.1.0
Actually my problem is to get the sql files name we run in sqlplus enviornment with @ symbol. like
i have created one sql file in c drive as
"C:\Createtable.sql"
afterwords i have connected to sqlplus as
sql> conn scott/tiger
sql>@c:\createtable.sql
Now i want some query to get the name of the file which is run.
In actual my problem is as
i have suppose 10 or more SQL files in some folder ( sql1.sql, sql2.sql, sql3.sql ....).
i created one file to call all the 10 sql files (main.sql)
i have also one track_table which will keep track that which sql file is runned.
I want some automated script which will insert the record in that track_table....... for that i need the name of sql file which is runned.
Hope this will help you.
Thanks & Regards
Singh -
How to get the SQL queries based on SQL_ID.
Hi Experts,
I want to get the SQL queries based on SQL_ID.
I have tried the following query,but I am not getting full query.
[code]SET linesize 132 pagesize 999
column sql_fulltext format a60 word_wrap
break on sql_text skip 1
SELECT REPLACE (TRANSLATE (sql_text, '0123456789', '999999999'), '9', ''),sql_id
FROM dba_hist_sqltext s
WHERE s.sql_id = '7tvurftg8zryb';[/code]
One of my friend said use grid to get full query text.
Can you please help me how to use grid ,else any other method to get the full query based on SQL_ID.
Please help me.
Thanks in advance.You have these many options to set, if sql_text is really huge. But better use a tool(TOAD) as it's really helpful and easy to use instead! (See my previous comment).
column sql_text format A10000
set echo off
set head off
set feed off
set verify off
set termout off
set lines 10000
set long 1000000
set trimspool on
set pages 0
Thanks! -
I cannot figure how to get the text(SQL statement) from a system view(i guess it is in a system view... but witch??). 'Till now i have the sql_address and the sql_hash_value..
I know it is possible.. EM does it ... so i should be able to do the same..
ps:I use 9.2v$sql ?
-
How to get the Sql inside Omni SQL portlet.
Hi,
We are trying to find a table/view which stores/holds the Sql and Pl/Sql code of Omni Pl/sql portlets.
Thanks,
Ram.by default all sql jobs are executed as sql server agent account, unless otherwise a proxy is setup.
you can get the proxy information as Olaf mentioned, if the proxy_id is null for the step, it implies that the job step was executed as sql server service account and in such case it will be null
so, if it is null, it ran as sql server agent account.
so, one work around is get the sql server agent service account and if the proxy is null, that means it ran as sql server agent account, so, use isnull function. the disadvantage would be if the sql server agent account was switched, you might not get the
accurate information as the new account will show up though the job really ran as old account, to get this information, you need to get this from the logmessage column as you mentioned above.
try this code...
/*from sql 2008r2 sp1, you get the service accounts using tsql,otherwise you have to query the registry keys*/
declare @sqlserveragentaccount varchar(2000)
select @sqlserveragentaccount= service_account
from sys.dm_server_services
where servicename like '%sql%server%agent%'
select message,isnull(name,@sqlserveragentaccount) as AccountName
from sysjobhistory a inner join sysjobsteps b
on a.step_id=b.step_id and a.job_id=b.job_id
left outer join sysproxies c on c.proxy_id=b.proxy_id
Hope it Helps!! -
How to get the SQL Execution Plan from complex Extractors ?
Hi
I am looking for a way to get the
SQL Execution Plan(s!)
from
Complex Extractors like 0CO_OM_CCA_9 ?
Anybody has got a suggestion ?
How to get this in SM50 ?
ThanXs
MartinIdentifying the query is the hard part. If you can identify it(based on table access or some such parameter, getting the execution plan is easy in ST04 .
-
How to get the username in "atfer serverror" trigger ?
Hi folks;
How to get the name of the user who just miss his connection to the database in a "after serverror" trigger ?
The code of the trigger :
create or replace
TRIGGER TRG_LOGGON_FAILURES
AFTER SERVERERROR ON DATABASE
BEGIN
IF (IS_SERVERERROR(1017)) THEN
UPDATE utilisateur_ora SET UTO_STA='BLOQUE', UTO_DATE_STATUT=sysdate WHERE UTO_USR_GPL=<var_user>;
COMMIT;
END IF;
END;OK !
Use that maybe good :
select USERID into v_user from sys.aud$
where ntimestamp#=(
select max(ntimestamp#)
from sys.aud$ ); -
How to get the sql id and sql text for the pid which is completed.
Hi All,
I like to know how the get the details of sql_id and sql_text using the proecess which is completed already (ie., no more showing in the top command).
But I have the details of the process id.
Database name: 11g
os: sun os
thanks
Edited by: user9354175 on Nov 8, 2010 10:42 AMIf the session is still connected you might try this:
- query v$process where spid = os-process-number
- then join v$process to v$session using ADDR (in process) to PADDR (in session)
- then look at PREV_SQL_ID in v$session.
- use that to get the SQL_TEXT in for instance V$SQLAREA.
Could work, if all info is still in the SGA... -
How to get the document which is associated with a process having specific Guid value?
when a PDF file is opened, AcroRd32.exe is started automatically, and we get the GUID value of that adobe reader.
In c#, can't we get the document associated with the GUID value, I mean the total PDF file which is opened in adobe reader at runtime.
Here I'm struck up in code, can anyone suggest how to where I was missing something.
Acrobat.CAcroAVDoc AcroAvDoc;
Type AcrobatCAcroType;
AcrobatCAcroType = Type.GetTypeFromCLSID(new Guid("{CA8A9780-280D-11CF-A24D-444553540000}")); This CLSID is of adobe reader's.
///////Here I think I'm missing something
Object obj = Activator.CreateInstance(AcrobatCAcroType);
AcroAvDoc = (Acrobat.CAcroAVDoc)obj;
I think I can get the full PDF document with AcroAvDoc.GetPDDoc();
Thank you...Post your question in the forum for Acrobat SDK.
-
How to get the sql query result?
Hi,
Currently I am using LV2012 to connect a Oracle database server. After the installations/settings for Oracle Express and Oracle ODBC driver done.
I am sucessfully to use the SQL command to query the data through my window command prompt.
Now the problem is, how I do the same task in Labview by using the database connectivity toolkits?
I have build a VI for query as attached, but i have no idea what pallete to use to get the query result.
Please help me ~~
Solved!
Go to Solution.
Attachments:
Query.vi 9 KBHere is a piece of code I use to test SQL commands, you can use the part that retrieves sql results.
It is also possible to get the column headers back, but that is for next lesson!
Attachments:
RunSQLCommand.vi 30 KB
Maybe you are looking for
-
RFC Webservice in Service Registry?
Hi, Is it possible to publish, a webservice generated out of an RFC in any of the R/3 system or a webservice from any third party application within our landscape, to the Service registry available for that landscape? If Yes, how and if No then Why?
-
Getting the folder name of the service in Tomcat 5.5
Hi, I am using Tomcat 5.5. I have a problem getting the folder name my service is located in. Ex. \webapps\myApp\... Here i would like the string "myApp" - does anyone know how to get this? The reason for this is that i use a war file to deploy "myAp
-
My music is gone... 2nd time
My son was over the other week, I had my iphone plugged into home PC for charging. My son then plugs his into the same pc for charging. His isn't recognizing and charging, so he unplugs it and replugs in. Finally it starts to charge. Off to bed, next
-
What if two service modules fail on a MDS 9513?
Hello, We recently had a service module failure on one of our core MDS 9513 directors. It is fixed now but I was wondering what would happen if the second service module had failed as well a bit later... Will the director still function? All line car
-
Differences between Siebel Analytics and OBIEE
Hello Experts, Can anyone explain me what are the major differences between Siebel Analytics and OBIEE. I know that the look & feel and cost have got some changes. Other than that can any one tell me any functionality changes or enhancements that too