Tuesday, August 12, 2025

Notes: XTTS incremental other way in same endianness

 XTTS incremental other way in same endianess:


Setup physical standby

Put tbspsc in ro

Stop replication

expdp full=y transportable=always

shutdown standby

keep other skeleton alive

impdp transport_Datafiles=<df list from standby>



So we achieve the XTTS incremental method here :)


This standby setup and replication usage in XTTS is hinted in 11.2 XTTS guide for cross platform.

Thursday, August 7, 2025

Real-Life Scenario Testing: Perplexity.ai Comet AI Browser

Real-Life Scenario Testing: Perplexity.ai Comet AI Browser

Perplexity.ai’s Comet AI browser is redefining what it means to work with intelligent browsing and automation. In this post, I share my hands-on experience putting Comet through a battery of real-life scenario tests—from intelligent search to coding assistance to web automation. Here’s an in-depth breakdown.

Youtube: 


Introduction and Purpose

The journey starts with a quick overview of why Comet AI browser is different and what the goal of these scenario tests is.

Experience with A.I. Models and Perplexity

With years of experience in AI and tech, I provide context for why Perplexity’s approach stands out, and the types of problems it aims to solve.

First Impressions: Features of Comet Browser

Exploring the sleek, innovative browser interface, I list standout features and compare them to conventional browsers.

YouTube Search Scenario

Putting Comet to the test, I check its skill in finding and summarizing YouTube content—turning a generic search into targeted knowledge retrieval.

Oracle Migration Script Scenario

Comet helps build and validate a complex Oracle migration script, showing off its development chops for enterprise challenges.

Chess.com Automation Test

Watch as Comet automates a game scenario on Chess.com, showcasing fluid web automation and smart task sequencing.

SQL Coding with livesql.oracle.com

From automating solutions to offering on-the-fly code fixes, I demonstrate how Comet can support both beginners and experts with SQL tasks.

Draw.io Architecture Diagram Challenge

I test Comet’s interactive capabilities by asking it to visually design a complicated architecture diagram in draw.io from just a text prompt.

Draw.io: Challenges & Repeated Attempts

Detailed look at the trial-and-error process, where each attempt brings new insights and approaches to solving diagram tasks.

Third Attempt and Discussion

A candid discussion on iterative improvement and learning curves using advanced AI-assisted workflows.

Feedback and Lessons Learned

I summarize the practical insights gained from using Comet, including tips for new users and what to watch for.

Conclusion & Takeaways

Rounding off the tests, I share my verdict: Comet is a powerful assistant for anyone looking to automate, learn, and boost productivity with AI-powered browsing.

Whether you are a tech enthusiast, developer, or just AI-curious, Perplexity.ai’s Comet browser deserves a spot in your digital toolkit. Try it for yourself and share your experiences below!


--------Actual handwritten text below---------

Try comet - perplexity's comet AI browser


What it is?

1. AI browser

2. Integerated with Perplexity AI engine

3. Agentic AI capable

4. Can control and perform tasks on bahalf of you in the browser window - browser assistant

5. Voice mode control is possible as well



Scenarios we are going to test:


1. Look for a specific video and action in youtube

Prompt: Search a video in youtube which show cases postgresql reaching 100k transactions per minute, navigate the video to the precise timeline.

Job: Completed


Prompt: Search a video in youtube which shows XTTS incremental v4 migration script failing because of TDE, navigate the video to the precise timeline.

Job: Completed -- Aced it


2. Play the game of chess aginst bot

prompt: Take over the chess game from me and try to win the game in less than 5 moves

Job: Failed after 3 moves, gave up.


3. Test SQL capability:

Prompt: Connect to livesql.oracle.com, try running a simple analytical query involving connect by clause

Job: Duece


4. Create the below architectural diagram using draw.io for BMC's control M stack

Prompt: Develop an interactive architectural diagram in draw.io for BMC's control M stack involving oracle as rdbms stack with dataguard for high availability. 

                Ensure the architecture diagram shows few client machines and end user interactions. The end users are sitting within W365 infrastructure. The actual control M servers and client machines are in azure cloud.

The HA setup for oracle should reside in 2 different azure regions.

The Control M and Enterprise manager stacks should sit in 2 different azure regions.

