iptv速率实测

家中原先装有2M 150包月的电信宽带,近几日iptv推广活动中安装了机顶盒, 久违的游戏风云等频道重新进入视野。

发图鉴赏一下,就电视机而言画面还是可以接受的:

DSC00073

DSC00074

演示中的是霸王 II的试玩场景。

该2M宽带最大下载速度一般在210k左右,我们选择使用魔兽世界的客户端下载:

iptv

此时下载速率在120k至130k之间徘徊, 可以推测iptv的使用带宽在80-90k左右,所以一般1M宽带也可以附带iptv,512k的就堪虞了。。

11g新特性之闪回事务处理取消

在Oracle database10g中,Oracle引入了两个闪回特性,即闪回版本查询和闪回事务处理查询,允许撤销跟随在数据库中逻辑错误后面的数据所发生的错误变化。在一个可以的数据错误之后,首先使用闪回版本查询来确定属于该错误事务处理的表行的版本。在确定出错的事务处理后,使用闪回事务处理查询审计该事务所做的所有变化。使用由闪回事务处理查询的undo_sql列提供的SQL代码,撤销由错误事务处理所做的变化。这样,闪回事务处理提供了强大的撤销数据库中逻辑错误的办法。

在Oracle 11g中,可以使用新的闪回事务处理取消特性完成必须由闪回版本查询和闪回事务处理查询共同完成的任务。通常一个数据错误会引起其他依赖事务处理使用有错的数据执行。闪回事务处理取消时一个新的逻辑恢复特性,它使你返回目标事务处理,并使依赖事务处理回到原来的状态。闪回事务处理取消特性识别并修正内部的事务处理以及以及依赖的事务处理,从而彻底撤销逻辑数据错误的作用。撤销插入时,更新和删除操作的完整集合确保了事务处理的原子性和一致性原理被维护。这样,当数据库联机时,通过执行一个取消命令(单独运行transaction_backout过程),就可以执行数据的逻辑恢复。如果正在使用Database Console,点击一下就可以取消事务。依赖事务处理与目标事务处理可能有以下几种关系:

  • 写后写(write-after-write,WAW)关系,依赖事务处理更改了由目标事务处理更改的相同数据。
  • 主键约束关系,依赖事务处理插入与目标事务处理删除的相同的逐渐。

通过执行补偿事务处理(compensating transactions,它将受不要的事务处理影响的数据恢复到原来状态),数据库撤销事务处理的变化。闪回事务处理依靠撤销数据(以及为撤销块产生的重做)来创建补偿事务处理。因此,要撤销一组不要的事务处理,需要同时撤销数据和归档重做日志。

  1. 闪回事务处理取消的先觉条件 :必须首先开启数据库的补全日志(supplemental logging),然后给要使用闪回事务处理特性的用户授予特定的权限。为了启动数据库补全日志,使用以下命令:alter database add supplemental log data; alter database add supplemental log data (primary key) columns。 除了启动补全日志外,还要给闪回事务处理取消特性的用户授予以下权限: grant execute on dbms_flashback to hr; grant select any transaction to hr; 用户必须有flashback 权限,可以通过授予DBMS_FLASHBACK表的execute权限来授予。另外,用户还需要select any transaction权限。如果用户想要取消属于自己的模式中的事务处理,则无需增加权限。但是,如果某个用户想要取消其他模式的事务处理,还必须授予他对手事务处理取消影响的所有表的DML权限。
  2. 使用transaction_backout过程 补偿事务处理的思想对于事务处理取消特性至关重要。通过使用撤销数据,一个补偿事务处理可以取消一个或多个事务处理。使用DBMS_FLASHBACK包的transaction_backpout过程很容易回退不想要的事务处理。以下是transaction_backout过程的结构:

dbms_flashback.transaction_backout(
numtxns NUMBER,
xids    xid_array,
options BINARY_INTEGER DEFAULT NOCASCADE,
scnhint NUMBER DEFAULT 0);

transaction_backout过程有四个参数,如下:

  • NumTxns:此参数为被取消的事务处理的数量。
  • Names: 此参数为被取消的事物处理的列表(按名字排序)。
  • Timehint: 如果你按名字标识事务处理,则可以提供一个时间提示,如在事务处理开始前的某个时间。
  • Options:该事务指定某个事务处理及其依赖的事务处理被取消的顺序。

transaction_backout过程只分析事务处理之间的依赖性,执行DML操作,并提供一个报告。但是此过程不自动提交这些DML操作。该过程所做的就是通过锁定受影响的表行即表本身,保证其他事务处理的依赖性不受取消操作影响。必须明确执行commit语句,确保永久取消。

数据库将自动为取消操作提供一个事务处理名,但是由你给该操作明确的名字有利于后来的神奇。如果transaction_backout过程的执行成功完成。则表明已经取消了单个事务处理且无任何依赖事务处理。一个取消操作花费时间的多少将依赖于被取消的事务处理产生的重做的数量–重做日志量越大,完成transaction_backout操作所花费的时间越长。

transaction_backout过程有4个选项。

  • cascade:取消所有事务处理,其中包括依赖的事务处理,这些事务处理在取消父(目标)事务处理之前首先取消。
  • nocascade:没有任何依赖事务处理。默认值。
  • nicascade_force:只取消目标事务处理,忽略依赖事务处理。
  • nonconflict_only:只取消在目标事务处理中不冲突的那些行。

注意:nocascade的默认值期望待取消的事务处理无任何依赖事务处理。

 transaction_backout报告

