<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>AnySQL.net &#187; Column</title>
	<atom:link href="http://www.anysql.net/tag/column/feed" rel="self" type="application/rss+xml" />
	<link>http://www.anysql.net</link>
	<description>SQLULDR2, DataCopy, DataSync, WebChart, OraMon, AUL/MyDUL, 性能优化及容量分析</description>
	<lastBuildDate>Wed, 14 Jul 2010 09:27:19 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>ocidiff助力51job日常维护</title>
		<link>http://www.anysql.net/tools/ocidiff_assist_51job_dba.html</link>
		<comments>http://www.anysql.net/tools/ocidiff_assist_51job_dba.html#comments</comments>
		<pubDate>Tue, 04 Mar 2008 17:54:57 +0000</pubDate>
		<dc:creator>anysql</dc:creator>
				<category><![CDATA[Tools]]></category>
		<category><![CDATA[Column]]></category>
		<category><![CDATA[DBDiff]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Table]]></category>

		<guid isPermaLink="false">http://www.anysql.net/wordpress/uncategorized/ocidiff%e5%8a%a9%e5%8a%9b51job%e6%97%a5%e5%b8%b8%e7%bb%b4%e6%8a%a4.html</guid>
		<description><![CDATA[&#160; &#160; 比较两个环境, 比如测试A和测试B, 或测试环境和正式环境之间的表结构差异, 是件很麻烦的事, 如果有成千上百的表, 可能会相当地耗时, 花个一两天也是有的. 正是因为不想花这么长的时间去做麻烦的事, 就偷懒地写了ocidiff这个表结构比较和自动同步程序. &#160; &#160; 一位51job的DBA朋友正好面临同样的问题, 我就推荐了这个程序给他. 早上正式使用后, 回馈说程序运行相当的快速和准确, 几分钟内完成手工几个小时才能完成的事, 并给出可读性很好很清晰的比较报告, 因此决定作为正式工具在公司内部使用, 以大大的减少了DBA在这类琐事上无谓的时间消耗. 每年年初他们网站的流都要上升个几倍, 因此需要花更多的时间面对负荷的上升, 就不能花太多的时间在手工比较表结构这种事上面. 这个角本再加上良好的SQL编写习惯, 可以防止某些低级错误. &#160; &#160; 这个工具是命令行的OCI程序, 做成命令行是为了更适合在OS上进行作业调度, 这一点虽不为大众所喜欢, 但却是很实用的. 这是一个三年前开发的工具, 已经成熟稳重了, 并且和人工处理相比, 它的结果更加准确. ocidiff是点对点的比较, 另一个工具(Compare Any Column)则可以进行多点之间的比较, 比较方式更加灵活. &#160; &#160; 作为一个很偷懒的DBA, 有好几个用来偷懒的角本. 不偷懒的DBA不是好DBA, 不是指不做事的, 是指在做事中相办法偷时间的. Relative Posts:2008/03/03 -- 先报身高? 还是体重? (4)2009/02/05 -- [...]]]></description>
			<content:encoded><![CDATA[<p>&nbsp; &nbsp; 比较两个环境, 比如测试A和测试B, 或测试环境和正式环境之间的表结构差异, 是件很麻烦的事, 如果有成千上百的表, 可能会相当地耗时, 花个一两天也是有的. 正是因为不想花这么长的时间去做麻烦的事, 就偷懒地写了<a href="http://www.anysql.net/tools/schema_compare_dbdiff.html">ocidiff</a>这个表结构比较和自动同步程序. </p>
<p>&nbsp; &nbsp; 一位<a href="http://www.51job.com">51job</a>的DBA朋友正好面临同样的问题, 我就推荐了这个程序给他. 早上正式使用后, 回馈说程序运行相当的快速和准确, 几分钟内完成手工几个小时才能完成的事, 并给出可读性很好很清晰的比较报告, 因此决定作为正式工具在公司内部使用, 以大大的减少了DBA在这类琐事上无谓的时间消耗. 每年年初他们网站的流都要上升个几倍, 因此需要花更多的时间面对负荷的上升, 就不能花太多的时间在手工比较表结构这种事上面. 这个角本再加上良好的<a href="http://www.anysql.net/dba/is_column_order_matter.html">SQL编写习惯</a>, 可以防止某些低级错误.</p>
<p>&nbsp; &nbsp; 这个工具是命令行的OCI程序, 做成命令行是为了更适合在OS上进行作业调度, 这一点虽不为大众所喜欢, 但却是很实用的. 这是一个三年前开发的工具, 已经成熟稳重了, 并且和人工处理相比, 它的结果更加准确. ocidiff是点对点的比较, 另一个工具(Compare Any Column)则可以进行多点之间的比较, 比较方式更加灵活.</p>
<p>&nbsp; &nbsp; 作为一个很偷懒的DBA, 有好几个用来偷懒的角本. 不偷懒的DBA不是好DBA, 不是指不做事的, 是指在做事中相办法偷时间的. </p>
<h3  class="related_post_title">Relative Posts:</h3><ul class="related_post"><li>2008/03/03 -- <a href="http://www.anysql.net/dba/is_column_order_matter.html" title="先报身高? 还是体重?">先报身高? 还是体重?</a> (4)</li><li>2009/02/05 -- <a href="http://www.anysql.net/dba/change_export_tablespace.html" title="导出时如何统一表空间?">导出时如何统一表空间?</a> (2)</li><li>2008/06/23 -- <a href="http://www.anysql.net/dba/apache_tomcat.html" title="根据表名搜索SQL语句">根据表名搜索SQL语句</a> (0)</li><li>2008/05/26 -- <a href="http://www.anysql.net/oracle/imp_to_another_table.html" title="ASSM表空间真浪费">ASSM表空间真浪费</a> (6)</li><li>2008/05/15 -- <a href="http://www.anysql.net/dba/aul_better_for_nchar.html" title="将dmp数据导入到另一个表">将dmp数据导入到另一个表</a> (3)</li><li>2008/03/13 -- <a href="http://www.anysql.net/dba/deny_table_big_dml.html" title="如何防止大的DML语句?">如何防止大的DML语句?</a> (3)</li><li>2008/02/14 -- <a href="http://www.anysql.net/dba/oracle_rename_table_syntax.html" title="Rename Table的语法">Rename Table的语法</a> (0)</li><li>2007/12/24 -- <a href="http://www.anysql.net/tools/get_table_ddl.html" title="Get DDL工具">Get DDL工具</a> (7)</li><li>2007/12/11 -- <a href="http://www.anysql.net/dba/drop_4tb_table.html" title="删除4TB的表">删除4TB的表</a> (5)</li><li>2007/08/21 -- <a href="http://www.anysql.net/oracle/indexed_fixed_column.html" title="如何获得X$表上的特殊索引信息?">如何获得X$表上的特殊索引信息?</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.anysql.net/tools/ocidiff_assist_51job_dba.html/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>先报身高? 还是体重?</title>
		<link>http://www.anysql.net/dba/is_column_order_matter.html</link>
		<comments>http://www.anysql.net/dba/is_column_order_matter.html#comments</comments>
		<pubDate>Tue, 04 Mar 2008 04:41:13 +0000</pubDate>
		<dc:creator>anysql</dc:creator>
				<category><![CDATA[DBA]]></category>
		<category><![CDATA[Column]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Table]]></category>

		<guid isPermaLink="false">http://www.anysql.net/wordpress/uncategorized/%e5%85%88%e6%8a%a5%e8%ba%ab%e9%ab%98-%e8%bf%98%e6%98%af%e4%bd%93%e9%87%8d.html</guid>
		<description><![CDATA[&#160; &#160; &#8220;我身高1.76, 体重85kg&#8221;与&#8221;我体重85kg, 身高1.76&#8243;有什么不同? 在关系数据库理论中, 确明地写着实体属性的顺序并不重要, 因此在我的DBDiff程序(表结构比较)中是不比较列的顺序的. 如果说硬要说列的顺序有关系, 那只能是说明应用程序代码习惯不够好. INSERT INTO tablename VALUES (&#8230;) &#160; &#160; 只有Insert语句不带字段列表的情况下, 才与列的顺序有关系, 但这不是一个好的习惯. 比方在多表关联时, 选择列时不加表名就不是个好习惯. 去年参加年会时, 淘宝的朋友曾提及以前就遇到过这样的问题, 在一个不太重要的系统中, 关联的两个表一开始所有字段名都不同, 后来有一天在一个表上加了和另一个表中某列同名的列, 这时应用出问题了. SELECT A.COL1, B.COL2, &#8230; FROM A, B WHERE &#8230; &#160; &#160; 很多都是简单的事, 如果一直坚持了就很好, 如果不坚持, 有时就是很坏的事. 要让一个人坚持, 那还比较容易, 要让一个队伍坚持, 就有些难了, 让一个IT业流动性较大的队伍坚持, 就更难了. Relative Posts:2008/03/04 -- ocidiff助力51job日常维护 (6)2009/02/05 -- [...]]]></description>
			<content:encoded><![CDATA[<p>&nbsp; &nbsp; &#8220;我身高1.76, 体重85kg&#8221;与&#8221;我体重85kg, 身高1.76&#8243;有什么不同? 在关系数据库理论中, 确明地写着实体属性的顺序并不重要, 因此在<a href="http://www.anysql.net/tools/schema_compare_dbdiff.html">我的DBDiff程序</a>(表结构比较)中是不比较列的顺序的. 如果说硬要说列的顺序有关系, 那只能是说明应用程序代码习惯不够好. </p>
<blockquote class="prefont"><p>
INSERT INTO <i>tablename</i> VALUES (&#8230;)
</p></blockquote>
<p>&nbsp; &nbsp; 只有Insert语句不带字段列表的情况下, 才与列的顺序有关系, 但这不是一个好的习惯. 比方在多表关联时, 选择列时不加表名就不是个好习惯. 去年参加年会时, 淘宝的朋友曾提及以前就遇到过这样的问题, 在一个不太重要的系统中, 关联的两个表一开始所有字段名都不同, 后来有一天在一个表上加了和另一个表中某列同名的列, 这时应用出问题了. </p>
<blockquote class="prefont"><p>
SELECT A.COL1, B.COL2, &#8230; FROM A, B WHERE &#8230;
</p></blockquote>
<p>&nbsp; &nbsp; 很多都是简单的事, 如果一直坚持了就很好, 如果不坚持, 有时就是很坏的事. 要让一个人坚持, 那还比较容易, 要让一个队伍坚持, 就有些难了, 让一个IT业流动性较大的队伍坚持, 就更难了. </p>
<h3  class="related_post_title">Relative Posts:</h3><ul class="related_post"><li>2008/03/04 -- <a href="http://www.anysql.net/tools/ocidiff_assist_51job_dba.html" title="ocidiff助力51job日常维护">ocidiff助力51job日常维护</a> (6)</li><li>2009/02/05 -- <a href="http://www.anysql.net/dba/change_export_tablespace.html" title="导出时如何统一表空间?">导出时如何统一表空间?</a> (2)</li><li>2008/06/23 -- <a href="http://www.anysql.net/dba/apache_tomcat.html" title="根据表名搜索SQL语句">根据表名搜索SQL语句</a> (0)</li><li>2008/05/26 -- <a href="http://www.anysql.net/oracle/imp_to_another_table.html" title="ASSM表空间真浪费">ASSM表空间真浪费</a> (6)</li><li>2008/05/15 -- <a href="http://www.anysql.net/dba/aul_better_for_nchar.html" title="将dmp数据导入到另一个表">将dmp数据导入到另一个表</a> (3)</li><li>2008/03/13 -- <a href="http://www.anysql.net/dba/deny_table_big_dml.html" title="如何防止大的DML语句?">如何防止大的DML语句?</a> (3)</li><li>2008/02/14 -- <a href="http://www.anysql.net/dba/oracle_rename_table_syntax.html" title="Rename Table的语法">Rename Table的语法</a> (0)</li><li>2007/12/24 -- <a href="http://www.anysql.net/tools/get_table_ddl.html" title="Get DDL工具">Get DDL工具</a> (7)</li><li>2007/12/11 -- <a href="http://www.anysql.net/dba/drop_4tb_table.html" title="删除4TB的表">删除4TB的表</a> (5)</li><li>2007/08/21 -- <a href="http://www.anysql.net/oracle/indexed_fixed_column.html" title="如何获得X$表上的特殊索引信息?">如何获得X$表上的特殊索引信息?</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.anysql.net/dba/is_column_order_matter.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>用MyLOG解出对COL$系统表进行的操作</title>
		<link>http://www.anysql.net/research/mylog_dict_syscol.html</link>
		<comments>http://www.anysql.net/research/mylog_dict_syscol.html#comments</comments>
		<pubDate>Sun, 03 Jun 2007 22:58:23 +0000</pubDate>
		<dc:creator>anysql</dc:creator>
				<category><![CDATA[Research]]></category>
		<category><![CDATA[Column]]></category>
		<category><![CDATA[Log]]></category>
		<category><![CDATA[Log Miner]]></category>
		<category><![CDATA[MyLOG]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://www.anysql.net/wordpress/uncategorized/%e7%94%a8mylog%e8%a7%a3%e5%87%ba%e5%af%b9col%e7%b3%bb%e7%bb%9f%e8%a1%a8%e8%bf%9b%e8%a1%8c%e7%9a%84%e6%93%8d%e4%bd%9c.html</guid>
		<description><![CDATA[&#160; &#160; 在LOGTAB.TXT中加入如下行: 10000,21,COL$, &#160; &#160; 在LOGCOL.TXT中加入如下行, 不过由于COL$是Cluster表, 因此这里列出来的比真实的表列数少一列, 刚好少Cluster的那列: 10000,1,COL#,NUMBER 10000,2,SEGCOL#,NUMBER 10000,3,SEGCOLLENGTH,NUMBER 10000,4,OFFSET,NUMBER 10000,5,NAME,VARCHAR2 10000,6,TYPE#,NUMBER 10000,7,LENGTH,NUMBER 10000,8,FIXEDSTORAGE,NUMBER 10000,9,PRECISION#,NUMBER 10000,10,SCALE,NUMBER 10000,11,NULL$,NUMBER 10000,12,DEFLENGTH,NUMBER 10000,13,SPARE6,DATE 10000,14,INTCOL#,NUMBER 10000,15,PROPERTY,NUMBER 10000,16,CHARSETID,NUMBER 10000,17,CHARSETFORM,NUMBER 10000,18,SPARE1,NUMBER 10000,19,SPARE2,NUMBER 10000,20,SPARE3,NUMBER 10000,21,SPARE4,VARCHAR2 10000,22,SPARE5,VARCHAR2 10000,23,DEFAULT$,LONG &#160; &#160; 没有办法知道这个操作是对那个对象进行的, 因为OBJ#列的变更不记录在这儿. 终于明白为什么Shareplex不支持Cluster表了, 不过Single Hash Cluster表应当是可以支持的. RBA=0&#215;000069.000010b0.0018,&#160;&#160;XID=0&#215;0009.016.00000093, RID=AAAAACAABAAAGq4AAR &#160;&#160; DELETE COL$ WHERE&#160;&#160;COL# =&#160;&#160;3 AND&#160;&#160;SEGCOL# =&#160;&#160;3 AND&#160;&#160;SEGCOLLENGTH =&#160;&#160;7 AND&#160;&#160;OFFSET =&#160;&#160;0 AND&#160;&#160;NAME [...]]]></description>
			<content:encoded><![CDATA[<p>&nbsp; &nbsp; 在LOGTAB.TXT中加入如下行: </p>
<blockquote class="prefont"><p>
10000,21,COL$,
</p></blockquote>
<p>&nbsp; &nbsp; 在LOGCOL.TXT中加入如下行, 不过由于COL$是Cluster表, 因此这里列出来的比真实的表列数少一列, 刚好少Cluster的那列: </p>
<blockquote class="prefont"><p>
10000,1,COL#,NUMBER<br />
10000,2,SEGCOL#,NUMBER<br />
10000,3,SEGCOLLENGTH,NUMBER<br />
10000,4,OFFSET,NUMBER<br />
10000,5,NAME,VARCHAR2<br />
10000,6,TYPE#,NUMBER<br />
10000,7,LENGTH,NUMBER<br />
10000,8,FIXEDSTORAGE,NUMBER<br />
10000,9,PRECISION#,NUMBER<br />
10000,10,SCALE,NUMBER<br />
10000,11,NULL$,NUMBER<br />
10000,12,DEFLENGTH,NUMBER<br />
10000,13,SPARE6,DATE<br />
10000,14,INTCOL#,NUMBER<br />
10000,15,PROPERTY,NUMBER<br />
10000,16,CHARSETID,NUMBER<br />
10000,17,CHARSETFORM,NUMBER<br />
10000,18,SPARE1,NUMBER<br />
10000,19,SPARE2,NUMBER<br />
10000,20,SPARE3,NUMBER<br />
10000,21,SPARE4,VARCHAR2<br />
10000,22,SPARE5,VARCHAR2<br />
10000,23,DEFAULT$,LONG
</p></blockquote>
<p>&nbsp; &nbsp; 没有办法知道这个操作是对那个对象进行的, 因为OBJ#列的变更不记录在这儿. 终于明白为什么Shareplex不支持Cluster表了, 不过Single Hash Cluster表应当是可以支持的.</p>
<blockquote class="prefont"><p>
RBA=0&#215;000069.000010b0.0018,&nbsp;&nbsp;XID=0&#215;0009.016.00000093, RID=AAAAACAABAAAGq4AAR<br />
&nbsp;&nbsp; DELETE COL$ WHERE&nbsp;&nbsp;COL# =&nbsp;&nbsp;3 AND&nbsp;&nbsp;SEGCOL# =&nbsp;&nbsp;3 AND&nbsp;&nbsp;SEGCOLLENGTH =&nbsp;&nbsp;7 AND&nbsp;&nbsp;OFFSET =&nbsp;&nbsp;0 AND&nbsp;&nbsp;NAME =&nbsp;&nbsp;&#8217;COL3&#8242; AND&nbsp;&nbsp;TYPE# =&nbsp;&nbsp;12 AND&nbsp;&nbsp;LENGTH =&nbsp;&nbsp;7 AND&nbsp;&nbsp;FIXEDSTORAGE =&nbsp;&nbsp;0 AND&nbsp;&nbsp;PRECISION# =&nbsp;&nbsp; NULL&nbsp;&nbsp;AND&nbsp;&nbsp;SCALE =&nbsp;&nbsp; NULL&nbsp;&nbsp;AND&nbsp;&nbsp;NULL$ =&nbsp;&nbsp;0 AND&nbsp;&nbsp;DEFLENGTH =&nbsp;&nbsp; NULL&nbsp;&nbsp;AND&nbsp;&nbsp;SPARE6 =&nbsp;&nbsp; NULL&nbsp;&nbsp;AND&nbsp;&nbsp;INTCOL# =&nbsp;&nbsp;3 AND&nbsp;&nbsp;PROPERTY =&nbsp;&nbsp;0 AND&nbsp;&nbsp;CHARSETID =&nbsp;&nbsp;0 AND&nbsp;&nbsp;CHARSETFORM =&nbsp;&nbsp;0 AND&nbsp;&nbsp;SPARE1 =&nbsp;&nbsp;0 AND&nbsp;&nbsp;SPARE2 =&nbsp;&nbsp;0 AND&nbsp;&nbsp;SPARE3 =&nbsp;&nbsp;0;
</p></blockquote>
<p>&nbsp; &nbsp; 所有的Cluster表都存在这个问题, 因此大部份系统表将不能正常解出Redo SQL. </p>
<h3  class="related_post_title">Relative Posts:</h3><ul class="related_post"><li>2007/06/02 -- <a href="http://www.anysql.net/research/use_mylog_for_recovery.html" title="MyLOG程序对于Drop类误操作恢复的作用">MyLOG程序对于Drop类误操作恢复的作用</a> (0)</li><li>2007/05/30 -- <a href="http://www.anysql.net/research/my_oracle_logminer_10.html" title="解出Oracle日志文件中的Redo SQL语句之十">解出Oracle日志文件中的Redo SQL语句之十</a> (14)</li><li>2007/05/30 -- <a href="http://www.anysql.net/research/my_oracle_logminer_09.html" title="解出Oracle日志文件中的Redo SQL语句之九">解出Oracle日志文件中的Redo SQL语句之九</a> (1)</li><li>2007/05/29 -- <a href="http://www.anysql.net/research/my_oracle_logminer_08.html" title="解出Oracle日志文件中的Redo SQL语句之八">解出Oracle日志文件中的Redo SQL语句之八</a> (3)</li><li>2007/05/28 -- <a href="http://www.anysql.net/research/my_oracle_logminer_07.html" title="解出Oracle日志文件中的Redo SQL语句之七">解出Oracle日志文件中的Redo SQL语句之七</a> (1)</li><li>2007/05/28 -- <a href="http://www.anysql.net/research/my_oracle_logminer_06.html" title="解出Oracle日志文件中的Redo SQL语句之六">解出Oracle日志文件中的Redo SQL语句之六</a> (0)</li><li>2007/05/25 -- <a href="http://www.anysql.net/research/my_oracle_logminer_05.html" title="解出Oracle日志文件中的Redo SQL语句之五">解出Oracle日志文件中的Redo SQL语句之五</a> (1)</li><li>2007/05/24 -- <a href="http://www.anysql.net/research/my_oracle_logminer_04.html" title="解出Oracle日志文件中的Redo SQL语句之四">解出Oracle日志文件中的Redo SQL语句之四</a> (2)</li><li>2007/05/22 -- <a href="http://www.anysql.net/research/my_oracle_logminer_02.html" title="解出Oracle日志文件中的Redo SQL语句之二">解出Oracle日志文件中的Redo SQL语句之二</a> (5)</li><li>2007/05/21 -- <a href="http://www.anysql.net/research/my_oracle_logminer_01.html" title="解出Oracle日志文件中的Redo SQL语句之一">解出Oracle日志文件中的Redo SQL语句之一</a> (2)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.anysql.net/research/mylog_dict_syscol.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>让Perl DBI返回的记录按列存贮</title>
		<link>http://www.anysql.net/developer/perl_dbi_column_array.html</link>
		<comments>http://www.anysql.net/developer/perl_dbi_column_array.html#comments</comments>
		<pubDate>Sat, 24 Mar 2007 04:10:56 +0000</pubDate>
		<dc:creator>anysql</dc:creator>
				<category><![CDATA[Developer]]></category>
		<category><![CDATA[Array]]></category>
		<category><![CDATA[Column]]></category>
		<category><![CDATA[DBD]]></category>
		<category><![CDATA[DBI]]></category>
		<category><![CDATA[Fetch]]></category>
		<category><![CDATA[Perl]]></category>

		<guid isPermaLink="false">http://www.anysql.net/wordpress/uncategorized/%e8%ae%a9perl-dbi%e8%bf%94%e5%9b%9e%e7%9a%84%e8%ae%b0%e5%bd%95%e6%8c%89%e5%88%97%e5%ad%98%e8%b4%ae.html</guid>
		<description><![CDATA[&#160; &#160; 最新版本的Perl DBI接口定义了Array DML接口, 指将一个数组作为一个绑定变量, 这个在数据库的接口层上是早已经支持的了, 象Oracle Pro*C中早就支持命名用数组了. 但在实际使用中, 去发现一点不方便的地方. 通常Perl中返回结果集是按行排列的, 如下所示: { &#160;&#160;ROW1&#160;&#160;{col1, col2, col3, col4}, &#160;&#160;ROW2&#160;&#160;{col1, col2, col3, col4}, &#160;&#160;&#8230;.. &#160;&#160;ROWn&#160;&#160;{col1, col2, col3, col4} } &#160; &#160; 但实际上在绑定时, 是这样的: $sth-&#62;bind_param_array( COL1={row1, row2, &#8230; rown}); $sth-&#62;bind_param_array( COL2={row1, row2, &#8230; rown}); &#8230;.. $sth-&#62;bind_param_array( COLn={row1, row2, &#8230; rown}); &#160; &#160; 因此需要转换, 但其实数据库底层(象OCI)使用Array Fetch时传回来的方式是按列存贮的, 如下所示: COL1={ROW1, [...]]]></description>
			<content:encoded><![CDATA[<p>&nbsp; &nbsp; 最新版本的Perl DBI接口定义了Array DML接口, 指将一个数组作为一个绑定变量, 这个在数据库的接口层上是早已经支持的了, 象Oracle Pro*C中早就支持命名用数组了. 但在实际使用中, 去发现一点不方便的地方. 通常Perl中返回结果集是按行排列的, 如下所示: </p>
<blockquote class="prefont"><p>
{ <br />
&nbsp;&nbsp;ROW1&nbsp;&nbsp;{col1, col2, col3, col4},<br />
&nbsp;&nbsp;ROW2&nbsp;&nbsp;{col1, col2, col3, col4},<br />
&nbsp;&nbsp;&#8230;..<br />
&nbsp;&nbsp;ROWn&nbsp;&nbsp;{col1, col2, col3, col4}<br />
}
</p></blockquote>
<p>&nbsp; &nbsp; 但实际上在绑定时, 是这样的: </p>
<blockquote class="prefont"><p>
$sth-&gt;bind_param_array( COL1={row1, row2, &#8230; rown});<br />
$sth-&gt;bind_param_array( COL2={row1, row2, &#8230; rown});<br />
&#8230;..<br />
$sth-&gt;bind_param_array( COLn={row1, row2, &#8230; rown});
</p></blockquote>
<p>&nbsp; &nbsp; 因此需要转换, 但其实数据库底层(象OCI)使用Array Fetch时传回来的方式是按列存贮的, 如下所示: </p>
<blockquote class="prefont"><p>
COL1={ROW1, ROW2, &#8230;, ROWn}<br />
COL2={ROW1, ROW2, &#8230;, ROWn}<br />
&#8230;&#8230;<br />
COLn={ROW1, ROW2, &#8230;, ROWn}
</p></blockquote>
<p>&nbsp; &nbsp; 在很多时侯, Perl在取回时进行了从列到行的转换, 我们在绑定时又进行了从行到列的转换, 有点多此一举啊, 影响效率.</p>
<h3  class="related_post_title">Relative Posts:</h3><ul class="related_post"><li>2007/01/10 -- <a href="http://www.anysql.net/developer/perl_dbi_realarraydml.html" title="学习Perl DBI &#8212; 真正的Array DML支持">学习Perl DBI &#8212; 真正的Array DML支持</a> (2)</li><li>2007/01/09 -- <a href="http://www.anysql.net/developer/perl_dbi_arraydml.html" title="学习Perl DBI &#8212; Array Insert/Update/Delete">学习Perl DBI &#8212; Array Insert/Update/Delete</a> (0)</li><li>2007/01/08 -- <a href="http://www.anysql.net/developer/perl_dbi_fetch.html" title="学习Perl DBI &#8212; 处理返回记录(Fetch)">学习Perl DBI &#8212; 处理返回记录(Fetch)</a> (0)</li><li>2007/09/04 -- <a href="http://www.anysql.net/developer/tuning_with_array_dml.html" title="在Perl中用Array DML来进行性能调优">在Perl中用Array DML来进行性能调优</a> (0)</li><li>2007/01/09 -- <a href="http://www.anysql.net/developer/perl_dbi_sthmeta.html" title="学习Perl DBI &#8212; 语句的高级属性">学习Perl DBI &#8212; 语句的高级属性</a> (0)</li><li>2007/01/09 -- <a href="http://www.anysql.net/developer/perl_dbi_dbhmeta.html" title="学习Perl DBI &#8212; 数据库连接的高级属性">学习Perl DBI &#8212; 数据库连接的高级属性</a> (0)</li><li>2007/01/08 -- <a href="http://www.anysql.net/developer/perl_dbi_bind.html" title="学习Perl DBI &#8212; 绑定(Bind)变量">学习Perl DBI &#8212; 绑定(Bind)变量</a> (1)</li><li>2007/01/08 -- <a href="http://www.anysql.net/developer/perl_dbi_query.html" title="学习Perl DBI &#8212; 处理查询语句">学习Perl DBI &#8212; 处理查询语句</a> (0)</li><li>2007/01/08 -- <a href="http://www.anysql.net/developer/perl_dbi_connection.html" title="学习Perl DBI &#8212; 连接到数据库">学习Perl DBI &#8212; 连接到数据库</a> (0)</li><li>2007/01/08 -- <a href="http://www.anysql.net/developer/perl_dbi_driver.html" title="学习Perl DBI &#8212; Database Driver">学习Perl DBI &#8212; Database Driver</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.anysql.net/developer/perl_dbi_column_array.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>发生在Online Redefination上的一点小故事</title>
		<link>http://www.anysql.net/oracle/online_redefination_column.html</link>
		<comments>http://www.anysql.net/oracle/online_redefination_column.html#comments</comments>
		<pubDate>Thu, 22 Mar 2007 17:17:25 +0000</pubDate>
		<dc:creator>anysql</dc:creator>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Column]]></category>
		<category><![CDATA[Online]]></category>

		<guid isPermaLink="false">http://www.anysql.net/wordpress/uncategorized/%e5%8f%91%e7%94%9f%e5%9c%a8online-redefination%e4%b8%8a%e7%9a%84%e4%b8%80%e7%82%b9%e5%b0%8f%e6%95%85%e4%ba%8b.html</guid>
		<description><![CDATA[&#160; &#160; 使用Online Redefination技术可极少停机时间, 不过也发生过一些小故事. 首先来看一下表能不能支持联机重定义: SQL&#62;&#160;&#160;exec dbms_redefinition.can_redef_table( USER, &#8216;T_DEF1&#8242;) ; PL/SQL procedure successfully completed. &#160; &#160; 接下来正式开始进行联机重定义: SQL&#62; exec dbms_redefinition.START_REDEF_TABLE( USER, &#8216;T_DEF1&#8242;, &#8216;T_DEF1_TMP&#8217;); PL/SQL procedure successfully completed. &#160; &#160; 在将要结束前, 先同步一下变更的记录, 可以常跑这个过程, 以让结束时更快一些. SQL&#62; exec dbms_redefinition.sync_interim_table( USER, &#8216;T_DEF1&#8242;, &#8216;T_DEF1_TMP&#8217;); PL/SQL procedure successfully completed. &#160; &#160; 可是现在我在表上面加一个列呢? SQL&#62; alter table t_def1 add col1000 number; Table [...]]]></description>
			<content:encoded><![CDATA[<p>&nbsp; &nbsp; 使用Online Redefination技术可极少停机时间, 不过也发生过一些小故事. 首先来看一下表能不能支持联机重定义: </p>
<blockquote class="prefont"><p>
SQL&gt;&nbsp;&nbsp;exec dbms_redefinition.can_redef_table( USER, &#8216;T_DEF1&#8242;) ;</p>
<p>PL/SQL procedure successfully completed.
</p></blockquote>
<p>&nbsp; &nbsp; 接下来正式开始进行联机重定义: </p>
<blockquote class="prefont"><p>
SQL&gt; exec dbms_redefinition.START_REDEF_TABLE( USER, &#8216;T_DEF1&#8242;, &#8216;T_DEF1_TMP&#8217;);</p>
<p>PL/SQL procedure successfully completed.
</p></blockquote>
<p>&nbsp; &nbsp; 在将要结束前, 先同步一下变更的记录, 可以常跑这个过程, 以让结束时更快一些. </p>
<blockquote class="prefont"><p>
SQL&gt; exec dbms_redefinition.sync_interim_table( USER, &#8216;T_DEF1&#8242;, &#8216;T_DEF1_TMP&#8217;);</p>
<p>PL/SQL procedure successfully completed.
</p></blockquote>
<p>&nbsp; &nbsp; 可是现在我在表上面加一个列呢? </p>
<blockquote class="prefont"><p>
SQL&gt; alter table t_def1 add col1000 number;</p>
<p>Table altered.
</p></blockquote>
<p>&nbsp; &nbsp; 现在正式结束联机重定义: </p>
<blockquote class="prefont"><p>
SQL&gt; exec dbms_redefinition.FINISH_REDEF_TABLE(USER, &#8216;T_DEF1&#8242;, &#8216;T_DEF1_TMP&#8217;);</p>
<p>PL/SQL procedure successfully completed.
</p></blockquote>
<p>&nbsp; &nbsp; 再来查查表结构? </p>
<blockquote class="prefont"><p>
SQL&gt; desc T_DEF1<br />
Name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Null?&nbsp;&nbsp;&nbsp;&nbsp;Type<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;- &#8212;&#8212;&#8211; &#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
OBJECT_ID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NOT NULL NUMBER<br />
&#8230;&#8230;<br />
SECONDARY&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VARCHAR2(1)</p>
<p>SQL&gt; desc T_DEF1_TMP<br />
Name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Null?&nbsp;&nbsp;&nbsp;&nbsp;Type<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;- &#8212;&#8212;&#8211; &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
OBJECT_ID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NOT NULL NUMBER<br />
&#8230;&#8230;<br />
SECONDARY&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VARCHAR2(1)<br />
COL1000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NUMBER</p>
</blockquote>
<p>&nbsp; &nbsp; 只有Temp表上有新增的列, 两个不同的人在同时做这两件事时, 真的很难预先想到这一点. </p>
<h3  class="related_post_title">Relative Posts:</h3><ul class="related_post"><li>2008/03/04 -- <a href="http://www.anysql.net/tools/ocidiff_assist_51job_dba.html" title="ocidiff助力51job日常维护">ocidiff助力51job日常维护</a> (6)</li><li>2008/03/03 -- <a href="http://www.anysql.net/dba/is_column_order_matter.html" title="先报身高? 还是体重?">先报身高? 还是体重?</a> (4)</li><li>2007/06/03 -- <a href="http://www.anysql.net/research/mylog_dict_syscol.html" title="用MyLOG解出对COL$系统表进行的操作">用MyLOG解出对COL$系统表进行的操作</a> (0)</li><li>2010/06/19 -- <a href="http://www.anysql.net/tools/sqluldr2-non-free-features.html" title="2011年起SQLULDR2中的收费功能">2011年起SQLULDR2中的收费功能</a> (3)</li><li>2009/11/07 -- <a href="http://www.anysql.net/tools/sqluldr2-mysql-data-migration-test.html" title="MySQL数据迁移测试">MySQL数据迁移测试</a> (8)</li><li>2009/06/25 -- <a href="http://www.anysql.net/tools/oramon-system-event.html" title="oramon如何收集V$SYSTEM_EVENT数据?">oramon如何收集V$SYSTEM_EVENT数据?</a> (3)</li><li>2009/06/25 -- <a href="http://www.anysql.net/tools/oramon-session-history.html" title="oramon如何从V$SESSION收集性能数据?">oramon如何从V$SESSION收集性能数据?</a> (0)</li><li>2009/06/24 -- <a href="http://www.anysql.net/oracle/oramon-system-statistics.html" title="oramon如何从V$SYSSTAT收集性能数据?">oramon如何从V$SYSSTAT收集性能数据?</a> (1)</li><li>2009/05/26 -- <a href="http://www.anysql.net/dba/hard-choose-mysql-or-oracle.html" title="MySQL或Oracle, 是个问题?">MySQL或Oracle, 是个问题?</a> (7)</li><li>2009/05/21 -- <a href="http://www.anysql.net/dba/oramon-database-perf-alert.html" title="用oramon的数据进行报警">用oramon的数据进行报警</a> (3)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.anysql.net/oracle/online_redefination_column.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