Use draw.io to draw an architectural diagram for BMC's control M stack involving oracle as rdbms stack with dataguard for high availability. 

                Ensure the architecture diagram shows few client machines and end user interactions. The end users are sitting within W365 infrastructure. The actual control M servers and client machines are in azure cloud.

The HA setup for oracle should reside in 2 different azure regions.

The Control M and Enterprise manager stacks should sit in 2 different azure regions.


Job: Failed, 3rd attempt was brave.


Tuesday, August 5, 2025

AI Use case: Assess vmstat data using gemini and generate charts and summary of the observation

Objective: Assess vmstat data using gemini and generate charts and summary of the observation.

CPU Loader:

for i in 1; do while : ; do : ; done & done


Ask AI to process first the raw vmstat output: It mostly will fail

Prompt for raw data processing:

Can you please process the attached vmstat file and generate a vertically sliced metrics chart and summary?

Failed!!!!

A) preprocess in notepad++

1) Replace all whitespaces to , in notepad++

find: \x20+ 

repace: ,

2)First character to become ,:

find: ^(\d+)\,

replace: ,$1,

3) Remove the repeated vmstat headers
find and bookmark such lines 
delete all bookmarked lines

Ask AI now to process the preprocessed output file and generate graph. It will succeed
prompt: Can you please process the attached vmstat csv file and generate a vertically sliced metrics chart and summary?

Outputs:

First version:

Revisions:








This should help!
Thanks

ORA-08177 Oracle RDBMS & Spring Batch framework

 Dear Readers,

Migration from Oracle RAC to Standalone database resulted in ORA-08177 error with few batch processes.


ORA-08177: can't serialize access for this transaction


The uniqueness amongst the batches are they are all written using spring batch frame work.

I saw the data model of the frame work on the db and I can confirm they are spring batch.

It had all the tables as mentioned in the below screenshot. The same can be found here



The reason for the error is even documented in the spring batch framework document here.



But one would wonder why such error message may come...

1. Since it is the same serialization in both standalone and rac db. But why standalone alone affected vs RAC no impact for several years.

2. No concurrent transactions were run on the db

This is where oracle on the SR I submitted confirmed that oracle RAC's multi cache gc related events handles the serialization transaction much better than oracle standalone's single cache.

So a pure technology change resulted in such behaviour.

This happened only with spring batch, other java programs behaved same.


Thanks



Tuesday, July 22, 2025

Flashback data archive steps

 Objective: Ways to track DML changes in a table


Detailed objective:

We should be able to track the changes in the table at any point in time; say last 24hrs or last 12 hrs or between 2 different time frames



Options:

1. Trigger to fire on every insert or update or delete statements

2. Log miner, in case force logging is turned on.

3. DML tracking feature of oracle by default provides this info to some extent we can relate

4. Flashback data archive



Reference: https://blogs.oracle.com/connect/post/a-fresh-look-at-auditing-row-changes


Option 1:


Trigger [let us use most optimal setup - composite trigger]


Option 2:

Log Miner


Option 3:

DML tracking feature of oracle


select * from dba_Tab_modifications;


Option 4: Flashback data archive


Step 0)


Create the employees  table and load some data


CREATE TABLE EMPLOYEES (

    EMPLOYEE_ID    NUMBER(6),

    FIRST_NAME     VARCHAR2(20),

    LAST_NAME      VARCHAR2(25) NOT NULL,

    EMAIL          VARCHAR2(25) NOT NULL,

    PHONE_NUMBER   VARCHAR2(20),

    HIRE_DATE      DATE NOT NULL,

    JOB_ID         VARCHAR2(10) NOT NULL,

    SALARY         NUMBER(8,2),

    MANAGER_ID     NUMBER(6),

    DEPARTMENT_ID  NUMBER(4),

    VACATION_BALANCE NUMBER(6,2)

) tablespace tbspc_hr;



INSERT INTO EMPLOYEES (EMPLOYEE_ID, FIRST_NAME, LAST_NAME, EMAIL, PHONE_NUMBER, HIRE_DATE, JOB_ID, SALARY, MANAGER_ID, DEPARTMENT_ID, VACATION_BALANCE) VALUES (101, 'John', 'Doe', 'john.doe@example.com', '555-123-4567', TO_DATE('2020-01-15', 'YYYY-MM-DD'), 'IT_PROG', 60000.00, 100, 60, 20.50);

