Tom Kyte

Subscribe to Tom Kyte feed Tom Kyte
These are the most recently asked questions on Ask Tom
Updated: 12 hours 37 min ago

Factors Affecting Rollback Speed

Thu, 2024-07-11 02:26
Hey Tom, 1. I would like to know the factors influencing the rollback speed of a transaction. And why does it generally take more than the time it took for the actual transaction. Could you show some light on this? 2. I read one of your answers where you have said "A rollback is a logical operation, if you just did 1,000,000 row inserts and roll them back - we now have 1,000,000 deletes to perform (including the index maintenance and everything) rollback insert = do a logical delete rollback delete = do a logical insert rollback update = do a logical update to put it back the way it was" How does the objects lock work here is it the same mechanism how the actual DML was done, or it will be different?
Categories: DBA Blogs

CRUD APIs in Oracle Database

Fri, 2024-07-05 18:46
Hi, What are the best practices to develop CRUD/DML APIs (using packages or subprograms) in Oracle. If i want to insert, read, update or delete data, i want to do it through APIs. Furthermore, what can be the possible cons of using APIs instead of using normal queries in web applications? Thank you.
Categories: DBA Blogs

SqlCLI Apex Export not included Application Audit Informations

Fri, 2024-07-05 18:46
Hi! We have a lot of Apex apps, so we check the LAST_UPDATED_ON value in both the production and dev apps before deploying to production. Like this: <code> select d.APPLICATION_ID , d.APPLICATION_NAME , d.ALIAS , d.OWNER DEV_OWNER , p.OWNER PERP01_OWNER , d.LAST_UPDATED_ON DEV , p.LAST_UPDATED_ON PERP01 , case when d.LAST_UPDATED_ON < p.LAST_UPDATED_ON then 'PROD' when d.LAST_UPDATED_ON > p.LAST_UPDATED_ON then 'DEV' else null end LAST from apex_240100.APEX_APPLICATIONS@DEV d left outer join apex_240100.APEX_APPLICATIONS@PROD p on p.workspace = d.workspace and p.application_id = d.application_id where d.WORKSPACE = 'WS' order by d.LAST_UPDATED_ON desc; </code> After the 24.1 installation, in the case of applications exported with SQLCLI, if the application is imported into the production environment, the values ??of LAST_UPDATED_ON and LAST_UPDATED_BY will be empty. Any suggestions?
Categories: DBA Blogs

how to know if a PDF is digitally signed

Thu, 2024-07-04 06:06
Hello. I have an application in which users upload PDFs to a table. How can I check in PL/SQL if a PDF in a blob is digitally signed? Ideally I'd like to know if the signature is valid, but just knowing if a file is not signed would be enough to reject it and save manual work. Thanks
Categories: DBA Blogs

PARTITION RANGE ITERATOR

