使用C语言直接访问SGA

作者介绍:

姜刚 云和恩墨技术顾问

2017年3月加入云和恩墨,熟悉shell、perl脚本等。

为了加深对ORACLE数据库结构的了解,我们今天从C语言的角度,讲解如何使用C语言直接访问SGA。

基于的事实:

1、数据库启动后会分配共享内存(在ORACLE中称为System Global Area[SGA])

2、数据库中X$开头的表都是内存映射表

3、在Linux/Unix下提供了C的Lib库可以访问共享内存(shmat,shmdt,shmget等)

以GV$SESSION_WAIT为例

查看GV$SEESSION_WAIT的定义

通过上述创建视图信息,我们知道v$session_wait是建在X$KSUSECST和X$KSLED两个内存映射表上的,其访问路径是类似下图:

共享内存结构

获取SGA起始地址语句如下:

select ‘0x’||addr from X$KSMMEM where rownum<2;

X$KSUSECST在内存中的位置

获取X$KSUSECST起始地址:

Select min(addr) as BEGIN_ADDR from X$KSUSECST

获取在内存中的记录数:

Select count(*) as RECORD_SZ from X$KSUSECST

X$KSUSECST在内存区域的范围

每个记录数的长度:

Select to_dec(e.addr)-to_dec(s.addr) as LENGTH from (select min(addr) as addr from X$KSUSECST where rownum<2) s, (select max(addr) as addr from X$KSUSECST where rownum<3) e

获取每个字段的偏移量:

通过上述几个信息收集,我们获得了以下信息:

附录

C语言代码:

参考资料:

http://www.doc88.com/p-113695303367.html http://oraperf.sourceforge.net/

原文发布于微信公众号 - 数据和云(OraNews)

原文发表时间:2017-09-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java学习123

详解Oracle DELETE和TRUNCATE 的区别

2785
来自专栏用户2442861的专栏

linux 网络编程 I/O复用 select,poll ,epoll

http://blog.csdn.net/zs634134578/article/details/19929449

562
来自专栏专注 Java 基础分享

初识Hibernate之理解持久化类

     上一篇文章我们简单介绍了Hibernate相关的一些最基本的文件及其作用,并在最后完整的搭建了Hibernate的运行环境,成功的完成了与数据库的映射...

1688
来自专栏游戏开发那些事

【小白学C#】浅谈.NET中的IL代码

  前几天群里有位水友提问:”C#中,当一个方法所传入的参数是一个静态字段的时候,程序是直接到静态字段拿数据还是从复制的函数栈中拿数据“。其实很明显,这和方法参...

672
来自专栏CSDN技术头条

Redis为什么这么快?一文深入了解Redis!

来源:http://www.cnblogs.com/kismetv/p/8654978.html

753
来自专栏程序员与猫

Elasticsearch 的一些关键概念

我更喜欢把 Elasticsearch 作为一种 nosql 去理解,它的一些开发概念和 MongoDB 以及 Redis 没有太大的区别,不过了解 Elast...

17510
来自专栏我是攻城师

Java进阶之内存模型介绍

不管在什么编程语言里面,读取和写入都是我们程序最普遍的操作,在单线程的程序里面我们可能不关注线程的读写问题,但是一旦到多线程的环境下,读和写就会变得非常敏感。J...

462
来自专栏Java架构沉思录

Redis进阶不得不了解的内存优化细节

Redis所有的数据都在内存中,而内存又是非常宝贵的资源。对于如何优化内存使用一直是Redis用户非常关注的问题。本文让我们深入到Redis细节中,学习内存优化...

952
来自专栏Ryan Miao

redis学习教程之一基本命令

参阅redis中文的 互动教程(interactive tutorial)的学习笔记。 全局操作: #查看所有key keys * 或 keys "*" ...

3319
来自专栏www.96php.cn

【thinkphp】app接口签名+验证签名

【thinkphp】app接口签名+验证签名 app接口签名+验证签名 比较简单 求各位大牛指教 IndexController.class.php <?php...

4137

扫描关注云+社区