INSERT INTO EMPLOYEES (EMPLOYEE_ID, FIRST_NAME, LAST_NAME, EMAIL, PHONE_NUMBER, HIRE_DATE, JOB_ID, SALARY, MANAGER_ID, DEPARTMENT_ID, VACATION_BALANCE) VALUES (102, 'Jane', 'Smith', 'jane.smith@example.com', '555-987-6543', TO_DATE('2019-03-22', 'YYYY-MM-DD'), 'SA_REP', 85000.00, 101, 80, 25.00);

INSERT INTO EMPLOYEES (EMPLOYEE_ID, FIRST_NAME, LAST_NAME, EMAIL, PHONE_NUMBER, HIRE_DATE, JOB_ID, SALARY, MANAGER_ID, DEPARTMENT_ID, VACATION_BALANCE) VALUES (103, 'Peter', 'Jones', 'peter.jones@example.com', '555-111-2222', TO_DATE('2021-07-01', 'YYYY-MM-DD'), 'FI_ACCOUNT', 72000.00, 102, 90, 18.75);

INSERT INTO EMPLOYEES (EMPLOYEE_ID, FIRST_NAME, LAST_NAME, EMAIL, PHONE_NUMBER, HIRE_DATE, JOB_ID, SALARY, MANAGER_ID, DEPARTMENT_ID, VACATION_BALANCE) VALUES (104, 'Alice', 'Brown', 'alice.brown@example.com', '555-333-4444', TO_DATE('2018-11-10', 'YYYY-MM-DD'), 'AD_VP', 120000.00, NULL, 10, 30.00);

INSERT INTO EMPLOYEES (EMPLOYEE_ID, FIRST_NAME, LAST_NAME, EMAIL, PHONE_NUMBER, HIRE_DATE, JOB_ID, SALARY, MANAGER_ID, DEPARTMENT_ID, VACATION_BALANCE) VALUES (105, 'Robert', 'Davis', 'robert.davis@example.com', '555-555-6666', TO_DATE('2022-02-28', 'YYYY-MM-DD'), 'PU_CLERK', 35000.00, 103, 30, 15.00);

INSERT INTO EMPLOYEES (EMPLOYEE_ID, FIRST_NAME, LAST_NAME, EMAIL, PHONE_NUMBER, HIRE_DATE, JOB_ID, SALARY, MANAGER_ID, DEPARTMENT_ID, VACATION_BALANCE) VALUES (106, 'Maria', 'Garcia', 'maria.garcia@example.com', '555-777-8888', TO_DATE('2017-09-05', 'YYYY-MM-DD'), 'HR_REP', 50000.00, 104, 40, 22.00);

INSERT INTO EMPLOYEES (EMPLOYEE_ID, FIRST_NAME, LAST_NAME, EMAIL, PHONE_NUMBER, HIRE_DATE, JOB_ID, SALARY, MANAGER_ID, DEPARTMENT_ID, VACATION_BALANCE) VALUES (107, 'David', 'Miller', 'david.miller@example.com', '555-000-1111', TO_DATE('2023-04-18', 'YYYY-MM-DD'), 'MK_MAN', 95000.00, 101, 20, 28.00);

INSERT INTO EMPLOYEES (EMPLOYEE_ID, FIRST_NAME, LAST_NAME, EMAIL, PHONE_NUMBER, HIRE_DATE, JOB_ID, SALARY, MANAGER_ID, DEPARTMENT_ID, VACATION_BALANCE) VALUES (108, 'Sarah', 'Wilson', 'sarah.wilson@example.com', '555-222-3333', TO_DATE('2019-12-01', 'YYYY-MM-DD'), 'AC_MGR', 110000.00, 102, 100, 26.50);

INSERT INTO EMPLOYEES (EMPLOYEE_ID, FIRST_NAME, LAST_NAME, EMAIL, PHONE_NUMBER, HIRE_DATE, JOB_ID, SALARY, MANAGER_ID, DEPARTMENT_ID, VACATION_BALANCE) VALUES (109, 'Michael', 'Moore', 'michael.moore@example.com', '555-444-5555', TO_DATE('2020-06-20', 'YYYY-MM-DD'), 'SH_CLERK', 40000.00, 105, 50, 19.00);