可用DBA_FLASHBACK_TRANSACTION_STATE和DBA_FLASHBACK_TRANSACTION_REPORT视图检查事务处理取消操作的细节。transaction_backout过程提供这两个视图。如果一个事务处理出现在DBA_FLASHBACK _TRANSACTION_STATE视图中,则意味着该事务处理已经成功取消。对于每个被取消的事务处理,DBA_FLASHBACK_TRANSACTION_REPORT视图提供了详细的报告。 如果不想使用DBMS_FLASHBACK包,还可用 Database Console执行事务处理取消操作。

转发请注明源地址:https://www.askmac.cn

Oracle database 11g r2最新安装体验

安装软体分成2个zip包,需要全部解压后方能安装,解压后生成目录database,

linux.x64_11gR2_database_1of2.zip

linux.x64_11gR2_database_2of2.zip

最明显的当然是安装界面风格,整体偏于纯白了,跟r1的蓝白风格有所不同;

11g1

metalink协助在r2中显得更加重要,安全补丁更新已与metalink账号绑定起来;

11g2

我们选择仅安装单实例的软件,不创建数据库。

多出了产品语言的选择界面,但着不同与数据库字符集的选择,主要决定了帮助信息的语言集合。

一般来说不管是开发测试都因该使用enterprise edition,为了统一环境避免麻烦。

选择安装目录,默认是安装在变量ORACLE_BASE目录下:

11g4

安装预检查的内容有不少改动:

11g5

内存安装要求由10g的512M上升到1g,swap需求与当前主机的物理内存大小一致,tmp目录大小要求为1g,

Shell 中hard limit:max open files的要求上升到65536,这要求我们修改/etc/security/limits.conf中oracle的设置。

内核参数fs.file-max的要求上升到6815744,端口限制参数net.ipv4.ip_local_port_range由2000 65000变成9000 65500,net.core.rmem_default参数上升至 262144等。且在10g基础上多出了2个rpm包的安装要求,分别为elfutil-libelf-devel-0.97,该包的具体用途如下:

The elfutils-libelf-devel package contains the libraries to create
applications for handling compiled objects. libelf allows you to
access the internals of the ELF object file format, so you can see the
different sections of an ELF file.

下载地址:elf包

另一个是 unixodbc-devel-2.2.11,描述为:

The unixODBC package can be used to access databases through ODBC
drivers. If you want to develop programs that will access data through
ODBC, you need to install this package.

下载地址为:unixodbc

另安装程序目前会自动生成修改参数的脚本了,点击fix & check again,它会提示你在/tmp/CVU_11.2.0.1.0_oracle目录下的runfixup.sh文件可以帮助修改相关参数,这使安装步骤简便许多。

修改后的sysctl.conf文件内容如下:

net.ipv4.ip_forward = 0

# Controls source route verification
net.ipv4.conf.default.rp_filter = 1

# Do not accept source routing
net.ipv4.conf.default.accept_source_route = 0

# Controls the System Request debugging functionality of the kernel
kernel.sysrq = 0

# Controls whether core dumps will append the PID to the core filename.
# Useful for debugging multi-threaded applications.
kernel.core_uses_pid = 1

kernel.shmall = 2097152
kernel.shmmax = 4589934592
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 6815744
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576

fs.aio-max-nr = 1048576

上述的2个rpm即使不安装,Oracle软件也可以安装成功,虽然我们不提倡使用ignore选项。

在当前的安装程序中可以保存response file了,这为今后的静默安装提供了方便。

11g6

最后点击 finish,去喝一杯咖啡吧,11g 的安装时间要比10g 长很多,因为相关组件更丰富了,这在之后将介绍。

安装进度条界面:

11g7

安装完成,使用root用户执行root.sh,关闭安装界面。

对比10g与11g的目录,可以发现11g目录下多出了deinstall,dc_ocm,apex,sqldeveloper等子目录。

apex 为Oracle application express 目前已经整合到11g的server端中。

deinstall目录下的deinstall脚本将帮助删除当前Oracle软件并清除oraInventory中的信息。

sqldeveloper为图形界面的sqlplus开发管理工具,大约占用80M空间,一般不会使用到。

转载请注明源地址: https://www.askmac.cn

Oracle中dblink所产生远程会话的一些表现

惯性思维总是 令我们离大师们 有着一定的距离,这种差距 在知识广袤的领域尤其明显。

Oracle领域被称为Oracle的世界,当之无愧;一丁点的想当然就让我们偏离于事实。

以dblink的表现为例,我一直认为dblink的远程连接session仅在操作(select,dml)发生时短期存在,在操作完成后依据一定条件保留或退出。

而事实并非如此,随便使用一个远程查询语句如下:

SQL> select * from help@LZ;       –LZ 为dblink名

在远程数据库端观察session,可以发现:

select sid,username,machine,program,module from v$session where module=’ORACLE.EXE’

SID USERNAME MACHINE PROGRAM MODULE
1 526 SYSTEM WIN_DESK1 ORACLE.EXE ORACLE.EXE

且该远程会话一直保留直到原会话退出为止,无论是成功退出还是程序失败。

若希望在原会话中关掉已打开的远程会话,则需要使用一下命令:
Alter session close database link DBLINKNAME;

这里要注意,需要先执行commit后以上关闭远程session SQL方会成功,即便是Select操作也是如此;

若没有执行commit,会出现:

ORA-02080: 数据库链接正在使用中

Oracle将放弃prometric

