摘要: 1.什么是表空间 表空间是Oracle 1个虚拟概念,它用于存放数据文件dbf, 也就是说表空间是oracle表数据存放到数据文件的一个中间结构。一般来讲,oracle 一张表(非分区表)只属于1个表空间, 它的数据可以分散存储在这个表空间内多个数据文件中。 如下图: 当然上图还包括 block, extend, segment的信息,将就看吧..2.查看oracle的表空间 可以用如下视图来查看oracle的表空间: select * from dba_tablespaces; 可以见到有6个表空间。 2.1 System 表空间. system 表空间存放的是Oracle数据库本身的信.. 阅读全文
posted @ 2013-04-02 00:58 Gateman 阅读(594) 评论(0) 推荐(0) 编辑
摘要: 写这篇文章时由于没有参考过什么权威资料教材,所以有些观点可能是错误的, 不过我本人都是经过大量调试后才写出来的啦..1. 内存由多个单位为8bit = 1byte的单元组成,每1个单元都配有1个编号,这个就是内存地址。 计算机的主存储器是内存,而不是硬盘,因为cpu只能直接访问内存... 而cpu访问内存是根据内存的编号来访问的,这个编号就是内存地址,cpu获得内存地址就能直接寻址到对应的内存单位。2.指针就是内存地址..它们是同一概念 很多人都讲指针就是指向内存地址的东西, 但是我认为指针就是内存地址..3.指针变量的概念 首先,指针变量是1个变量, 也就是它的值是可以变的。 其次,指针变. 阅读全文
posted @ 2013-04-02 00:58 Gateman 阅读(366) 评论(0) 推荐(0) 编辑
摘要: 大伙都知道int类型的 取值范围是 -2147483648 到 2147483647 那为什么不是 -2147483647 到 2147483648 呢? 因为int类型占4个byte, 就是32个bit 了, 而32个二进制位中最高位的那个一位是表示正负的。 所以只有31 个位来表示int 类型本身的大小了。 从 0000000 00000000 00000000 00000000 到 1111111 11111111 11111111 11111111 其中后面31个1 就是 2147483647 啊(2^31 - 1) 所以不算上最高位的符号位的话, 31位 共可以表示 21474... 阅读全文
posted @ 2013-04-02 00:58 Gateman 阅读(4361) 评论(0) 推荐(0) 编辑
摘要: 这篇文章是参考甲骨论老相老师的教学视频 http://v.youku.com/v_show/id_XNDAwMzYzODI0.html 所做的学习笔记 关于段区块的定义以前都将过几次了. 视频中介绍了两个知识点: 1. 区(extends)的分配 1个段(segment) 被建立后, oracle 如何为其分配新的extends 2. 段空间管理方式. 1个新的extend 被分配到1个segment后, segment就相当于拥有一些空闲空间了, oracle怎么管理这些空间. 一. 利用em(Enterprise Manager) 演示如何建立1个新的表空间(table spa... 阅读全文
posted @ 2013-04-02 00:58 Gateman 阅读(682) 评论(0) 推荐(0) 编辑
摘要: 接上文 Oracle 段区块 分配 (1)六, oracle 的行迁移和行链接. (Row Chaining and Migrating) 上面提过了, oracle是允许把多个数据行放到同1个块中的。 而且, oracle会尽量把同1个数据行的所有数据放到同1个块中, 这样避免读取1个数据行要访问2个或以上的块. 而oracle是怎么避免这个问题呢。1个关键就是pctfree 和 pctused 的设置6.1 pctfree 这个参数在新建1个table/cluster的时候可以被指定。 默认是10% 假如 pctfree 的值是10%, 那么当1个block的剩余空间一但只剩下10%时, 阅读全文
posted @ 2013-04-02 00:58 Gateman 阅读(359) 评论(0) 推荐(0) 编辑
摘要: 由于网易博客的代码模式并不好用而且日志还存在显示不正确的问题. 见我这个日志:http://nvd11.blog.163.com/blog/static/20001831220132290183319/编辑的内容无法正确显示在博文中.所以我会将博客搬去csdn.http://blog.csdn.net/nvd11 阅读全文
posted @ 2013-04-02 00:58 Gateman 阅读(91) 评论(0) 推荐(0) 编辑
摘要: 1. 函数执行完成时,里面的局部静态变量所占的内存会被自动释放 首先看个简单的例子程序: #include <stdio.h> int f(){ int j=20; return j; } int main(){ int i; i = f(); return 0; } 可以见到上面 mian函数 调用了f()函数, 而f()里面定义了1个整形变量j.问题是, 如果f()被调用完成和偶, 也就是 i=f(); 这条语句执行完后, f()里面的j所占的内存还存在吗?答案是否. 首先j是1个局部变量, 而且j是1个静态变量, 所以当f() 结束时, f... 阅读全文
posted @ 2013-04-02 00:58 Gateman 阅读(321) 评论(0) 推荐(0) 编辑
摘要: 数据结构大体成上可以分成两种:1. 线性结构.2. 非线性结构( 树,图)1. 什么是线性结构 大概上可以这样定义: 加入所有的节点可以用一条直线连接起来. 就是线性结构...2. 线性机构也可以分成两种: 1) 连续存储 (数组) 也就是指每1个节点在物理内存上是相连的. 2) 离散存储(链表) 节点在物理内存上并不一定相连, 而是利用指针来关联. 这篇文章主要讲的第一种.3. 什么是数组 数组就是在内存里物理连续的一段元素的集合 注意: 数组里面的元素不一定是数. 可以是任何类型, 但是每个元素的类型和大小必须相等. 而且这里的数组并不是指C语言里的数组类型, 而是数据结构的一种. 通常在 阅读全文
posted @ 2013-04-02 00:58 Gateman 阅读(1034) 评论(0) 推荐(0) 编辑
摘要: 1. C语言定义1个数组的时候, 必须同时指定它的长度.例如:int a[5]={1,2,3,4,5}; //合法int b[6]; //合法int c[]; //错误 因为没有指定长度但是下面语句是正确, 它隐形定义了数组的长度, 就是赋值元素的个数int d[] ={4,5,6,7,8,9} //合法 长度为62. 静态数组 什么是静态数组, 其实上面合法定义的数组都是静态数组. 静态数组并不是指数组里面的元素是静态的, 上面的数组都可以修改指定元素的指 而是指数组的元素个数是静态的, 也就是某1个静态数组一旦被定义, 那么在程序运行结束的这段时间里它的长度的都是... 阅读全文
posted @ 2013-04-02 00:58 Gateman 阅读(488) 评论(0) 推荐(0) 编辑
摘要: 这篇文章是参考甲骨论老相老师的视频:http://v.youku.com/v_show/id_XNDAwOTY3MTU2.html所做的学习笔记1. LRU chain 和 LRUW chain 和CBC chain 先复习一下: 如上图, 在database buffer cache中, 里面的buffer被若干条链串联在一齐(通过头尾部指针实现) LRU(Least recent used) chain 这是一条用于查找最近最少使用的buffer的链, 当buffer不够用时会从这条链冷端找出buffer来重用. LRUW(Least recent used writed) chain . 阅读全文
posted @ 2013-04-02 00:58 Gateman 阅读(279) 评论(0) 推荐(0) 编辑
摘要: 首先GDB是类unix系统下一个优秀的调试工具, 当然作为debug代码的工具, 肯定没有IDE来的直观了. 不过, 命令行自然有命令行的有点, 当你无法是使用IDE时, gdb有时会帮上很大的忙. 下面用1个例子来说明用法吧: 建立1个目录testgdb2 1. 编写c文件test.c可以见到在23行, call 了 test2.c的函数, 而且引用了头文件 test2.h 2. 编写头文件 ./headfiles/test2.h只声明了1个函数啦 3. 编写c文件test2.c 编写对应函数的内容啦. 4. 编写Makefile这里要注意, gcc 命令默认编译出来的可执行文件是不带... 阅读全文
posted @ 2013-04-02 00:57 Gateman 阅读(456) 评论(0) 推荐(0) 编辑
摘要: 这篇文章是参考甲骨论老相老师的教学视频 http://v.youku.com/v_show/id_XMzk0NjYxNzgw.html所做的学习笔记作为1个DBA, 需要学习许多数据库知识, 但是目的无非两大部分.1. 保持数据库数据的一致性2. 优化数据库性能而日志系统只对应第1点,日志系统就是用来保持数据的一致性的.我们先回顾下之前讲过的sql语句执行流程如上图.可以见到:1. 产生日志的原因是Buffer cache里发生的数据改动.2. buffer cache里数据改动产生的日志被写入Redo log buffer(日志缓存)里.3. 后台进程LGWR会将redo log buffe 阅读全文
posted @ 2013-04-02 00:57 Gateman 阅读(287) 评论(0) 推荐(0) 编辑
摘要: 这篇文章是参考甲骨论老相老师的教学视频http://v.youku.com/v_show/id_XMzkyMjE3NTA0.html所做的学习笔记。1.什么是Rowid这里的Rowid,并不是1条数据行在表中的编号的意思.而是指Table中某一条数据行在数据文件中的物理地址, 而我们可以根据这个物理地址获得这一行数据行的数据在几号数据文件中的第几个block里面的的第几行等信息.可以用select rowid,* from Table语句来获得rowid的值.下面举个列子2.创建1张表语句如下:create table T_rowid ( a int, b varchar2(4000) def 阅读全文
posted @ 2013-04-02 00:57 Gateman 阅读(176) 评论(0) 推荐(0) 编辑
摘要: 这篇文章是参照甲骨论老相老师的教学视频:http://v.youku.com/v_show/id_XMzkyMjE3NTA0.html所做的学习笔记1. 查看某个对象所占用buffer状态:上一章提过了, 使用如下语句:selecto.object_name,decode(state, 0, 'free', 1, 'xcur' , 2, 'scur', 3, 'cr', 4, 'read', 5, 'mrec' , 6, 'irec', 7, 'write', 8, 阅读全文
posted @ 2013-04-02 00:57 Gateman 阅读(632) 评论(0) 推荐(0) 编辑
摘要: 原地址:http://www.rjgc.net/control/content/content.php?nid=4418 1、将文件checkout到本地目录svn checkout path(path是服务器上的目录)例如:svn checkout svn://192.168.1.1/pro/domain简写:svn co 2、往版本库中添加新的文件svn add file例如:svn addtest.php(添加test.php)svn add *.php(添加当前目录下所有的php文件) 3、将改动的文件提交到版本库svn commit -m “LogMessage“ [-N] [--n 阅读全文
posted @ 2013-04-02 00:57 Gateman 阅读(155) 评论(0) 推荐(0) 编辑
摘要: 这篇文章是参考甲骨论老相老师的教学视频:http://v.youku.com/v_show/id_XMzkyMjA4NDM2.html所做学习笔记1. 什么是buffer之前提过很多次啦, 其实在oracle数据文件中最小的单位就是block, 而用户读取block数据时,oracle就会将block的数据放入缓存,那么缓存中对应block的单位就叫buffer了, block的大小与buffer大小是一样的.2. 关于buffer的动态数据字典x$dh Oracle有一个动态视图x$dh, 里面有很多个数据行, 其中每个数据行对应buffer_cache里的每1个buffer.. x$bh里 阅读全文
posted @ 2013-04-02 00:57 Gateman 阅读(442) 评论(0) 推荐(0) 编辑
摘要: 这篇文章是参考甲骨论老相老师的教学视频:http://v.youku.com/v_show/id_XMzkyMjA5NTEy.html所做的学习笔记1.介绍DBWR写进程.之前介绍过Database buffer cache的作用流程了,参考下图:具体可以参考我之前的学习笔记:http://nvd11.blog.163.com/blog/static/200018312201302695451760/但上面这个流程只提到了用户客户端读取数据的流程, 并没有提到修改数据..1.1 用户修改数据后, 对应buffer会变成1个脏buffer 当用户修改数据,并且提交后, 数据就会写入对应buffe 阅读全文
posted @ 2013-04-02 00:57 Gateman 阅读(1860) 评论(0) 推荐(0) 编辑
摘要: 这篇文章是参考甲骨论老相老师的教学视频:http://v.youku.com/v_show/id_XMzkyMjA0NDQ0.html所做的学习笔记其实之前已经介绍过shared pool的链式(chain)内存结构了..http://nvd11.blog.163.com/blog/static/200018312201301875752730/1.双向链表其实在Database buffer cache中, 也是用类似的chain结构, 只不过oracle一般是用双向链表.所谓单向链表, 就是指每个内存块(chunk)有1个尾部指针指向1个chunk的头部地址. 除了最后1个chunk,尾部 阅读全文
posted @ 2013-04-02 00:57 Gateman 阅读(516) 评论(0) 推荐(0) 编辑
摘要: 1. 折半查找法定义 折半查找法,也称为二分查找法, 二分搜索, 是一种在有序数组中查找某一特定元素的搜索算法.搜索过程中从数组的中间元素开始, 如果中间元素正好是要查找的元素, 则搜索过程结束;如果某一特定元素大于或者小于中间元素, 则在数组大于或小雨元素的那一半中查找, 而且跟开始一样从中间元素开始比较. 若某1个步骤中数组为空, 则代表找不到. 这种搜索算法每一次比骄傲都使搜索范围缩小一半. -- 摘自维基百科. 2. 折半查找法分析 从定义中可以看出折半查找法有几个特性. 2.1 先决条件: 要搜索的数据已经排好序 当然, 怎样将数据排序也是1个算法, 这里先不考究了, 但是要使用.. 阅读全文
posted @ 2013-04-02 00:57 Gateman 阅读(3310) 评论(0) 推荐(0) 编辑
摘要: 这篇文章是参考甲骨论老相老师的教学视频:http://v.youku.com/v_show/id_XMzk2MjQ5Mzc2.html所做的教学视频1. 触发LGWR 将log buffer里的数据写入日志文件的条件: 下图这个就是lgwr进程了~ 1.1 commit语句 1.2 每隔3秒 1.3 log buffer里面有大于1MB的数据未写入日志文件 1.4 log buffer里面有大于3分1的数据未写入日志文件. 1.5 DBWR需要写入数据的SCN大于LGWR记录的SCN, 就触发LGWR写入. 1 - 4点之前都提过啦,也很容易理解. 现在重点说下第5点: Oracle 有1个机 阅读全文
posted @ 2013-04-02 00:57 Gateman 阅读(775) 评论(0) 推荐(0) 编辑