INSERT INTO EMPLOYEES (EMPLOYEE_ID, FIRST_NAME, LAST_NAME, EMAIL, PHONE_NUMBER, HIRE_DATE, JOB_ID, SALARY, MANAGER_ID, DEPARTMENT_ID, VACATION_BALANCE) VALUES (110, 'Emily', 'Taylor', 'emily.taylor@example.com', '555-666-7777', TO_DATE('2021-01-01', 'YYYY-MM-DD'), 'PR_REP', 55000.00, 106, 70, 21.00);


commit;


Actual op:

SQL> create user hr identified by "hr";


User created.


SQL> grant create table, resource, create session, connect to hr;


Grant succeeded.


SQL> create tablespace tbspc_hr datafile size 10m autoextend on next 10m;


Tablespace created.


SQL> alter session set current_schema=HR;


Session altered.


SQL> alter user hr quota unlimited on tbspc_hr;


User altered.


SQL> CREATE TABLE EMPLOYEES (

    EMPLOYEE_ID    NUMBER(6),

    FIRST_NAME     VARCHAR2(20),

    LAST_NAME      VARCHAR2(25) NOT NULL,

    EMAIL          VARCHAR2(25) NOT NULL,

    PHONE_NUMBER   VARCHAR2(20),

    HIRE_DATE      DATE NOT NULL,

    JOB_ID         VARCHAR2(10) NOT NULL,

    SALARY         NUMBER(8,2),

    MANAGER_ID     NUMBER(6),

    DEPARTMENT_ID  NUMBER(4),

    VACATION_BALANCE NUMBER(6,2)

) tablespace tbspc_hr;  2    3    4    5    6    7    8    9   10   11   12   13


Table created.


SQL>


SQL> INSERT INTO EMPLOYEES (EMPLOYEE_ID, FIRST_NAME, LAST_NAME, EMAIL, PHONE_NUMBER, HIRE_DATE, JOB_ID, SALARY, MANAGER_ID, DEPARTMENT_ID, VACATION_BALANCE) VALUES (101, 'John', 'Doe', 'john.doe@example.com', '555-123-4567', TO_DATE('2020-01-15', 'YYYY-MM-DD'), 'IT_PROG', 60000.00, 100, 60, 20.50);


1 row created.


SQL> INSERT INTO EMPLOYEES (EMPLOYEE_ID, FIRST_NAME, LAST_NAME, EMAIL, PHONE_NUMBER, HIRE_DATE, JOB_ID, SALARY, MANAGER_ID, DEPARTMENT_ID, VACATION_BALANCE) VALUES (102, 'Jane', 'Smith', 'jane.smith@example.com', '555-987-6543', TO_DATE('2019-03-22', 'YYYY-MM-DD'), 'SA_REP', 85000.00, 101, 80, 25.00);


1 row created.


...


SQL> commit;


Commit complete.



Step 1) Create a tablespace to storage flashback data archive


create tablespace SPACE_FOR_ARCHIVE

datafile size 10M AUTOEXTEND ON NEXT 10M;


Output:

SQL> create tablespace SPACE_FOR_ARCHIVE

datafile size 10M AUTOEXTEND ON NEXT 10M;  2


Tablespace created.


SQL>


Step 2) Create a new structure to retain the information for a defined period (in our case 1 year)


CREATE FLASHBACK ARCHIVE longterm

TABLESPACE space_for_archive

RETENTION 1 YEAR;


Output:

SQL> CREATE FLASHBACK ARCHIVE longterm

TABLESPACE space_for_archive

RETENTION 1 YEAR;  2    3


Flashback archive created.


SQL> 


Step 3) Associate the needed table with the flashback archive.


ALTER TABLE EMPLOYEES FLASHBACK ARCHIVE LONGTERM;


Output:

SQL> ALTER TABLE EMPLOYEES FLASHBACK ARCHIVE LONGTERM;


Table altered.


SQL>


Step 4) Check all the tables in our current schema


select * from tab;


Step 5) Capture contextual info as well