Oracle将放弃prometric另择考试供应商(exam provider)。 Oracle公司在其官方博客上宣称将在9月25日切换到新的考试供应商处。具体供应商的信息还未公布,将在最近几天揭晓。

Oracle没有说明为什么要将prometric替换掉但它请参考者可以放心,在新的供应商处旧有的testing ID(应该包括考试券等)继续有效。

Oracle同时保证会通过各种途径确保此次转换尽可能简单。举例来说,所有的历史考试记录将不受影响,因为所有的数据都由Oracle保留。若您准备了9月25日在Prometric的考试,您仍可参加。若在此日期之后,建议您取消考试安排并在新的考试供应商处预约。

所有的考试费用保持原样,非原prometric管理的考试费用也不变。新的供应商将提供prometric原先提供的所有服务。

可以想象各处的openlab或培训机构目前是不是都在打听小道消息到底哪家公司将出来接替,对于已过OCP的兄弟来说这或许更多是一场闹剧。

在Linux上为PHP配置OCI8连接

Oracle 11g 客户端可以很方便地帮助PHP连接到远程Oracle数据库。本问介绍如何安装PHP以及其OCI8 扩展以及 Oracle客户端到Windows和Linux平台上。更详细的介绍可以阅读这里The Underground PHP and Oracle Manual

OCI8是PHP的扩展组件用以连接和操纵Oracle数据库(该名字源于Oracle中’C call interface’ API接口,该API最早在Oracle8中公布)。OCI 8 是开源的且已包括在PHP中了。

Oracle 简洁客户端(Instant Client)是一套免费且易安装的库文件,可以允许应用程序连接到远程数据库中。当Oracle数据库Sever端在本地时,该客户端不再是必要的。

当使用11g客户端,其中的OCI8 函数将支持Oracle 9.2,10.x,以及11.x的数据库。

软件需求:

软件 注意
Oracle Instant Client 下载”Instant Client Package – Basic”,也需要” Instant Client Package – SDK”
Apache HTTPD Server 版本1或2均可
PHP – PHP Hypertext Processor 版本 5.2

在Linux平台上启用PHP的OCI8扩展

在Linux平台上PHP往往需要重新编译。若用户使用Oracle Enterprise Linux,则预编译好的PHP RPM包可以直接从oss.oracle.com上下载。

为了搭建PHP和OCI8:

1. 你需要下载Apache HTTPD Server,且下载PHP 5.2 source code 即PHP 5.2源码,根据安装手册安装PHP与APACHE。在这里不需要为OCI8配置什么。

2. 从OTN上下载基础和SDK客户端包,地址:Instant Client page。ZIP或RPM格式均可。

开始安装包:

rpm -Uvh oracle-instantclient11.1-basic-11.1.0.7.0-1.i386.rpm

rpm -Uvh oracle-instantclient11.1-devel-11.1.0.7.0-1.i386.rpm

以上第一个RPM包将Oracle库文件安置在usr/lib/oracle/11.1/client/lib,而第二个在/usr/include/oracle/11.1/client建立头文件。

3. 从PECL上下载最新的OCI 8 1.3.5扩展将覆盖PHP 5.2源码中的默认版本。手动下载并如此安装:

pecl install oci-1.3.5.tgz

或最新版本可直接如此下载安装:

pecl install oci8

输出如下:
downloading oci8-1.3.5.tgz …
Starting to download oci8-1.3.5.tgz (137,987 bytes)
…..done: 137,987 bytes
10 source files, building
running: phpize
Configuring for:
PHP Api Version: 20041225
Zend Module Api No: 20060613
Zend Extension Api No: 220060519
1. Please provide the path to the ORACLE_HOME directory.
Use ‘instantclient,/path/to/instant/client/lib’ if you’re compiling with Oracle Instant Client : autodetect
1-1, ‘all’, ‘abort’, or Enter to continue:

若您安装了Instant Client RPM包,回车后PECL将自动定位RPM包并安装OCI8.so共享库文件。

4. 修改php.ini并确认extension_dir 指向了oci8.so所在目录
并在php.ini中加上: extension=oci8.so,启用oci 8。
5. 将Instant Client(简洁客户端)的目录添加到/etc/ld.so.conf中,或手动设置LD_LIBRARY_PATH包含目录/usr/lib/oracle/11.1/client/lib,并重启Apache。 在重启Apache前要设好Oracle环境变量,如下脚本:
#!/bin/sh
LD_LIBRARY_PATH=/usr/lib/oracle/11.1/client/lib:${LD_LIBRARY_PATH}
export LD_LIBRARY_PATH
echo Starting Apache
/usr/sbin/apachectl start
以上脚本未设置NLS_LANG等语言环境变量,即使用默认环境。

