Does oracle store transaction date of data? - oracle

Im currently using oracle 11g. I had extracted data from the schema once at a specific date to do some cleansing process. Suppose that now i would want to extract again but only with new/updated data from the last date i extracted, is there anyway i could get it? unfortunately these data does not have any column that store last edited date.
i was wondering if Oracle would automatically store that type of info that i could check? perhaps any transaction log?
Thanks,
A Physal

One way would be to enable flashback and then you can do:
SELECT * FROM table1
MINUS
SELECT * FROM table1 AS OF TIMESTAMP TIMESTAMP '2018-01-01 00:00:00.000';
To get all the rows changed since 2018-01-01.

Related

Retrieve from dynamically named tables

I'm using Talend Open Studio for Data Integration.
I have tables that are generated every day and table names are suffixed by date like so
dailystats20220127
dailystats20220126
dailystats20220125
dailystats20220124
I have two-part question.
I want to look at the table which has yesterday's date in it so sysdate - 1 and I want to fetch data from yesterday
select 'dailystats' ||to_char(sysdate - 1,'YYYYMMDD') TableName
from dual;
How do I retrieve schema for a dynamic name?
How do I pull data from that table.
I've worked with static table names and its a straightforward process.
If the schema is always the same, you just define it once in your input component.
In your input component set the sql as :
"select [fields] from dailystats"+ TalendDate.formatDate("yyyyMMdd", TalendDate.addDate(TalendDate.getCurrentDate(), -1, "dd"))

Quickest way to copy over table data in oracle/postgresql

I'm looking at a spring boot application that is used to copy data from temp to permanent table based on last updated date. It copies only if last updated date is greater than desired date, so not all records are copied over. Currently the table has around 300K+ records and the process with spring JPA is taking over 2 hours (for all of them) and is not at all feasible. The goal is to bring it down to under 15 mins maximum. I'm trying to see how much difference using JDBCtemplate would bring in. Would a pl/sql script be a better option? Also wanted to see if there are better options out there. Appreciate your time.
Using oracle database at the moment but postgresql migration is on the cards.
Thanks!
You can do this operation with a straight SQL query (which will work on Oracle or PostgreSQL). Assuming your temp_table has the same columns as the permanent table, the last updated date column is called last_updated and you wanted to copy all records updated since 2020-05-03 you could write a query like:
INSERT INTO perm_table
SELECT *
FROM temp_table
WHERE last_updated > TO_DATE('2020-05-03', 'YYYY-MM-DD')
In your app you would pass '2020-05-03' via a placeholder either directly or via JdbcTemplate.

how to fetch last access TIMESTAMP of a table in oracle?

How to fetch the last access date for a table in oracle using the query from Oracle DB?
I am using select TIMESTAMP from dba_tab_modifications query it's giving me last updates in table
but I need last execution of select query statement on a particular table
Thanks in Advance
Sai Kumar
Oracle does not keep this information by default. You need to enable the appropriate AUDIT rules. But I'd question what problem you think this will solve. Auditing every access to a table will be a lot of audit records.

Function to query data import date when there is no "created at" column in Oracle

I have a read-only Oracle Spatial dB. Data is imported each hour through a FME workflow. No column for the timestamp of the import has been created.
I am wondering if Oracle stores this somewhere internally anyway and whether there is some function allowing to query this data ?
Yes, it does. It stores the system clock ("system change number" / SCN) of the last change in every database block (or every row if the table was created with ROWDEPENDENCIES).
You can use it as a pseudocolumn, so just add it to a query:
SELECT id, ora_rowscn FROM my_table;
For the last x days Oracle keeps a translation table that translates SCN to real time, which you can use with the function SCN_TO_TIMESTAMP:
SELECT id, ora_rowscn, scn_to_timestamp(ora_rowscn) FROM my_table;
Details and documentation is here.

How to get all contents of oracle meta data? with respect to Time_stamp

How to get all content of oracle meta data?
I want to access the meta data of oracle. I want to get the time_stamp for every event generated by any user like (select, update, insert, delete). How to get this information from the meta data of the oracle database?
For example. If User-A comes and insert some record into the oracle database. Then that Time of insertion is stored in the meta data. How to access that time?
per-command timestamp
If you want per-command timestamp, that is, if you want to get the timestamp of some precise command like INSERT INTO this VALUES(that_and_that) then:
AUDIT SELECT, UPDATE, INSERT, DELETE ON user.the_table ...
SELECT * FROM dba_audit_trail ;
per-row timestamp
If you want per-row timestamp, that is, if you want to check each row of a table and see when each row have been last UPDATEd, then you need your own customized solution with CREATE TRIGGER AFTER INSERT OR UPDATE trigger separately for each table . There is no out-of-box solution for this in Oracle.

Resources