exec dbms_flashback_archive.set_context_level('ALL');


Output:

SQL> exec dbms_flashback_archive.set_context_level('ALL');


PL/SQL procedure successfully completed.


SQL> 


Step 6) Check now the DML info on the table


select EMPLOYEE_ID, FIRST_NAME, VACATION_BALANCE,

       VERSIONS_STARTTIME TS,

       nvl(VERSIONS_OPERATION,'I') OP

--       dbms_flashback_archive.get_sys_context(versions_xid, 'USERENV','SESSION_USER') AS who,

--       dbms_flashback_archive.get_sys_context(versions_xid, 'USERENV','MODULE') AS program

from EMPLOYEES

versions between timestamp  timestamp '2025-07-22 01:03:00' and systimestamp

-- where EMPLOYEE_ID = 100

order by EMPLOYEE_ID, ts;


after initial loading:


SQL> select EMPLOYEE_ID, FIRST_NAME, VACATION_BALANCE,

       VERSIONS_STARTTIME TS,

       nvl(VERSIONS_OPERATION,'I') OP

--       dbms_flashback_archive.get_sys_context(versions_xid, 'USERENV','SESSION_USER') AS who,

--       dbms_flashback_archive.get_sys_context(versions_xid, 'USERENV','MODULE') AS program

from EMPLOYEES

versions between timestamp  timestamp '2025-07-22 01:03:00' and systimestamp

-- where EMPLOYEE_ID = 100

order by EMPLOYEE_ID, ts;  2    3    4    5    6    7    8    9


EMPLOYEE_ID FIRST_NAME           VACATION_BALANCE TS                                                                          O

----------- -------------------- ---------------- --------------------------------------------------------------------------- -

        101 Jack                             20.5 22-JUL-25 01.07.17 AM                                                       U

        101 John                             20.5                                                                             I

        102 Jane                               25                                                                             I

        103 Peter                           18.75                                                                             I

        104 Alice                              30                                                                             I

        105 Robert                             15                                                                             I

        106 Maria                              22                                                                             I

        107 David                              28                                                                             I

        108 Sarah                            26.5                                                                             I

        109 Michael                            19                                                                             I

        110 Emily                              21                                                                             I


11 rows selected.


SQL> 


upd:

update employees set FIRST_NAME='Jack' where EMPLOYEE_ID=101;


Output:

SQL> update EMPLOYEES set FIRST_NAME='Jack' where EMPLOYEE_ID=101;


1 row updated.


SQL> commit;


Commit complete.


SQL>


SQL> select EMPLOYEE_ID, FIRST_NAME, VACATION_BALANCE,

       VERSIONS_STARTTIME TS,

       nvl(VERSIONS_OPERATION,'I') OP

--       dbms_flashback_archive.get_sys_context(versions_xid, 'USERENV','SESSION_USER') AS who,

--       dbms_flashback_archive.get_sys_context(versions_xid, 'USERENV','MODULE') AS program

from EMPLOYEES

versions between timestamp  timestamp '2025-07-22 01:03:00' and systimestamp

-- where EMPLOYEE_ID = 100

order by EMPLOYEE_ID, ts;  2    3    4    5    6    7    8    9


EMPLOYEE_ID FIRST_NAME           VACATION_BALANCE TS                                                                          O

----------- -------------------- ---------------- --------------------------------------------------------------------------- -

        101 Jack                             20.5 22-JUL-25 01.07.17 AM                                                       U

        101 John                             20.5                                                                             I

        102 Jane                               25                                                                             I

        103 Peter                           18.75                                                                             I

        104 Alice                              30                                                                             I

        105 Robert                             15                                                                             I

        106 Maria                              22                                                                             I

        107 David                              28                                                                             I

        108 Sarah                            26.5                                                                             I

        109 Michael                            19                                                                             I

        110 Emily                              21                                                                             I


11 rows selected.


Now update 1 more record


select EMPLOYEE_ID, FIRST_NAME, VACATION_BALANCE,

       VERSIONS_STARTTIME TS,

       nvl(VERSIONS_OPERATION,'I') OP,

       dbms_flashback_archive.get_sys_context(versions_xid, 'USERENV','SESSION_USER') AS who,

       dbms_flashback_archive.get_sys_context(versions_xid, 'USERENV','MODULE') AS program