Thu, 2024-07-04 06:06
hello , i have a table TDRCORE.FCM_CCBF , PARTITION BY RANGE (RQO_PROC_UTC_DATETIME TIMESTAMP(6)) INTERVAL( NUMTODSINTERVAL(7, 'DAY')) tehre is an SQL running on LIVE db that comtains many unions but i will not post full script , i will post just 1 part of the union (all the other selects in this union are exatly the same , just different tables) /* Formatted on 03-Jul-24 10:36:19 (QP5 v5.294) */ <code> ALTER SESSION SET CURRENT_SCHEMA=TDRCORE; EXPLAIN PLAN FOR WITH currTime AS (SELECT TO_TIMESTAMP ( TO_CHAR (SYS_EXTRACT_UTC (CURRENT_TIMESTAMP), 'YYYY-MM-DD HH24:MI:SS'), 'YYYY-MM-DD HH24:MI:SS') AS endts FROM DUAL) (SELECT 'FCM_CCBF' AS DBTABLE, t26.CMX_TRAN_ID AS CMX_TRAN_ID, t26.CMX_CREATE_TIMESTAMP, currTime.endts, CASE WHEN ( ( COALESCE (t26.WAX_USER_FRAUD_A_IND, '0') || COALESCE (t26.WAX_USER_FRAUD_B_IND, '0') || COALESCE (t26.WAX_USER_FRAUD_C_IND, '0') || COALESCE (t26.WAX_USER_FRAUD_D_IND, '0') || COALESCE (t26.WAX_USER_FRAUD_H_IND, '0') || COALESCE (t26.WAX_USER_FRAUD_M_IND, '0') || COALESCE (t26.WAX_USER_FRAUD_O_IND, '0') || COALESCE (t26.WAX_USER_FRAUD_P_IND, '0') || COALESCE (t26.WAX_USER_FRAUD_R_IND, '0') || COALESCE (t26.WAX_USER_FRAUD_T_IND, '0') || COALESCE (t26.WAX_USER_FRAUD_W_IND, '0') || COALESCE (t26.WAX_USER_FRAUD_X_IND, '0'))) > 0 OR ( t26.WAX_SCORE_1_TAG IN ('1', '3') OR t26.WAX_SCORE_2_TAG IN ('1', '3') OR t26.WAX_SCORE_3_TAG IN ('1', '3') OR t26.WAX_SCORE_4_TAG IN ('1', '3')) THEN 1 ELSE 0 END AS FRAUD_IND, TRIM (t26.RRR_MODEL_ID_1) AS "RRR_MODEL_ID_1", TRIM (t26.RRR_MODEL_ID_2) AS "RRR_MODEL_ID_2", TRIM (t26.RRR_MODEL_ID_3) AS "RRR_MODEL_ID_3", TRIM (t26.RRR_MODEL_ID_4) AS "RRR_MODEL_ID_4", TRIM (t26.RRR_MODEL_SCORE_1) AS "RRR_MODEL_SCORE_1", TRIM (t26.RRR_MODEL_SCORE_2) AS "RRR_MODEL_SCORE_2", TRIM (t26.RRR_MODEL_SCORE_3) AS "RRR_MODEL_SCORE_3", TRIM (t26.RRR_MODEL_SCORE_4) AS "RRR_MODEL_SCORE_4", TRIM (t26.RRR_MODEL_VERSION_1) AS "RRR_MODEL_VERSION_1", TRIM (t26.RRR_MODEL_VERSION_2) AS "RR...
Categories: DBA Blogs

shared_pool_size and the streams_pool_size parameters

Thu, 2024-07-04 06:06
Can the shared_pool_size and the streams_pool_size parameters be set to the same value? Both parameters are currently set to zero. I would like to set them both to 2g. I will need to use about 1.5g of the streams_pool memory for Golden Gate. Will this work? Thanks much for your help.
Categories: DBA Blogs

UNDO tablespace cannot support transaction

Thu, 2024-07-04 06:06
Hi, Due to my work environment, I'm not allowed to cut and paste from my environment. As a result of that I cannot provide a specific test case, but just gives symptoms, would you give me general guidance on how to approach this problem? I'm running a huge insert 10878201 rows, and each record is quite fat, it has about 50 or 60 columns. The query was issued from Toad and the connection handle was lost because Toad froze and then when restarted the same connection handle was lost. However, I did a DBMS_SESSION trace enable on the sid, serial#, and got a lot of UNDO segment info in the trace file and then finally it says in the trace: Problem: Undo tablespace cannot support required UNDO retention Recommendation: Size UNDO tablespace to 3702 MB However, there are 11 datafiles (32G * 11) in the UNDO and AFAIK my (Insert into SELECT * from huge table) was the only Active USER transaction that day (4 days back). Somehow the tablespace allocated could have easily supported the UNDO_RETENTION (28800). REDO Logs: There are 4 log groups (2 per thread), each is 200MB, this particular transaction is running on thread 1 of RAC node1. 1) Shall I try to split the transactions into manageable size chunks and commit every 10000 rows or so? 2) Will resizing the REDO log size help? Adding significant info to this question: I get a "ORA-30036" in the trace file generated about 4days back when Toad froze. However, the session still shows up as ACTIVE in gv$session and last_call_et keeps on inreasing. I hope this added info will help Thanks
Categories: DBA Blogs

Loading External Data, Flat file, into an Oracle Table.

Wed, 2024-07-03 11:46
Hi Tom, I need to come up with an automated method to insert data (xml_type) from an external flat file into to a table in Oracle Database using SQL Developer. Read some articles which shows how to load the files by using a control file, but I couldn't find any article about how to automate the process. Your help is greatly appreciated. Thanks, Chat
Categories: DBA Blogs

Using pragma inline to affect every invocation of the specified subprogram

Wed, 2024-06-26 14:46
I understand how to use the online pragma before the invocation of a subprogram that should be inline, but based on the Oracle documentation (https://docs.oracle.com/en/database/oracle/oracle-database/19/lnpls/plsql-optimization-and-tuning.html#GUID-2E78813E-CF29-409D-9F8B-AA24B294BFA2) it should also be possible to use pragma inline to affect every invocation of the specified subprogram: <i>When the INLINE pragma immediately precedes a declaration, it affects: Every invocation of the specified subprogram in that declaration</i> Unfortunately when trying to do so it seems as if this would not work as expected when reading the documentation: <code> ALTER SESSION SET PLSQL_WARNINGS = 'ENABLE:ALL'; CREATE OR REPLACE PACKAGE foo IS PROCEDURE bar; END foo; / CREATE OR REPLACE PACKAGE BODY foo IS PRAGMA INLINE (sub, 'YES'); PROCEDURE sub; PROCEDURE bar IS BEGIN dbms_output.put_line('bar'); sub; END bar; PROCEDURE sub IS BEGIN dbms_output.put_line('sub'); END sub; END foo; / SELECT * FROM user_errors; </code> PLW-05011: pragma INLINE for procedure 'SUB' does not apply to any calls
Categories: DBA Blogs

unable to successfully created Rest Enabled Sql

Wed, 2024-06-26 14:46
1) I am using oracle xe 21c database, apex 24.1 and deployed on tomcat 9.0.90 on my labtop 2) I try to connect my office server using Rest enabled sql service. Where I rest enabled entire schema 3) On my labtop when I try to connect it giving me error : The URL of this remote server does not point to a REST Enabled SQL service. Please check the details of your REST Enabled SQL service definition. 4) When I write same url in browser and ending with table name it showing the data. 5) Before 24.1 menas in 18.x to 20.x its working. 6) For rest enabled sql require same version of ords both side? Please guide because both side apex version and ords version are different (my labtop and my office server I am try using remotely ) 7) At my office I rest enabled schema from sql workshop->restfull service also run the following scripts BEGIN ORDS.enable_schema( p_enabled => TRUE, p_schema => 'SVM', p_url_mapping_type => 'BASE_PATH', p_url_mapping_pattern => 'hr', p_auto_rest_auth => FALSE ); COMMIT; END; / PLEASE REFERE THE ATTACHED VIDEO https://drive.google.com/file/d/1VONL-ngqD53xjnxKLWSzob63qtD-jSdy/view?usp=sharing same case appear on apex.oracle.com workspace :[redacted] username:[redacted] password :[redacted] Application id :[redacted] Rest enabled SQL service name : svm
Categories: DBA Blogs

