通过gdb推进修改oracle scn
19c和12c都支持gdb修改scn。
会话窗口1:
[oracle@oracle ~]$ export ORACLE_SID=jyc
[oracle@oracle ~]$ sqlplus / as sysdba
SQL*Plus: Release 19.0.0.0.0 - Production on Wed Oct 29 16:13:11 2025
Version 19.18.0.0.0
Copyright (c) 1982, 2022, Oracle. All rights reserved.
Connected to an idle instance.
SQL> startup
ORACLE instance started.
Total System Global Area 6878657656 bytes
Fixed Size 9182328 bytes
Variable Size 3103784960 bytes
Database Buffers 3758096384 bytes
Redo Buffers 7593984 bytes
Database mounted.
Database opened.
SQL> select current_scn from v$database;--当前scn值
CURRENT_SCN
-----------
12011095
SQL> select to_char(12011095,'xxxxxxxxxxxx') from dual;
TO_CHAR(12011
-------------
b74657
SQL> show pdbs;
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 PDB5 MOUNTED
4 PDB2 READ WRITE NO
5 PDB3 MOUNTED
6 PDB1 MOUNTED
8 PDB6 READ WRITE NO
SQL> select to_char(22011095,'xxxxxxxxxxxx') from dual; --最高位增加1位的值
TO_CHAR(22011
-------------
14fdcd7
SQL> oradebug setmypid
Statement processed.
SQL> oradebug dumpvar sga kcsgscn
kscn8 kcsgscn_ [060017E98, 060017EA0) = 00B77D4C 00000000
新开会话窗口2:通过gdb修改scn
Last login: Wed Oct 29 16:12:36 2025 from 192.168.88.46
[root@oracle ~]# su - oracle
Last login: Wed Oct 29 16:12:40 CST 2025 on pts/0
[oracle@oracle ~]$ ps -ef|grep LOCAL=YES
oracle 25297 25157 2 16:13 ? 00:00:02 oraclejyc (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
oracle 25998 25972 0 16:14 pts/1 00:00:00 grep --color=auto LOCAL=YES
[oracle@oracle ~]$ gdb $ORACLE_HOME/bin/oracle 25297
-bash: gdb: command not found
[oracle@oracle ~]$ exit
logout
[root@oracle ~]# yum install gdb -y
Loaded plugins: fastestmirror
Determining fastest mirrors
......
Transaction test succeeded
Running transaction
Installing : gdb-7.6.1-120.el7.x86_64 1/1
Verifying : gdb-7.6.1-120.el7.x86_64 1/1
Installed:
gdb.x86_64 0:7.6.1-120.el7
Complete!
[root@oracle ~]# su - oracle
Last login: Wed Oct 29 16:14:37 CST 2025 on pts/1
[oracle@oracle ~]$ ps -ef|grep LOCAL=YES
oracle 25297 25157 1 16:13 ? 00:00:02 oraclejyc (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
oracle 26142 26117 0 16:15 pts/1 00:00:00 grep --color=auto LOCAL=YES
[oracle@oracle ~]$ gdb $ORACLE_HOME/bin/oracle 25297
GNU gdb (GDB) Red Hat Enterprise Linux 7.6.1-120.el7
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-redhat-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /data/u01/app/oracle/product/19c/dbhome_1/bin/oracle...(no debugging symbols found)...done.
Attaching to program: /data/u01/app/oracle/product/19c/dbhome_1/bin/oracle, process 25297
Reading symbols from /data/u01/app/oracle/product/19c/dbhome_1/lib/libodm19.so...(no debugging symbols found)...done.
Loaded symbols for /data/u01/app/oracle/product/19c/dbhome_1/lib/libodm19.so
Reading symbols from /data/u01/app/oracle/product/19c/dbhome_1/lib/libofs.so...(no debugging symbols found)...done.
Loaded symbols for /data/u01/app/oracle/product/19c/dbhome_1/lib/libofs.so
Reading symbols from /data/u01/app/oracle/product/19c/dbhome_1/lib/libcell19.so...done.
Loaded symbols for /data/u01/app/oracle/product/19c/dbhome_1/lib/libcell19.so
Reading symbols from /data/u01/app/oracle/product/19c/dbhome_1/lib/libskgxp19.so...(no debugging symbols found)...done.
Loaded symbols for /data/u01/app/oracle/product/19c/dbhome_1/lib/libskgxp19.so
Reading symbols from /data/u01/app/oracle/product/19c/dbhome_1/lib/libskjcx19.so...(no debugging symbols found)...done.
Loaded symbols for /data/u01/app/oracle/product/19c/dbhome_1/lib/libskjcx19.so
Reading symbols from /lib64/librt.so.1...(no debugging symbols found)...done.
Loaded symbols for /lib64/librt.so.1
Reading symbols from /data/u01/app/oracle/product/19c/dbhome_1/lib/libclsra19.so...(no debugging symbols found)...done.
Loaded symbols for /data/u01/app/oracle/product/19c/dbhome_1/lib/libclsra19.so
Reading symbols from /data/u01/app/oracle/product/19c/dbhome_1/lib/libdbcfg19.so...(no debugging symbols found)...done.
Loaded symbols for /data/u01/app/oracle/product/19c/dbhome_1/lib/libdbcfg19.so
Reading symbols from /data/u01/app/oracle/product/19c/dbhome_1/lib/libhasgen19.so...(no debugging symbols found)...done.
Loaded symbols for /data/u01/app/oracle/product/19c/dbhome_1/lib/libhasgen19.so
Reading symbols from /data/u01/app/oracle/product/19c/dbhome_1/lib/libskgxn2.so...(no debugging symbols found)...done.
Loaded symbols for /data/u01/app/oracle/product/19c/dbhome_1/lib/libskgxn2.so
Reading symbols from /data/u01/app/oracle/product/19c/dbhome_1/lib/libocr19.so...done.
Loaded symbols for /data/u01/app/oracle/product/19c/dbhome_1/lib/libocr19.so
Reading symbols from /data/u01/app/oracle/product/19c/dbhome_1/lib/libocrb19.so...done.
Loaded symbols for /data/u01/app/oracle/product/19c/dbhome_1/lib/libocrb19.so
Reading symbols from /data/u01/app/oracle/product/19c/dbhome_1/lib/libocrutl19.so...done.
Loaded symbols for /data/u01/app/oracle/product/19c/dbhome_1/lib/libocrutl19.so
Reading symbols from /lib64/libaio.so.1...Reading symbols from /lib64/libaio.so.1...(no debugging symbols found)...done.
(no debugging symbols found)...done.
Loaded symbols for /lib64/libaio.so.1
Reading symbols from /data/u01/app/oracle/product/19c/dbhome_1/lib/libons.so...(no debugging symbols found)...done.
Loaded symbols for /data/u01/app/oracle/product/19c/dbhome_1/lib/libons.so
Reading symbols from /data/u01/app/oracle/product/19c/dbhome_1/lib/libmql1.so...(no debugging symbols found)...done.
Loaded symbols for /data/u01/app/oracle/product/19c/dbhome_1/lib/libmql1.so
Reading symbols from /data/u01/app/oracle/product/19c/dbhome_1/lib/libipc1.so...(no debugging symbols found)...done.
Loaded symbols for /data/u01/app/oracle/product/19c/dbhome_1/lib/libipc1.so
Reading symbols from /lib64/libdl.so.2...(no debugging symbols found)...done.
Loaded symbols for /lib64/libdl.so.2
Reading symbols from /lib64/libm.so.6...(no debugging symbols found)...done.
Loaded symbols for /lib64/libm.so.6
Reading symbols from /lib64/libpthread.so.0...(no debugging symbols found)...done.
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib64/libthread_db.so.1".
Loaded symbols for /lib64/libpthread.so.0
Reading symbols from /lib64/libnsl.so.1...(no debugging symbols found)...done.
Loaded symbols for /lib64/libnsl.so.1
Reading symbols from /lib64/libresolv.so.2...(no debugging symbols found)...done.
Loaded symbols for /lib64/libresolv.so.2
Reading symbols from /lib64/libc.so.6...(no debugging symbols found)...done.
Loaded symbols for /lib64/libc.so.6
Reading symbols from /lib64/ld-linux-x86-64.so.2...(no debugging symbols found)...done.
Loaded symbols for /lib64/ld-linux-x86-64.so.2
Reading symbols from /usr/lib64/libnuma.so.1...Reading symbols from /usr/lib64/libnuma.so.1...(no debugging symbols found)...done.
(no debugging symbols found)...done.
Loaded symbols for /usr/lib64/libnuma.so.1
Reading symbols from /lib64/libgcc_s.so.1...(no debugging symbols found)...done.
Loaded symbols for /lib64/libgcc_s.so.1
Reading symbols from /lib64/libnss_files.so.2...(no debugging symbols found)...done.
Loaded symbols for /lib64/libnss_files.so.2
Reading symbols from /data/u01/app/oracle/product/19c/dbhome_1/lib/libnque19.so...(no debugging symbols found)...done.
Loaded symbols for /data/u01/app/oracle/product/19c/dbhome_1/lib/libnque19.so
Reading symbols from /data/u01/app/oracle/product/19c/dbhome_1/lib/libshpkavx19.so...(no debugging symbols found)...done.
Loaded symbols for /data/u01/app/oracle/product/19c/dbhome_1/lib/libshpkavx19.so
0x00007f51a9912740 in __read_nocancel () from /lib64/libpthread.so.0
Missing separate debuginfos, use: debuginfo-install glibc-2.17-326.el7_9.x86_64 libaio-0.3.109-13.el7.x86_64 libgcc-4.8.5-44.el7.x86_64 numactl-libs-2.0.12-5.el7.x86_64
(gdb) set *((int *) 0x060017E98) = 0x14fdcd7
(gdb) quit
A debugging session is active.
Inferior 1 [process 25297] will be detached.
Quit anyway? (y or n) y
Detaching from program: /data/u01/app/oracle/product/19c/dbhome_1/bin/oracle, process 25297
[Inferior 1 (process 25297) detached]
返回会话窗口1操作:
SQL> select current_scn from v$database;--scn已经变大,后续重启库检查正常
CURRENT_SCN
-----------
22011101
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.
Total System Global Area 6878657656 bytes
Fixed Size 9182328 bytes
Variable Size 3103784960 bytes
Database Buffers 3758096384 bytes
Redo Buffers 7593984 bytes
Database mounted.
Database opened.
SQL> select current_scn from v$database;
CURRENT_SCN
-----------
22015933
SQL> show pdbs;
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 PDB5 MOUNTED
4 PDB2 READ WRITE NO
5 PDB3 MOUNTED
6 PDB1 MOUNTED
8 PDB6 READ WRITE NO
SQL>
参考:
https://www.modb.pro/db/1983201983378563072