from EMPLOYEES

versions between timestamp  timestamp '2025-07-22 01:06:00' and systimestamp

-- where EMPLOYEE_ID = 100

where VERSIONS_STARTTIME  is not null

order by EMPLOYEE_ID, ts;


update employees set FIRST_NAME='Rose' where EMPLOYEE_ID=102;


Output:

01:10:13 SQL> update employees set FIRST_NAME='Rose' where EMPLOYEE_ID=102;


1 row updated.


Elapsed: 00:00:00.01

01:10:24 SQL> select EMPLOYEE_ID, FIRST_NAME, VACATION_BALANCE,

       VERSIONS_STARTTIME TS,

       nvl(VERSIONS_OPERATION,'I') OP

--       dbms_flashback_archive.get_sys_context(versions_xid, 'USERENV','SESSION_USER') AS who,

--       dbms_flashback_archive.get_sys_context(versions_xid, 'USERENV','MODULE') AS program

from EMPLOYEES

versions between timestamp  timestamp '2025-07-22 01:06:00' and systimestamp

-- where EMPLOYEE_ID = 100

where VERSIONS_STARTTIME  is not null

order by EMPLOYEE_ID, ts;01:10:29   2  01:10:29   3  01:10:29   4  01:10:29   5  01:10:29   6  01:10:29   7  01:10:29   8  01:10:29   9  01:10:29  10


EMPLOYEE_ID FIRST_NAME           VACATION_BALANCE TS                                                                          O

----------- -------------------- ---------------- --------------------------------------------------------------------------- -

        101 Jack                             20.5 22-JUL-25 01.07.17 AM                                                       U


Elapsed: 00:00:00.01

01:10:31 SQL> commit;


Commit complete.


Elapsed: 00:00:00.00

01:10:34 SQL>


01:10:36 SQL> select EMPLOYEE_ID, FIRST_NAME, VACATION_BALANCE,

       VERSIONS_STARTTIME TS,

       nvl(VERSIONS_OPERATION,'I') OP

--       dbms_flashback_archive.get_sys_context(versions_xid, 'USERENV','SESSION_USER') AS who,

01:10:41   2  01:10:41   3  01:10:41   4  01:10:41   5  --       dbms_flashback_archive.get_sys_context(versions_xid, 'USERENV','MODULE') AS program

from EMPLOYEES

versions between timestamp  timestamp '2025-07-22 01:06:00' and systimestamp

-- where EMPLOYEE_ID = 100

where VERSIONS_STARTTIME  is not null

order by EMPLOYEE_ID, ts;01:10:41   6  01:10:41   7  01:10:41   8  01:10:41   9  01:10:41  10


EMPLOYEE_ID FIRST_NAME           VACATION_BALANCE TS                                                                          O

----------- -------------------- ---------------- --------------------------------------------------------------------------- -

        101 Jack                             20.5 22-JUL-25 01.07.17 AM                                                       U

        102 Rose                               25 22-JUL-25 01.10.30 AM                                                       U


Elapsed: 00:00:00.01

01:10:42 SQL>


With context:


01:11:09 SQL> select EMPLOYEE_ID, FIRST_NAME, VACATION_BALANCE,

       VERSIONS_STARTTIME TS,

       nvl(VERSIONS_OPERATION,'I') OP,

       dbms_flashback_archive.get_sys_context(versions_xid, 'USERENV','SESSION_USER') AS who,

       dbms_flashback_archive.get_sys_context(versions_xid, 'USERENV','MODULE') AS program

from EMPLOYEES

versions between timestamp  timestamp '2025-07-22 01:06:00' and systimestamp

-- where EMPLOYEE_ID = 100

where VERSIONS_STARTTIME  is not null

order by EMPLOYEE_ID, ts;01:11:18   2  01:11:18   3  01:11:18   4  01:11:18   5  01:11:18   6  01:11:18   7  01:11:18   8  01:11:18   9  01:11:18  10


EMPLOYEE_ID FIRST_NAME           VACATION_BALANCE TS                                                                          O

----------- -------------------- ---------------- --------------------------------------------------------------------------- -

WHO

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