Need a sql to find break hours hours between two dates and between 10PM to next day 6AM. 30mins break for every 4 hours

Wed, 2024-06-26 14:46
Could you please kindly check and advise on the following. i need to find break hours between two dates. and also i need to find if this break mins is within night hours (10PM to 6AM next day). ex: employee work schedule 11-MAY-2012 16:00:00 and 12-MAY-2012 09:00:00. Break hour that fall between 10PM to 6 AM is as follows 8:00PM to 8:30PM - 1st Break 12:30 Am to 1:00 AM - 2nd Break 5:00AM to 05:30 AM - 3rd break two of the breaks are between 10PM and 6AM next day hence my night hours break time is 60mins. i am using following, but is there any better solution <code> (SELECT COUNT(1) FROM (SELECT TO_CHAR ((:SHIFT_START + ((val*4.5)/24)), 'YYYY-MM-DD HH24:MI:SS') TIME ,VAL FROM (select to_number(val,0) VAL from (select distinct regexp_substr('1,2,3,4,5','[^,]+',1,level) val from dual connect by level <=regexp_count('1,2,3,4,5',',')+1 order by val) WHERE ROWNUM <= ( FLOOR ( ( 24 * ( TO_DATE ( TO_CHAR (:SHIFT_END, 'YYYY-MM-DD hh24:mi'), 'YYYY-MM-DD hh24:mi') - TO_DATE ( TO_CHAR (:SHIFT_START, 'YYYY-MM-DD hh24:mi'), 'YYYY-MM-DD hh24:mi'))) / 4)) ) ) DT WHERE TO_DATE (DT.TIME,'YYYY-MM-DD HH24:MI:SS') BETWEEN TO_DATE(TRUNC(:SHIFT_START),'YYYY-MM-DD HH24:MI:SS')+22/24 AND TO_DATE(TRUNC(:SHIFT_START),'YYYY-MM-DD HH24:MI:SS')+24/24+6/24 )*0.5 ELSE 0 END NIGHT_BREAK_HOURS</code> Appreciated your kind help in check and advise on this
Categories: DBA Blogs

