使用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 条评论
登录 后参与评论

相关文章

来自专栏测试开发架构之路

【总结】梳理下接口功能测试

1083
来自专栏Linux驱动

42.Linux应用调试-初步制作系统调用(用户态->内核态)

1首先来讲讲应用程序如何实现系统调用(用户态->内核态)? 我们以应用程序的write()函数为例: 1)首先用户态的write()函数会进入glibc库,里面...

2085
来自专栏Golang语言社区

package debug

Package debug contains facilities for programs to debug themselves while they ar...

1295
来自专栏逸鹏说道

C# 温故而知新:Stream篇(四)上

FileStream 目录: 如何去理解FileStream? FileStream的重要性 FileStream常用构造函数(重要) 非托管参数SafeFil...

2905
来自专栏IT技术精选文摘

Java并发入门指南

关于Java并发 从创建起,Java已经支持核心的并发概念,如线程和锁。本指南帮助Java开发人员使用多线程程序来了解核心并发概念以及如何应用它们。本指南涵盖...

1909
来自专栏软件工程师成长笔记

IE、FireFox、Chrome浏览器中关于URL传参中文乱码,解决兼容性问题!

前台用url传值中文,后台用request.getParameter接收参数。在Firefox,Chrome等浏览器中没有问题。但用IE浏览器就又会出现参数中文...

2292
来自专栏Java架构师进阶

Mybatis的二级缓存配置

 缓存将使用LRU(Least Recently Used)最近最少使用策略算法来回收

612
来自专栏北京马哥教育

经典!Python运维中常用的几十个Python运维脚本

file是一个类,使用file('file_name', 'r+')这种方式打开文件,返回一个file对象,以写模式打开文件不存在则会被创建。但是更推荐使用内置...

1734
来自专栏Jimoer

JVM学习记录-类加载器

JVM设计团队把类加载阶段中的“通过一个类的全限定名来获取描述此类的二进制字节流”这个动作放到Java虚拟机外面去实现,以便让应用程序自己决定如何去获取所需要的...

581
来自专栏木木玲

堆外内存 之 DirectByteBuffer 详解

2987

扫码关注云+社区