PROGRAM

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

        101 Jack                             20.5 22-JUL-25 01.07.17 AM                                                       U

SYS

sqlplus@vcentos79-oracle-ggtgt (TNS V1-V3)


        102 Rose                               25 22-JUL-25 01.10.30 AM                                                       U

SYS

sqlplus@vcentos79-oracle-ggtgt (TNS V1-V3)



Elapsed: 00:00:00.02

01:11:19 SQL>



>> All set


Objective: I have a table description available, but I need the table DDL for the same.

I can manually write it, ideally it will take 10 to 15mins. But using AI tools, we should be able to generate this no time.


Example:


Table1: EMPLOYEES

SQL> desc EMPLOYEES

Name                          Null?    Type

————————————————————————————— ———————— ————————————

EMPLOYEE_ID                            NUMBER(6)

FIRST_NAME                             VARCHAR2(20)

LAST_NAME                     NOT NULL VARCHAR2(25)

EMAIL                         NOT NULL VARCHAR2(25)

PHONE_NUMBER                           VARCHAR2(20)

HIRE_DATE                     NOT NULL DATE

JOB_ID                        NOT NULL VARCHAR2(10)

SALARY                                 NUMBER(8,2)

MANAGER_ID                             NUMBER(6)

DEPARTMENT_ID                          NUMBER(4)

VACATION_BALANCE                       NUMBER(6,2)


 Name                                      Null?    Type

 ----------------------------------------- -------- ----------------------------

 EMPLOYEE_ID                                        NUMBER(6)

 FIRST_NAME                                         VARCHAR2(20)

 LAST_NAME                                 NOT NULL VARCHAR2(25)

 EMAIL                                     NOT NULL VARCHAR2(25)

 PHONE_NUMBER                                       VARCHAR2(20)

 HIRE_DATE                                 NOT NULL DATE

 JOB_ID                                    NOT NULL VARCHAR2(10)

 SALARY                                             NUMBER(8,2)

 MANAGER_ID                                         NUMBER(6)

 DEPARTMENT_ID                                      NUMBER(4)

 VACATION_BALANCE                                   NUMBER(6,2)



DDL:

CREATE TABLE EMPLOYEES (

    EMPLOYEE_ID    NUMBER(6),

    FIRST_NAME     VARCHAR2(20),

    LAST_NAME      VARCHAR2(25) NOT NULL,

    EMAIL          VARCHAR2(25) NOT NULL,

    PHONE_NUMBER   VARCHAR2(20),

    HIRE_DATE      DATE NOT NULL,

    JOB_ID         VARCHAR2(10) NOT NULL,

    SALARY         NUMBER(8,2),

    MANAGER_ID     NUMBER(6),

    DEPARTMENT_ID  NUMBER(4),

    VACATION_BALANCE NUMBER(6,2)

);




Table2: AUDIT_EMPLOYEES

SQL> desc AUDIT_EMPLOYEES

Name                          Null?    Type

————————————————————————————— ———————— ————————————

AUD_WHO                                VARCHAR2(20)

AUD_WHEN                               DATE

AUD_OPERATION                          VARCHAR2(1)

AUD_MODULE                             VARCHAR2(30)

EMPLOYEE_ID                            NUMBER(6)

FIRST_NAME                             VARCHAR2(20)

LAST_NAME                     NOT NULL VARCHAR2(25)

EMAIL                         NOT NULL VARCHAR2(25)

PHONE_NUMBER                           VARCHAR2(20)

HIRE_DATE                     NOT NULL DATE

JOB_ID                        NOT NULL VARCHAR2(10)

SALARY                                 NUMBER(8,2)

MANAGER_ID                             NUMBER(6)

DEPARTMENT_ID                          NUMBER(4)