LOB caching check

Wed, 2024-06-26 14:46
Hi, In order to improve reading performance of a LOB column in my table, I enable CACHE option for it. But when I check in the buffer cache using gv$bh (I did some SELECT queries on it so it can be cached), I cannot find any entries for my cached LOB. <code>SELECT * FROM gv$bh WHERE lobid = (SELECT object_id FROM dba_lobs lob, dba_objects obj WHERE lob.table_name = 'MY_TABLE' -- it contains only one lob column, so the returned result is unique AND lob.SEGMENT_NAME = obj.object_name AND lob.owner = obj.owner);</code> Is this the way to go? or I m missing something? Thanks.
Categories: DBA Blogs

not able to export AUDSYS.AUD$UNIFIED:SYS_P23021 -- same table/partition was exported w/o issues yesterday by job using full=yes

Wed, 2024-06-26 14:46
our Daily job expdp has full=yes and worked OK till last night. last night the expdp log showed: ORA-31693: Table data object "AUDSYS"."AUD$UNIFIED":"SYS_P23021" failed to load/unload and is being skipped due to error: ORA-02354: error in exporting/importing data ORA-08103: object no longer exists Attempt to manually backup the same using same user created to export full database - fails with: expdp $pcsbackup cluster=NO parallel=1 job_name=expdp_tbl DUMPFILE=expdp_gecdwp_full_2024_0618_222801_failedobjs_%U.dmp LOGFILE=expdp_gecdwp_full_2024_0618_222801_failedobjs.log directory=dir_dbexp exclude=statistics encryption=data_only ENCRYPTION_PASSWORD=***** ENCRYPTION_MODE=DUAL COMPRESSION=DATA_ONLY full=no tables=AUDSYS.AUD\$UNIFIED\:SYS_P23021 Export: Release 19.0.0.0.0 - Production on Wed Jun 19 09:03:27 2024 Version 19.20.0.0.0 Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved. Connected to: Oracle Database 19c EE Extreme Perf Release 19.0.0.0.0 - Production Starting "PCSBACKUP"."EXPDP_TBL": /********@gecdwp_pcsbackup cluster=NO parallel=1 job_name=expdp_tbl DUMPFILE=expdp_gecdwp_full_2024_0618_222801_failedobjs_%U.dmp LOGFILE=expdp_gecdwp_full_2024_0618_222801_failedobjs.log directory=dir_dbexp exclude=statistics encryption=data_only ENCRYPTION_PASSWORD=******** ENCRYPTION_MODE=DUAL COMPRESSION=DATA_ONLY full=no tables=AUDSYS.AUD$UNIFIED:SYS_P23021 ORA-39166: Object AUDSYS.AUD$UNIFIED was not found or could not be exported or imported. ORA-31655: no data or metadata objects selected for job Job "PCSBACKUP"."EXPDP_TBL" completed with 2 error(s) at Wed Jun 19 09:04:08 2024 elapsed 0 00:00:39 tried different combos for table name: AUDSYS.AUD\$UNIFIED:SYS_P23021 -- AND ABOVE - same error expdp $pcsbackup cluster=NO parallel=1 job_name=expdp_tbl DUMPFILE=expdp_gecdwp_full_2024_0618_222801_failedobjs_%U.dmp LOGFILE=expdp_gecdwp_full_2024_0618_222801_failedobjs.log directory=dir_dbexp exclude=statistics encryption=data_only ENCRYPTION_PASSWORD=***** ENCRYPTION_MODE=DUAL COMPRESSION=DATA_ONLY full=no tables=AUDSYS.AUD$UNIFIED:SYS_P23021 Export: Release 19.0.0.0.0 - Production on Wed Jun 19 09:00:37 2024 Version 19.20.0.0.0 Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved. Connected to: Oracle Database 19c EE Extreme Perf Release 19.0.0.0.0 - Production Starting "PCSBACKUP"."EXPDP_TBL": /********@gecdwp_pcsbackup cluster=NO parallel=1 job_name=expdp_tbl DUMPFILE=expdp_gecdwp_full_2024_0618_222801_failedobjs_%U.dmp LOGFILE=expdp_gecdwp_full_2024_0618_222801_failedobjs.log directory=dir_dbexp exclude=statistics encryption=data_only ENCRYPTION_PASSWORD=******** ENCRYPTION_MODE=DUAL COMPRESSION=DATA_ONLY full=no tables=AUDSYS.AUD:SYS_P23021 ORA-39166: Object AUDSYS.AUD was not found or could not be exported or imported. ORA-31655: no data or metadata objects selected for job Job "PCSBACKUP"."EXPDP_TBL" completed with 2 error(s) ...
Categories: DBA Blogs

Export backup fails with ORA-39127: unexpected error from call to TAG: SCHEDULER Calling: SYS.DBMS_SCHED_CLASS_EXPORT.GRANT_EXP obj:

Wed, 2024-06-26 14:46
we see this error in the daily full=Y backup : Processing object type DATABASE_EXPORT/SCHEMA/PROCACT_SCHEMA ORA-39127: unexpected error from call to TAG: SCHEDULER Calling: SYS.DBMS_SCHED_CLASS_EXPORT.GRANT_EXP obj: SYS.IDX_RB$CLASS_54724 - SCHEDULER CLASS ORA-01031: insufficient privileges ORA-06512: at "SYS.DBMS_SCHED_MAIN_EXPORT", line 2601 ORA-06512: at "SYS.DBMS_SCHED_CLASS_EXPORT", line 41 ORA-06512: at line 1 ORA-06512: at "SYS.DBMS_SCHED_MAIN_EXPORT", line 2601 ORA-06512: at "SYS.DBMS_SCHED_CLASS_EXPORT", line 41 ORA-06512: at line 1 ORA-06512: at "SYS.DBMS_METADATA", line 11144 ORA-06512: at "SYS.DBMS_SYS_ERROR", line 95 Processing object type DATABASE_EXPORT/EARLY_POST_INSTANCE_IMPCALLOUT/MARKER But, when we checked ( as sysdba) - this object dosn't exist in the container that it runs: SYS.IDX_RB$CLASS_54724 no changes were made to the database/ shell script that runs the export datapump backup. we had seen the same issue on 10th june 2024, but without any changes the next days export backups ran good. yesterday - again the same error is seen. not sure what could be causing it - here is the export command that we use for daily backup: ( the $vars are location/filenames generated in script) expdp $pcsbackup job_name=${jobname}\ directory=DIR_DBEXP\ dumpfile=${dmpfile_name}\ logfile=${logfile_name}\ full=y\ cluster=no \ parallel=4\ exclude=STATISTICS\ exclude=SCHEMA:\" IN \(SELECT USERNAME FROM DBATOOL.EXPDP_EXCLUDE_DWP_BACKUP_TABLES\)\"\ ENCRYPTION=DATA_ONLY \ ENCRYPTION_PASSWORD=<OurProdEncPassowrd> \ ENCRYPTION_MODE=DUAL \ COMPRESSION=DATA_ONLY
Categories: DBA Blogs

APEX AI Assistance ? Does it comes out of the Box ? or We need to Pay to AI Provider like ChatGPT ?

Wed, 2024-06-26 14:46
Hi There, all the recent news about APEX AI Assistance for code generation ? doe sit comes out of the box ? or we need to configure and pay to AI/LLM provider like ChatGPT ? I am referring to your recent video Build AI-Powered Enterprise Apps Faster with Oracle APEX (https://www.youtube.com/watch?v=qZD8wtn7qoI ) Regards, Dr. Gyana
Categories: DBA Blogs

DBMS_CRYPTO

Fri, 2024-05-24 03:06
I need a example using DBMS_CRYPTO.SIGN. I'm need to sign a hash using RSA-SHA1 and I need to know if can i use DBMS_CRYPTO.SIGN?
Categories: DBA Blogs

Datafile name seems to have numbers and decimals - how does Oracle assign them?

Fri, 2024-05-24 03:06
Dear Tom, I am temporarily supporting a RAC, ASM database on 19c. I have to create a new tablespace. For the existing tablespaces I see that datafile names look like +IPAG_DATA/t5cnp1db/datafile/avos_dat.362.1067066741 I understand that +IPAG_DATA is the asm diskgroup name. t5cnp1db is database sid and avos_dat stands for the AVOS application whose data resides on this tablespace/datafile. What are the numbers 362 and 1067066741 ? for the new tablespace, I want to follow the same pattern, I can use my datafile name as +IPAG_DATA/t5cnp1db/datafile/odi_dat but how to get those numbers on my new datafile? Thank you for your help!
Categories: DBA Blogs

ORA-06502: PL/SQL: numeric or value error: Bulk Bind: Truncated Bind] when selecting rowid

Fri, 2024-05-24 03:06
declare cursor cur_collection_detail is select rowid,'ABC' col4, 'ABC' col1, 'ABC2' action_id from TAB1 where COL1= 1286165; begin for dtl in cur_collection_detail loop dbms_output.put_line('Test inprogress..'); end loop; end; / Error report - ORA-06502: PL/SQL: numeric or value error: Bulk Bind: Truncated Bind ORA-06512: at line 5 ORA-06512: at line 5 06502. 00000 - "PL/SQL: numeric or value error%s" *Cause: An arithmetic, numeric, string, conversion, or constraint error occurred. For example, this error occurs if an attempt is made to assign the value NULL to a variable declared NOT NULL, or if an attempt is made to assign an integer larger than 99 to a variable declared NUMBER(2). *Action: Change the data, how it is manipulated, or how it is declared so that values do not violate constraints. ROWID - length(rowid) *BAAfXwIFxAIdPkIWQ1VSUkVOQ1lfRVhDSEFOR0VfUkFURRdNWE47MjAxOC0wOC0xNjs7Q0FTSEVYMf4 80 *BAAfXwIFxAIdPkIWQ1VSUkVOQ1lfRVhDSEFOR0VfUkFURRdNWE47MjAxOC0wOC0xNjs7Q0hFQ0VYMf4 80
Categories: DBA Blogs

Reduce column size on a very huge non-partitioned table

Fri, 2024-05-24 03:06
I want to change the column size of a column from varchar2(100) to varchar2(50) on a non-partitioned table with 1138 Million records, yes 1.1 Billion. This project is not using Partitioned tables, so can't change the table structure. Could you please let me know a quicker approach other than alter statement to modify column and dbms_redefinition?
Categories: DBA Blogs

Oracle row compared to Mongo document

Tue, 2024-05-21 22:46
Good Morning, In the last year, I've started to support Mongo databases. Mongo stores data in BSON which is the binary form of JSON. JSON is just the field name followed by a value. This doesn't seem so different from Oracle since Oracle also its data in a series of columns with values. I'm curious to know how an Oracle row looks like. If a table has the following columns: -Fname string -Lname string -notes string If row has say, Fname='John' and Lname='Doe', does Oracle add the field names Fname and Lname to each row? Does the row look like this on disk: Fname='John', Lname='Doe', notes null or does it look like this: 'John','Doe', null My guess is that it looks like option 1. It would be nice if you could also provide what an Oracle row looks like on disk. Thank you John
Categories: DBA Blogs

Pages