Converting Hexadecimal Oracle SCNs to Decimal
Author: Jeremiah Wilton | | November 19, 2009
Oracle serializes transactions and manages concurrency and recovery using an ever-increasing number called a system change number, or SCN. Usually, we see these numbers expressed in decimal, in places like the v$ views and the alert log. Occasionally, however, Oracle’s code expresses SCNs in hexadecimal. Unfortunately, you can’t just perform a straght conversion from hex to dec to express these hex SCNs in dec. Here is the same Oracle SCNs expressed in hex and dec:
0x952.f5e60bda 10251917462490
Thanks to Tanel Poder’s generous assistance, I learned how to convert this kind of SCN to decimal.
The first portion of the hex scn is the number of times the second portion has reached the maximum value (ffffffff), and started back at 00000001. We’ll call it “wrap.”
The second portion of the hex scn is the base SCN value that increments one with each new change. We’ll call it “base.”
The formula for converting the hex SCN to dec would therefore be:
decimal = wrap * 232 + base
I write a Unix shell on-liner to do the conversion:
$ a=0x952.f5e60bda;echo $((${a%%.*}*4294967296+0x${a##*.}))
Just replace the hex SCN I used in the example with your own.
Related Posts
Oracle BI Publisher (BIP) Tips: Functions, Calculations & More
Check out these BI Publisher tips including functions & calculations so you can understand more about the production and support of BI Publisher reports.
How to Index a Fact Table – A Best Practice
At the base of any good BI project is a solid data warehouse or data mart.
Qlik vs. Tableau vs. Power BI: Which BI Tool Is Right for You?
Tableau, Power BI, and Qlik each have their benefits. What are they and how do you choose? Read this blog post for a quick analysis.