现在来确认扩展是否正确安装,我们可以通过以下php脚本予以确认:
<?php
phpinfo();
?>
自浏览器打开该脚本地址URL,如http://localhost/phpinfo.php,若显示页面出现”oci8”说明配置成功。
下面我们尝试连接Oracle数据库,Oracle授权以及数据库信息会返回给oci_connect()函数以创建连接。一般我们要用到一个tnsname以便远程连接,不懂得话建议你阅读下Oracle的基础文档,除了Net connection identifier(网络连接id 可能是tnsname也可能是easyconnect字符串等)外当然还需要用户名和密码。有好几种方法可以通过PHP连接数据库,下面是其中一个示例使用Oracle的EasyConnect语法的链接标示并要求以HR用户模式登陆名为MYDB的远程数据库:
$c = oci_connect(‘hr’, ‘hr_password’, ‘//mymachine.mydomain/MYDB’);
您可能需要阅读Oracle Using the Easy Connect Naming Method文档以便了解EasyConnect。

注意在数据库中HR用户可能被锁住了,我们假设你是一位称职的DBA,可以很容易解决这类问题。
开始尝试在PHP上使用Oracle,下面是个简单的示例,你可能需要修改其中连接标示(指’mymachine.mydomain/MYDB’这个)以便连接自己的数据库,示例用以显示HR用户拥有的所有表:
<?php
$conn = oci_connect(‘hr’, ‘hr_password’, ‘mymachine.mydomain/MYDB’);
$query = ‘select table_name from user_tables’;
$stid = oci_parse($conn, $query);
oci_execute($stid, OCI_DEFAULT);
while ($row = oci_fetch_array($stid, OCI_ASSOC)) {
foreach ($row as $item) {
echo $item.” “;
}
echo “<br>\n”;
}
oci_free_statement($stid);
oci_close($conn);
?>
问题:
检查Apache错误日志文件,避免可能发生的启动错误。
零时打开display_error=on选项以显示脚本中的问题,这需要在php.ini中加入” display_error=on”。
用SQL*PLUS检测可能的环境问题等。
结语
安装Oracle简洁客户端以及OCI 8扩展十分简便,各组件安装和更新也很容易。
未来PHP 5.3将默认包含OCI 8 1.3版扩展。

07年博客迁移:datafile block extract lab

昨天在家里的Linux服务器上,尝试用C 写一个抽取data block 的例子,用到的system_call()
简单得很就是标准的文件读写.
块 头的读取比较顺利,block_type种类大多我不熟悉,那是应用见的少了,只见过表,索引;IOT,cluster则从没见过。不过其实国内用这类高 级特性的恐怕也是极少,加了一个Oracle 的mail-list,看外国人对DB层的研究确实不懈的,而且人家只要这技术有优势就有本事和胆量拿来用,这份精神实在不殆。
块头之后是事务 槽,同行字典一样多少不定,是以行数据是倒过来存储的,即由尾而头,这番道理估计现下的DB上都是一般的。然而Oracle 之所以精妙与这事务槽同回滚段实现的读一致大有关系,然而反过来说Oracle本身也是背了一个极大的包袱在行走能有如今的效用真是不易之极,无怪乎 latch之类要用到汇编指令,但这又加大了改换平台的难度.
行字典中最末是每行的绝对距离. offsets=sizeof(head)+phead->itc*ITL_SIZE
相对地址为: pri[j]+offsets
完成之后,抽取多行却格式总是层次不齐,前前后后迂回了几个小时,最后蓦然回首发现自己参考的格式居然是9i的,怪不得读了读取行总是不工整.
回过头来说oracle的文件格式在今天来说基本是一点悬念也没有了,然而对于shared_pool的管理理论,sql的机器optimizer,以及架构等等都无愧为龙头老大,说要超越确实千难万难,何况即便超越了,其势本身极大要,谗食也不容易.
datablock的格式,都是前辈高人一个字节一个字节试出来的,其志诚嘉.

Offset 0 1 2 3 4 5 6 7 8 9 a b c d e f
00014000 06 A2 00 00 0A 00 40 01 0E 89 43 00 00 00 05 02
type frmt spare1/2_kcbh rdba scn seq flg
1 : 20 bytes
type: 0x06=trans data defined in kcb.h
frmt: 8i~9i 都是0x02 10.1.0 2k: 0x62 4k:0x82 8k:0xa2 16k:0xc2 (logfile 0x22 512 bytes)
spare1/2_kcbh: ub1 spare1_kcbh this field is no longer used (old inc#, now always 0)
ub1 spare2_kcbh this field is no longer used (old ts#, now always 0)
rdba: 0x0140000a 转换成2进制后它的前10 bit 表示file id 后22 bit 表示的block id
可以看出一个tablespace 可以有1023 个datafile ,每个datafile可以有4M 的block
10G 出现的 big datafile 这里表示的就是block id了 没有file id
9.2.0试验过一个tablespace可以有1023个datafile 一个object可以存放在1023个datafile中
scn: scn: 0x0000.0043890e
seq: A sequence number incremented for each change to a block at the same SCN
A new SCN is allocated if the sequence number wraps.
同一个SCN影响这个block中的行数大于 254 行就会为这个事务分配一个新的SCN
如下面的操作就可能引起同一个SCN但影响的同一个block 中的行超过254行
“delete from table_name”
影响的行数(最大254) 是用从 0x01 到 0xfe 表示的
当这个byte 的数据为 0xff 的时候标志这个 block 坏调了—> ora-01578
Sequence number:
SEQ -> 0 /* non-logged changes – do not advance seq# */
SEQ -> (UB1MAXVAL-1)/* maximum possible sequence number */
SEQ -> (UB1MAXVAL) /* seq# to indicate a block is corrupt,equal to FF. soft corrupt*/
0xff : When present it indicates that the block has been marked as corrupt by Oracle. either by the db_block_checking functionality or the equivalent events (10210 for data blocks, 10211 for index blocks, and 10212 for cluster blocks) when making a database change, or by the DBMS_REPAIR.FIX_CORRUPT_BLOCKS procedure, or by PMON after an unsuccessful online block recovery attempt while recovering a failed process, or by RMAN during a BACKUP, COPY or VALIDATE command with the CHECK LOGICAL option. Logical corruptions are normally due to either recovery through a NOLOGGING operation, or an Oracle software bug.
flg: as defined in kcbh.h
#define KCBHFNEW 0x01 /* new block – zeroed data area */
#define KCBHFDLC 0x02 /* Delayed Logging Change advance SCN/seq */
#define KCBHFCKV 0x04 /* ChecK Value saved-block xor’s to zero */
#define KCBHFTMP 0x08 /* Temporary block */
这是一个可以组合的值 也就是说有为 6 的时候是 2,4 两种情况的组合
Block structure as defined in kcbh.h:
struct kcbh
{ub1 type_kcbh; /* Block type* /
ub1 frmt_kcbh; /* #define KCBH_FRMT8 2 */
ub1 spare1_kcbh;
ub1 spare2_kcbh;
krdba rdba_kcbh; /* relative DBA /
ub4 bas_kcbh; /* base of SCN */
ub2 wrp_kcbh; /* wrap of SCN */
ub1 seq_kcbh; /* sequence # of changes at same scn */
ub1 flg_kcbh;
ub2 chkval_kcbh;
};
00014010 00 00 00 00 01 00 17 00 54 D2 00 00 0A 89 43 00
chkval spare3_kcbh typ ? seg/obj csc
spare3_kcbh : ub2 spare3_kcbh
2 : 24 bytes (总计44bytes)
typ : 1 – DATA 2 index
改成3了在10.1.0 上引起了ora-600[2032]然后ORA-27101: shared memory realm does not exist
oracle进行查询的时候是根据 obj$表中的情况来判断对象的类型的,不是根据这个typ
也就是说如果有一个表但改变表中block的这个标志位,一样可以查询出数据来,
但dump block 时会出错,ORA-00600: 内部错误代码,自变量: [4555], [0], [], [], [], [], [], []
错误中的 [0] 就是typ对应的数据
在10G中改变它后update这个block的数据commit可以但rollback的报错
? 见过有其他值 但用编辑器改这个值 在 dump 文件中显示不出来变化
seg/obj: 0xd254
csc : 0x00.43890a The SCN at which the last full cleanout was performed on the block
00014020 00 00 E8 1F 02 00 03 00 00 00 00 00 04 00 0C 00
csc ? itc ? flg fsl fnx xid
3 : 24 bytes * itl (2个itl总计92bytes)
? 见过有其他值 但用编辑器改这个值 在 dump 文件中显示不出来变化
itc ITL 条目的个数 max 255超过会报ORA-02207
ORA-00060 ORA-00054 可能是没空间分配itl条目了或它的争用引起的
在8i中 INITRANS default为1 , 9.2.0中 INITRANS default为2
flg indicates that the block is on a freelist. Otherwise the flag is –
9i 的ASSM 的情况下这个值为 E
ixora 上说他占用 2 bytes 但我下面的试验和他的结果有一定的出入
我观察到的情况是 : Object id on Block? Y flg: O ver: 0x01
上面的3项是用同一个 byte 来表示的

flg: O ver: 0x01 Object id on Block? Y
从我的观察中 dump 出来的文件中 flg ver Object id on Block
他们共同占用的这个一个字节 他的规律可以从下面的情况看出
2进制数据 flg ver Object id on Block?
0x00 – 0x00 N
0x01 0 0x00 N
0x02 – 0x01 Y
0x03 0 0x01 Y
0x04 – 0x02 Y
0x05 0 0x02 Y
0x06 – 0x03 Y
0x07 0 0x03 Y
0x08 – 0x04 N
0x09 0 0x04 N
0x0a – 0x05 Y
0x0b 0 0x05 Y
0x0c – 0x06 Y
0x0d 0 0x06 Y
0x0e – 0x07 Y
0x0f 0 0x07 Y
0x10 … 类似上面的循环了 这种情况在9i上已经改变因为ASSM的出现

fsl : Index to the first slot on the ITL freelist. ITL TX freelist slot
fnx : 自由列表中下一块的地址 Null if this block is not on a freelist 有数据例如: fnx: 0x1000029
00014030 50 18 00 00 96 14 80 00 B9 07 01 00 01 20 00 00
xid uba Lck Flag Scn/Fsc
xid : Transaction ID (UndoSeg.Slot.Wrap)
值可以用select XIDUSN, XIDSLOT,XIDSQN from v$transaction;查到
This is comprised of the rollback segment number (2 bytes), the slot number
in the transaction table of that rollback segment (2 bytes), and the number
of times use of that transaction table has wrapped (4 bytes).
uba : Undo address (UndoDBA.SeqNo.RecordNo)
The location of the undo for the most recent change to this block by this transaction. This is comprised of the DBA of the rollback segment block (4 bytes), the sequence number (2 bytes), and the record number for the change in that undo block (1 byte), plus 1 unused byte.
Lck Flag: Lck 锁定的row数 这里还用到了下一个 byte 的数据
2 对应的二进制表示为 0010 正好和dump文件中的 –U- 吻合
flag 1 nibble
C = Committed; U = Commit Upper Bound; T = Active at CSC; B = Rollback of this UBA gives before image of the ITL.
—- = transaction is active, or committed pending cleanout
C— = transaction has been committed and locks cleaned out
-B– = this undo record contains the undo for this ITL entry
–U- = transaction committed (maybe long ago); SCN is an upper bound
—T = transaction was still active at block cleanout SCN
Lck 3 nibbles
The number of row-level locks held in the block by this transaction.
Scn/Fsc : If the transaction has been cleaned out, this is the commit SCN or an upper bound thereof. Otherwise the leading two bytes contain the free space credit for the transaction – that is, the number of bytes freed in the block by the transaction
Scn = SCN of commited TX; Fsc = Free space credit (bytes)
00014040 0E 89 43 00 00 00 00 00 00 00 00 00 00 00 00 00
Scn/Fsc 第2条itl 这里没使用
00014050 00 00 00 00 00 00 00 00 00 00 00 00 00 01 01 00
第2条itl 这里没使用 flag ntab nrow
4 : 14 bytes 从这个flag位置开始是data区 也是下面的行的offset的起始地址
flag : N=pctfree hit(clusters), F=don’t put on free list
K=flushable cluster keys. 当然还有别的标记: A …
ntab : 这block中有几个table的数据 cluster这个就可能大于1
nrow : block 有多少行数据
00014060 FF FF 14 00 9B 1F 83 1F 83 1F 00 00 01 00 9B 1F
frre fsbo fseo avsp tosp offs nrow row offs
frre : First free row index entry. -1=you have to add one.
fsbo : Free Space Begin offset 出去row dict 后面的可以放数据的空间的起始位置
也可以看成是从这个区域的开始”flag”到最后一个 “row offs”占用的空间
fseo : Free Space End offset ( 9.2.0 )参与db_block_checking的计算剩余空间
select 的时候oracle不是简单的根据offset定位row.这个值也是参与了定位row的
avsp : Available space in the block (pctfree and pctused) ORA-01578
tosp : Total available space when all TXs commit ( 9.2.0 )参与db_block_checking
offs : 偏移量 用 cluster 的时候可以看出值
nrow : 这个table有多少行数据
row offs : 这行数据相对的起始位置 after delete & commit is 0xffff
00015FF0 00 00 00 00 00 00 00 2C 01 01 01 61 05 06 0E 89
fb lb cc length data block tail
5 : 用户数据
6 : 4 bytes block tail
fb : K = Cluster Key (Flags may change meaning if this is set to show HASH cluster)
C = Cluster table member
H = Head piece of row
D = Deleted row
F = First data piece
L = Last data piece
P = First column continues from previous piece
N = Last column continues in next piece
lb : 和上面的 ITL 的lck相对应 表示这行是否被 lock 了
cc : 有几列数据 这里只能表示255列 超过了就会有链接行
length : 这列的数据的长度是多少
0xfa ( 250 bytes ) 其实0xfb,0xfc,0xfd 也同样是250bytes
0xfe fb 00 ( 0xfb 00 表示的251 bytes 0xfe表示row的长度超过了250 bytes)
0xff 表示number 的 null 这也是oracle中null的表现形式排序的时候null最大了
字段的数据超过250字节是就用3bytes来表示字段的长度,因为如果是long类型它的字段再长
它在这个block中的数据的长度不会超过64K 所以最长用3bytes来表示行的长度已经够了.再长就链接行了
data : ‘a’
block tail : 改这 block 最后的4 bytes 数据中的任意肯定ora-1578
第 1 byte : 对应开始的 seq
第 2 byte : 对应开始的 type
第3,4byte : 对应开始的scn的末2为 control file 这里是control seq
10.1.0~lgone@ONE.LG.OK> create table a(v varchar2(4000)) TABLESPACE t;

Table created.

10.1.0~lgone@ONE.LG.OK> insert into a values('a');

1 row created.

Start dump data blocks tsn: 17 file#: 5 minblk 10 maxblk 10
buffer tsn: 17 rdba: 0x0140000a (5/10)
   //// buffer tsn:
         数据文件对应的 tablespace 的 number   这只是dump文件中记录的数据而已
         block 中是没有记录 tablespace 的 number 的 

scn: 0x0000.0043890e seq: 0x05 flg: 0x02 tail: 0x890e0605
frmt: 0x02 chkval: 0x0000 type: 0x06=trans data
Block header dump:  0x0140000a
 Object id on Block? Y
 seg/obj: 0xd254  csc: 0x00.43890a  itc: 2  flg: O  typ: 1 - DATA
     fsl: 0  fnx: 0x0 ver: 0x01

 Itl           Xid                  Uba         Flag  Lck        Scn/Fsc
0x01   0x0004.00c.00001850  0x00801496.07b9.01  --U-    1  fsc 0x0000.0043890e
0x02   0x0000.000.00000000  0x00000000.0000.00  ----    0  fsc 0x0000.00000000

data_block_dump,data header at 0x87e125c
   ////  data_block_dump,data header at 0x87e125c
         其实这个block不是直接从 data buffer 中 dump 出来的这个表示真正dump时 block 的数据区的起始位置
         也就是下面这部分开始的位置
         
===============        ////  tsiz:    hsiz:   pbl:   bdba: 在数据文件都是没有存储的 
tsiz: 0x1fa0           //// Total data area size
                     8k的block: 8192-20(block head)-24(Transaction Header)-24*2(一个事务条)-4(block tail)=8096(0x1fa0)
hsiz: 0x14             //// Data header size  数据块头20个字节+数据块尾4个字节=24字节(0x14)
pbl: 0x087e125c        //// Pointer to buffer holding the block
bdba: 0x0140000a
     76543210

flag=--------
ntab=1
nrow=1
frre=-1
fsbo=0x14
fseo=0x1f9b
avsp=0x1f83
tosp=0x1f83
0xe:pti[0]  nrow=1  offs=0
0x12:pri[0] offs=0x1f9b
block_row_dump:
tab 0, row 0, @0x1f9b
tl: 5 fb: --H-FL-- lb: 0x1  cc: 1
col  0: [ 1]  61
end_of_block_dump
End dump data blocks tsn: 17 file#: 5 minblk 10 maxblk 10

block 坏掉了还可以报:
    ORA-600 (4519) Cache layer block type is incorrect
    ORA-600 (4393) Check for Type for Segment header with free list
    ORA-600 (4136) Check Rollback segment block
    ORA-600 (4154) Check Rollback segment block

    Ora-600[kcbzpb_1],[d],[kind],[chk] gets signaled when the block got corrupted in memory.
    The only way it should be bad is if a stray store into memory destroyed the header or tail.
    d = blocknumber, kind= kind of corruption detected,chk = checksum flag

    ora-600[3398] and ora-600[3339]
    ora-600[3398] is not in oracle 8.
    ora-600[3398] means it failed a verification check before writing back to disk,  so it must
        be an in-memory corruption.
    ora-600[3339] comes with ora-1578 and means either disk corruption or in memory corruption after read.
    ora-600 [3339] has been removed from 7.2+
    From 7.2+  ora-600 [3398] has become ora-600 [3374] with some checks added.

2进制存储格式
               ALTER SESSION SET EVENTS '10289 trace name context forever, level 1';
               ALTER SESSION SET EVENTS '10289 trace name context off';

07年博客迁移:Home desktop migrate to fedora

算是对这2天来工作的一个总结, 原本我只知道linux 支持fat 文件系统 ,心里老寻思我那块ntfs的 移动硬盘迁移的数据不能读 。装完才发觉 fedora 对ntfs支持的相当不错,之前几个盘区里的东西系统装完就自动识别了, 这个很爽。
后来查阅资料发现该模块很久前就开发出来了,详见http://www.linux-ntfs.org
目前多数内核都能安装kernel-module-ntfs-2.6.15-1.2054_FC5-2.1.26-0.rr.10.0.i686.rpm,
完成安装后fs  dir下就多了ntfs module 了,加载就ok了,reboot后系统自动识别到桌面上。
进 度不止于此,昨天深夜突发奇想去找了下dell wireless 1390 的驱动,结果居然还找到了,其实dell大多数型号的无线网卡都是broadcom公司生产的 broadcom-wl-4.80.53.0.zip,是在一个国外linux网站上找到了, 貌似老外desktop 不用windows的已经不再少数了。付下使用方法:
首先要确认内核是否支持bcm43xx ,不然的话要装下,这个包还是很普遍的。
/sbin/lsmod | grep b43 可以查询是否加载该模块, fc8貌似默认装这包,
装过包后你的PATH里就可以包括到一个b43-fwcutter的bin了 ,
Ok, 解压刚才的zip ,cd kmod, sudo b43-fwcutter -w /lib/firmware wl_apsta.o
再/sbin/modprobe b43
驱动就加载了。因为是wireless 的原因要把Netmanager ,额外提到一点的是打开该服务后默认有VPN的选项,这个我还没试过!》。
/sbin/service NetworkManager start
/sbin/service NetworkManagerDispatcher start
chkconfig –level 345 NetworkManager on
chkconfig –level 345 NetworkManagerDispatcher on
把他们改成默认level 345 均打开。
不过Linux 下的无限网络在开机貌似是不能自动加载的,要进入系统后 还需要acc一个额外的密码,这点和windows上比是麻烦了不少了,而且貌似驱动的效果也不太好,我本来在书桌上信号比较微弱一点windows下没问题,linux总是因为信号弱自动断掉。
之后一段时间一直在摸索声卡的问题,显卡就不研究了。。反正是笔记本,而且也没打算开3d的game。
从网上找到不少线索,整整弄了一个半个晚上,最后反复研究alsa的文档终于解决了:
首先 /etc/modprobe.conf 需要修改如下:
好比说  snd-01 是你的声卡
那么  好比我要加载的驱动是 snd-hda-intel 就是intel 8082X的一个声卡
一般配置文件里就有这么一句: alias snd-01 snd-hda-intel
这个大家都知道是加载模块用到的,单似乎品牌的笔记本或多或少在fc8下 出现没声音的问题,
如此就可以试试 :options snd-hda-intel (因为我用的是dell的laptop) model=dell-3stack
如果是东芝的那么可能是: options snd-hda-intel model=toshiba
这个问题其实可以 深入一下 ,想必是造福大众的。
修改配置文件后 ,在 modprobe snd-hda-intel 下你会听到美妙的音乐的。。前提是你安装了alsa的drive ,fc因该是默认装的。
明天再记录下我装mplayer的悲惨经历。该死的x86-64.

07年博客迁移:心情记事

工作快2个月了,不知道这种黑白颠倒的日子要延续多久。看到我们头那种除了工作就是睡觉的生活感到后怕,感觉自己适应不料那么高强度的劳动量,会身心疲惫 的。无法预测我几年后会则么样,可能我还是适合搞开发,那种工程结束后的满足感和能拿了钱拍拍屁股走人的快感,客户的不恭敬意见总是向着维护小组去的,维 护小组所能发牢骚的不过是对开发组的几句骂娘而已。切实体会到没有所谓完美的软件工程,就好像没有车头彻底的绝望一样。世纪上我总感觉自己是个孩子,总还 是那么贪玩,不能静下心来工作或者学习,我不清楚是不是选错了路,其实回到学校继续修行未尝不是个好的选择,所谓定心这种东西可能是30岁前体会不到的, 我还在憧憬生活有无限的可能如同我这20几年始终憧憬的。陌生人的妹妹叫我叔叔,我感觉自己基本已经打不动游戏了(其实是因为没有我所喜欢的单机游戏 了,warIII也放下了,网游实在太累),被叫叔叔也不算过分了。
这就是所谓人生的crsis了?婚姻和前途?总感觉这些东西离开我很远,I am just a little&poor boy:-)
就好像某人要结婚了,总感觉是那么不真实,他他妈的就结婚了,他妈的那么急,结婚真的幸福吗?婚后又则么样呢?设么时候要孩子?有些事情我不敢想,我还有 太多太多的未完成,可自己已经感觉脱离队伍了,脱离父老(村上村下)了,虽然禄比纸薄。反过来说我的家境也还算不错,吃穿不愁,可也仅限于此,出路要自己 谋,有时候家里人还给你捣乱,代沟太大了。
好了,就胡诌到这里。

07年博客迁移:回记Oracle的三天培训

时间:12月21日~23日
三天培训的费用是6500元,也就是每天2000多,对,没错是每天2000多,你没听错,比出国旅游还贵。想想这6000,要是用在这儿。。哪儿该有多爽啊!
Oracle在上海市貌似没有研发中心,(可能在闵行紫竹有一个,不过不确切),我这天培训是在西藏中路18号32楼,港路广场的楼盘档次还是蛮高的,光 电梯就比软件园的高几个档次,我原本以为Oracle是独占32楼一隅的,到了上面才发现其实这层是好几家都在一起, 港路这里有名气点的还有久游,貌似Rock Li以前工作过的…
出电梯看到的就是Oracle的招牌,让我匪夷所思的事居然没有前台,我和一个同是来培训的人转了一圈只在休息室找到个在打电话的保安,这保安看起来是老 油条了自顾自的打电话并不招呼我们,其他几个房间已经有人在上课了,临近的一间貌似在讲ebs,开口闭口po so的,哈哈。。
无奈,打电话给当初招呼我的销售,他其实就在旁边的一间大的员工室里,不过那里是要刷卡的。。跟销售搞清楚是那间教室,结果里面已经开始讲了,索性都是最 基础的东西,这课程是给还没考完试的较少入门的,我来的目的主要是拿到hand on的Service number,还有心里有几个疑惑要找老师解答下。
找了个最后排靠窗的位子,32楼看出去风景不错。。

y1pyDLNeNIoqukVvJYmdc4NuSTTP5bhIMxwIgUt93bXnEbTrrWntQ1KyHGBt99XM67tiM914hVDyhw

手机拍的将就看。。

进教室后随手发了2本教材,外加一支笔,笔的外形不错,经典的白底红字Logo,不错后来经证明写起来感觉十分十分差。。
Oracle做实验的机器还是不错的光内存就2G,比家里的还好,不过据考Ocm的兄弟说他们用这机器还是很卡,想想也是又实验环境又Rac又Data Guard的确实比较囧。用的是Red hat as 4.4也就是考试的环境,后来知道考ocm就是在这几个教室,考要预约,因为那几天这2教室要清场,知道为什么贵了吧。

跟我们讲课的是个ocm,年纪大约28,9是06年考出来的,不去做dba,不出国,看起来做讲师是利润高+休闲。只不过课程是入门的所以,讲的东西总体比较小儿科,而且喜欢用OEM。。

本来订单上说的中午饭是Oracle负责的,我倒也像看看Oracle的伙食是怎么样的,结果是中午发餐券全都到2楼去吃套餐,吃饭的时候一群一起上课的人围在一个桌子上,可却没人说话,搭讪也没有,看起来搞it真能把人搞冷漠了,我是天生的冷漠。。

吃完饭,上楼终于忍不住找起任来搭讪(交流交流嘛),一个也是做erp的貌似是工厂里的,做了erp还搞db,一个人当2个用,估计钱少不了,另一db之外还做做programmer蛮可以的,不过是私企。。

中间的插曲是,中午的联系是linux下装10g,结果有个号称公司里用windows server2003+oracle的(进楼梯的时候他跟我说他们生产库30g,当时我就囧了,搞不懂他们为什么费那冤枉钱,这里一笔带过之前我面试的一 家日企,感觉不是那家的hr脑子抽住了还是怎么样,开价2000让我去做jsp..他当那玩样是高中里frontpage做个网页啊,后来谈的时候还要我 兼做公司网管,我反应说这价钱太低,结果就没回音了。。),回头说那位dba同志,他做这行的居然Linux的东西从来没碰过,terminal 也不知何物,过来请益于我,我小囧一下后,态度比较好的给他做了遍流程。不得不说我不清楚他乃至他的公司平时是怎么做事的,盖的?

下午继续讲课,几个似乎是新手的同志问了几个不爱看书的新手必问的问题,看起来先来上课再去考试走着正规路线的人还不少,索性大学里选过oracle做选修,心得固然全无,但概念少多少熟悉许多,感谢叶飞跃老师!!

可后问了几个比较困扰自己的问题,但感觉答案给我的启发不大,难道说学者未必为良师?其实我问的几个问题还是比较经典的,这里就不举出来了,避免在space上写技术性的东西。

课到5点结束,一天下来无甚心得,不过总算得到了一个交流的机会,让我知道这世界上还有这些人这些事。后来2天也是仿佛,上课全当时复习,能系统复习下也好啊。。。

PS: 当时真是很幼稚….

沪ICP备14014813号-2

沪公网安备 31010802001379号