VACATION_BALANCE                       NUMBER(6,2)


 Name                                      Null?    Type

 ----------------------------------------- -------- ----------------------------

 AUD_WHO                                            VARCHAR2(20)

 AUD_WHEN                                           DATE

 AUD_OPERATION                                      VARCHAR2(1)

 AUD_MODULE                                         VARCHAR2(30)

 EMPLOYEE_ID                                        NUMBER(6)

 FIRST_NAME                                         VARCHAR2(20)

 LAST_NAME                                 NOT NULL VARCHAR2(25)

 EMAIL                                     NOT NULL VARCHAR2(25)

 PHONE_NUMBER                                       VARCHAR2(20)

 HIRE_DATE                                 NOT NULL DATE

 JOB_ID                                    NOT NULL VARCHAR2(10)

 SALARY                                             NUMBER(8,2)

 MANAGER_ID                                         NUMBER(6)

 DEPARTMENT_ID                                      NUMBER(4)

 VACATION_BALANCE                                   NUMBER(6,2)



Output:

CREATE TABLE AUDIT_EMPLOYEES (

    AUD_WHO          VARCHAR2(20),

    AUD_WHEN         DATE,

    AUD_OPERATION    VARCHAR2(1),

    AUD_MODULE       VARCHAR2(30),

    EMPLOYEE_ID      NUMBER(6),

    FIRST_NAME       VARCHAR2(20),

    LAST_NAME        VARCHAR2(25) NOT NULL,

    EMAIL            VARCHAR2(25) NOT NULL,

    PHONE_NUMBER     VARCHAR2(20),

    HIRE_DATE        DATE NOT NULL,

    JOB_ID           VARCHAR2(10) NOT NULL,

    SALARY           NUMBER(8,2),

    MANAGER_ID       NUMBER(6),

    DEPARTMENT_ID    NUMBER(4),

    VACATION_BALANCE NUMBER(6,2)

);




>> Result: Success. We generated the DDL from table description using Gemini.

Friday, July 18, 2025

Oracle Version 19.24 onwards: RMAN Progress Status Report

I was restoring a DB in  Oracle DB version 19.27, I noticed a new way oracle starting to dump the restore log. Below is an example content (sourced from internet):


This feature seems to be there from 19.24.
The log file gets updated normally in the begining like

Channel cx: restoring datafile 0004 to 'zzz' 
..

But after a while a message of the below starts printing


RMAN Progress Status Report at 20/05/2025 21:30:48
Progress for current step on channel: ch03 [INSTID = 1, SID = 5, SERIAL = 7654, Polling channel id= 150]
Type Total_Blocks Procd_Blocks Open_Time status setcount File_Name
IN 0 734862848 20/05/2025 20:02:59 IN PROGRESS 43126 76888_TESTDB_3xxxx_121_1_1
OUT 3932160 1679871 20/05/2025 21:35:58 IN PROGRESS 43126 ..
OUT 3932160 1679871 20/05/2025 21:35:58 IN PROGRESS 43126 ..
OUT 3932160 1679871 20/05/2025 21:35:58 IN PROGRESS 43126 ..


A little nice feature.

Thanks


..

Commvault as backup application - HP StoreOnce as Media : OSCLT_ERR_NO_DEVICES_DISCOVERED

 Observation: Once I was conducting a full db restore, 1/3 of my db files were restored then all my 6 streams failed due to below error


The error below is sourced from internet to show you the example error, all the error codes are same just the media name will be different

channel ch1: reading from backup piece 61xxxxxxxxxxx
ORA-19870: error reading backup piece 61xxxxxxxxxxx
ORA-19507: failed to retrieve sequential file, handle="61xxxxxxxxxxx", parms=""
ORA-27029: skgfrtrv: sbtrestore returned error
ORA-19511: Error received from media manager layer, error text:
sbtrestore: Job[44240] thread[3696]: CVArchive->open() failed.


What should you do in such error?

Have a call with your backup team, have them display the commvault restore job 44240 log.

If you notice the job failed due to an error in the subject of the blog, then you likely to face a communication error between commvault and storeonce device.

Mostly due to insufficient resources.

In such cases, please restart your restore after informing your backup team to keep an eye on the restore and resource usage in both StoreOnce and Commvault.


Remember StoreOnce has a limit to the number of active streams it can handle, I believe it will be 200 or some number. When that is exceeded we can face communication issue like above.


Thanks

OKV platform certificate rotation - pitfall , awareness!!!!

OKV version: 21.9 Setup: Multimaster R/W cluster Plan: https://docs.google.com/spreadsheets/d/e/2PACX-1vSaXXTjj9cE1fvYpNmsDNBOkTIw78yTwQ6a9o...