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

<channel>
	<title>Proguru &#124; IT tech,review and news &#187; Database</title>
	<atom:link href="http://blog.pcware.cn/category/it/database/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.pcware.cn</link>
	<description>Just for Freedom</description>
	<lastBuildDate>Thu, 29 Jul 2010 06:35:03 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>2003 R2平台oracle 9206数据库冷备份恢复的路径依赖问题</title>
		<link>http://blog.pcware.cn/it/database/oracle_9206_database_cold_backup_restore.html</link>
		<comments>http://blog.pcware.cn/it/database/oracle_9206_database_cold_backup_restore.html#comments</comments>
		<pubDate>Thu, 20 May 2010 07:46:37 +0000</pubDate>
		<dc:creator>proguru</dc:creator>
				<category><![CDATA[Database]]></category>

		<guid isPermaLink="false">http://blog.pcware.cn/?p=841</guid>
		<description><![CDATA[windows 2003 R2做oracle数据库冷备份恢复时遇到路径依赖问题，原库oracle安装在F分区，而恢复到的oracle安装在E分区。两边数据库的版本是完全一致的，除了安装路径不同,sid实例名都为orcl。停下服务器后，把原库的控制文件、数据文件、日志文件、参数文件、密码文件拷贝到了新库安装目录。实际上为了省事，把oracle的安装目录整个同步了一遍。拷贝完后oracle服务无法启动，无法启动就对了。这些关键文件的路径都变了，库肯定是打不开了。怎么办？
两个方法，一是重新安装oracle使其路径与原库一致,二是修改关键文件的路径。第一种没啥意思，就第二种吧。
因为机器名字不同了，所以要打开\oracle\ora92\network\admin下面的几个文件tnsnames.ora、snmp_ro.ora和listener.ora把里面的机器名改成正确的值,snmp_ro.ora和listener.ora文件里面的文件路径改为正确的值。
参数文件里面记录了控制文件的路径，要把这些路径更改过来。oracle 9i默认是使用spfile的，而spfile是二进制的，最好不要直接修改，导出pfile，修改控制文件路径后再导回去就ok了

>sqlplus &#8220;/ as sysdba&#8221;
SQL>create pfile=&#8221;e:\oracle\admin\orcl\pfile\initorcl.ora&#8221; from spfile
然后打开initorcl.ora修改控制文件路径为实际的控制文件路径，再导回到spfile
SQL>create spfile from pfile=&#8221;e:\oracle\admin\orcl\pfile\initorcl.ora&#8221;
然后重建控制文件，因为控制文件里面记录了数据文件、日志文件的路径。数据文件好多啊，还是先从原库备份一下控制文件吧
SQL>alter database backup controlfile to trace;
找到生成的trc文件，路径为F:\oracle\admin\orcl\udump\orcl_ora_xxxx.trc，看看生成时间就能知道是哪个了。从这个文件里面提取出一个sql文件来，因为日志文件是完整的，就提取NORESETLOGS这段,保存到文件createctrlfile.sql。oracle 9206生成的这个脚本有个bug,CHARACTER SET ZHS16GBK这行的上面一行多了个逗号，去掉就可以了。语句的样子大体如下
STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE &#8220;ORCL&#8221; NORESETLOGS  NOARCHIVELOG
&#8211;  SET STANDBY TO MAXIMIZE PERFORMANCE
    MAXLOGFILES 50
    MAXLOGMEMBERS 5
    MAXDATAFILES 100
    MAXINSTANCES 1
 [...]]]></description>
			<content:encoded><![CDATA[<p style="text-indent:2em">windows 2003 R2做oracle数据库冷备份恢复时遇到路径依赖问题，原库oracle安装在F分区，而恢复到的oracle安装在E分区。两边数据库的版本是完全一致的，除了安装路径不同,sid实例名都为orcl。停下服务器后，把原库的控制文件、数据文件、日志文件、参数文件、密码文件拷贝到了新库安装目录。实际上为了省事，把oracle的安装目录整个同步了一遍。拷贝完后oracle服务无法启动，无法启动就对了。这些关键文件的路径都变了，库肯定是打不开了。怎么办？</p>
<p style="text-indent:2em">两个方法，一是重新安装oracle使其路径与原库一致,二是修改关键文件的路径。第一种没啥意思，就第二种吧。</p>
<p style="text-indent:2em">因为机器名字不同了，所以要打开\oracle\ora92\network\admin下面的几个文件tnsnames.ora、snmp_ro.ora和listener.ora把里面的机器名改成正确的值,snmp_ro.ora和listener.ora文件里面的文件路径改为正确的值。</p>
<p style="text-indent:2em">参数文件里面记录了控制文件的路径，要把这些路径更改过来。oracle 9i默认是使用spfile的，而spfile是二进制的，最好不要直接修改，导出pfile，修改控制文件路径后再导回去就ok了</p>
<p><span id="more-841"></span><br />
>sqlplus &#8220;/ as sysdba&#8221;<br />
SQL>create pfile=&#8221;e:\oracle\admin\orcl\pfile\initorcl.ora&#8221; from spfile</p>
<p style="text-indent:2em">然后打开initorcl.ora修改控制文件路径为实际的控制文件路径，再导回到spfile</p>
<p>SQL>create spfile from pfile=&#8221;e:\oracle\admin\orcl\pfile\initorcl.ora&#8221;</p>
<p style="text-indent:2em">然后重建控制文件，因为控制文件里面记录了数据文件、日志文件的路径。数据文件好多啊，还是先从原库备份一下控制文件吧</p>
<p>SQL>alter database backup controlfile to trace;</p>
<p style="text-indent:2em">找到生成的trc文件，路径为F:\oracle\admin\orcl\udump\orcl_ora_xxxx.trc，看看生成时间就能知道是哪个了。从这个文件里面提取出一个sql文件来，因为日志文件是完整的，就提取NORESETLOGS这段,保存到文件createctrlfile.sql。oracle 9206生成的这个脚本有个bug,CHARACTER SET ZHS16GBK这行的上面一行多了个逗号，去掉就可以了。语句的样子大体如下</p>
<p>STARTUP NOMOUNT<br />
CREATE CONTROLFILE REUSE DATABASE &#8220;ORCL&#8221; NORESETLOGS  NOARCHIVELOG<br />
&#8211;  SET STANDBY TO MAXIMIZE PERFORMANCE<br />
    MAXLOGFILES 50<br />
    MAXLOGMEMBERS 5<br />
    MAXDATAFILES 100<br />
    MAXINSTANCES 1<br />
    MAXLOGHISTORY 2722<br />
LOGFILE<br />
  GROUP 1 &#8216;F:\ORACLE\ORADATA\ORCL\REDO01.LOG&#8217;  SIZE 100M,<br />
  GROUP 2 &#8216;F:\ORACLE\ORADATA\ORCL\REDO02.LOG&#8217;  SIZE 100M,<br />
  GROUP 3 &#8216;F:\ORACLE\ORADATA\ORCL\REDO03.LOG&#8217;  SIZE 100M<br />
&#8211; STANDBY LOGFILE<br />
DATAFILE<br />
  &#8216;F:\ORACLE\ORADATA\ORCL\SYSTEM01.DBF&#8217;,<br />
  &#8216;F:\ORACLE\ORADATA\ORCL\UNDOTBS01.DBF&#8217;,<br />
  &#8216;F:\ORACLE\ORADATA\ORCL\CWMLITE01.DBF&#8217;,<br />
  &#8216;F:\ORACLE\ORADATA\ORCL\DRSYS01.DBF&#8217;,<br />
  &#8230;<br />
CHARACTER SET ZHS16GBK<br />
;</p>
<p style="text-indent:2em">把这个sql里面的数据文件和日志文件的路径修改成正确的路径后，执行一下语句</p>
<p>>sqlplus &#8220;/ as sysdba&#8221;<br />
SQL>shutdown immediate<br />
SQL>@createctrlfile.sql</p>
<p style="text-indent:2em">提示控制文件重建完成就ok了，然后</p>
<p>SQL>alter database open</p>
<p style="text-indent:2em">就可以启动数据库了。抱怨一句，oracle数据库的这些关键文件为什么不用相对路径呢？相对于$ORACLE_HOME不就得了吗，真烦！</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.pcware.cn/it/database/oracle_9206_database_cold_backup_restore.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Oracle Jobs与Exp/Imp</title>
		<link>http://blog.pcware.cn/it/database/oracle_jobs_exp_imp.html</link>
		<comments>http://blog.pcware.cn/it/database/oracle_jobs_exp_imp.html#comments</comments>
		<pubDate>Mon, 21 Sep 2009 01:38:59 +0000</pubDate>
		<dc:creator>proguru</dc:creator>
				<category><![CDATA[Database]]></category>

		<guid isPermaLink="false">http://blog.pcware.cn/?p=485</guid>
		<description><![CDATA[最近因为一点儿小问题，用Exp/Imp做了一次数据恢复。恢复以后本来正常的snapshot刷新出了问题，job不工作了，本来一天要更新两次数据，现在数据停止更新了。
 用system登录oracle，然后select * from dba_jobs;发现所有的jobs的LOG_USER和PRIV_USER变成了system用户，而SCHEMA_USER还是原来的用户，而且NEXT_DATE也变的面目全非。原来是Imp时jobs全部corrupt掉了。
出现这个情况的原因是Exp和Imp的时候都是使用的system用户，所以为带有jobs的用户做Exp/Imp时，一定要用这个用户自身来导入、导出。

因为用户已经删除没有机会再重新Exp，只好重新用拥有jobs的用户来进行Imp，一定要为该用户授予DBA角色，不然无法进行导入，会有错误提示：
  &#8220;IMP-00013: 只有 DBA 才能导入由其它 DBA 导出的文件
   IMP-00000: 未成功终止导入&#8221;
即使授予了DBA角色，仍然会有警告：
  &#8220;警告: 此对象由 SYSTEM 导出, 而不是当前用户&#8221;
但并不影响正确的导入。
导入完成后，重新查看jobs发现已经都正常了。
手工刷新一次，仍然提示错误：
  &#8220;已连接。
  BEGIN proc_refreshsnapshot; END;
  *
  ERROR 位于第 1 行:
  ORA-12034: &#8220;xxx&#8221;.&#8221;xxx&#8221; 上的实体化视图日志比上次刷新后的内容新
  ORA-06512: 在&#8221;SYS.DBMS_SNAPSHOT&#8221;, line 803
  ORA-06512: 在&#8221;SYS.DBMS_SNAPSHOT&#8221;, line 860
  ORA-06512: 在&#8221;SYS.DBMS_SNAPSHOT&#8221;, line 841
  [...]]]></description>
			<content:encoded><![CDATA[<p>最近因为一点儿小问题，用Exp/Imp做了一次数据恢复。恢复以后本来正常的snapshot刷新出了问题，job不工作了，本来一天要更新两次数据，现在数据停止更新了。<br />
 用system登录oracle，然后select * from dba_jobs;发现所有的jobs的LOG_USER和PRIV_USER变成了system用户，而SCHEMA_USER还是原来的用户，而且NEXT_DATE也变的面目全非。原来是Imp时jobs全部corrupt掉了。</p>
<p>出现这个情况的原因是Exp和Imp的时候都是使用的system用户，所以为带有jobs的用户做Exp/Imp时，一定要用这个用户自身来导入、导出。<br />
<span id="more-485"></span><br />
因为用户已经删除没有机会再重新Exp，只好重新用拥有jobs的用户来进行Imp，一定要为该用户授予DBA角色，不然无法进行导入，会有错误提示：</p>
<p>  &#8220;IMP-00013: 只有 DBA 才能导入由其它 DBA 导出的文件<br />
   IMP-00000: 未成功终止导入&#8221;</p>
<p>即使授予了DBA角色，仍然会有警告：</p>
<p>  &#8220;警告: 此对象由 SYSTEM 导出, 而不是当前用户&#8221;</p>
<p>但并不影响正确的导入。</p>
<p>导入完成后，重新查看jobs发现已经都正常了。<br />
手工刷新一次，仍然提示错误：</p>
<p>  &#8220;已连接。<br />
  BEGIN proc_refreshsnapshot; END;</p>
<p>  *<br />
  ERROR 位于第 1 行:<br />
  ORA-12034: &#8220;xxx&#8221;.&#8221;xxx&#8221; 上的实体化视图日志比上次刷新后的内容新<br />
  ORA-06512: 在&#8221;SYS.DBMS_SNAPSHOT&#8221;, line 803<br />
  ORA-06512: 在&#8221;SYS.DBMS_SNAPSHOT&#8221;, line 860<br />
  ORA-06512: 在&#8221;SYS.DBMS_SNAPSHOT&#8221;, line 841<br />
  ORA-06512: 在&#8221;xxx.PROC_REFRESHSNAPSHOT&#8221;, line 3<br />
  ORA-06512: 在line 1&#8243;</p>
<p>把所有snapshot table做一次完全刷新，exec dbms_snapshot.refresh(&#8216;xxx&#8217;,'C&#8217;);,<br />
问题解决，现在一切正常。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.pcware.cn/it/database/oracle_jobs_exp_imp.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
