﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-beauty_beast-随笔分类-oracle日常管理</title><link>http://www.blogjava.net/beauty_beast/category/7284.html</link><description>上善若水   厚德载物 
</description><language>zh-cn</language><lastBuildDate>Wed, 28 Feb 2007 06:05:07 GMT</lastBuildDate><pubDate>Wed, 28 Feb 2007 06:05:07 GMT</pubDate><ttl>60</ttl><item><title>oracle 导入导出</title><link>http://www.blogjava.net/beauty_beast/archive/2006/03/28/37849.html</link><dc:creator>柳随风</dc:creator><author>柳随风</author><pubDate>Tue, 28 Mar 2006 10:35:00 GMT</pubDate><guid>http://www.blogjava.net/beauty_beast/archive/2006/03/28/37849.html</guid><wfw:comment>http://www.blogjava.net/beauty_beast/comments/37849.html</wfw:comment><comments>http://www.blogjava.net/beauty_beast/archive/2006/03/28/37849.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/beauty_beast/comments/commentRss/37849.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beauty_beast/services/trackbacks/37849.html</trackback:ping><description><![CDATA[exp、imp是oracle抽取表、模式，相关参数通过命令行追加参数" help=Y"，可以查看到详细的参数信息。<br />一般的我们都比较熟悉，上周在学习《export one on one oracle》中了解、学习了一些不常用的特性，<br />作为学习心得，记录如下;<br />exp 一些不熟悉的特性<br />1、filesize  该参数设置对应导出数据文件最大大小（这样可分成多个文件，为windows文件大小限制考虑）<br />2、query      过滤导出数据     =\" where colulmn\=1000\"(unix)  ,=\""" where column\=1000\"""(windows)，估计plsql/developer,toad在导出数据功能方面就是用此功能，但该参数很方便，在不同的操作系统下不一样，<br />所以采用特性3配置文件的方式比较好<br />3、parfile=参数文件名 <br />参数文件内容   query=" where x&lt;10"<br />imp 有个特性比较好，可以导出对应数据对象的定义脚本<br />1、indexfile  <br />例子 imp  user/password   file=./test.dmp indexfile=define.sql<br /><br />关于exp,imp 比较复杂的一个功能就是传输表空间。<br /><strong>使用前提：</strong><br />        1、操作系统一致、字符集、块大小一致<br />        2、源数据数据库不存在多个同名表空间<br />        3、不能是系统、回滚表空间<br />        4、传输时表空间只读<br />        5、必须以sysdba用户导入导出<br /><strong>使用检查：<br />         </strong>1、检查是否符合条件<br />          可通过oracle对应的工具包可以检查对应的表空间是否能够传输。<br />           exec dbms_tts.transport_set_check('表空间名',true);<br />           查看是否有违背的信息<br />                    select * from  transport_set_violations;<br />          2、设置对应表空间为只读<br />                    alter tablespace tablespacename read;<br />          3、导出表空间<br />                    exp \'sys/sys@TESTDB_10.243.21.30 as sysdba\'  transport_tablespace=y  tablespaces=portal                 file=./tts.dmp   <br />          4、拷贝出对应的数据文件<br />          5、导入<br />                  imp \'sys/sys  as sysdba\'  file=./tts.dmp  transport_tablespace=y <br />  "datafiles=(/export/home1/oracle/oradata/oracl/portal.dbf)"<br />         6、将对应表空间设置为可写<br />                 alter tablespace tablespacename read and write;<br />(可惜个人在第五步时发现两个数据库的字符集不一致，导致没有成功）<br /><br />跨版本导入导出原则：<br />1、使用低版本导出工具<br />2、使用和目的数据库版本一致的导入工具 <br />3、导入导出字符集要保持一致，避免导入导出时转换      <br /><br />       <br /><br /><br /><br /><br /><img src ="http://www.blogjava.net/beauty_beast/aggbug/37849.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beauty_beast/" target="_blank">柳随风</a> 2006-03-28 18:35 <a href="http://www.blogjava.net/beauty_beast/archive/2006/03/28/37849.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>利用logminer以及登陆触发器实现对Oracle数据操作追踪 </title><link>http://www.blogjava.net/beauty_beast/archive/2006/02/14/30572.html</link><dc:creator>柳随风</dc:creator><author>柳随风</author><pubDate>Tue, 14 Feb 2006 04:26:00 GMT</pubDate><guid>http://www.blogjava.net/beauty_beast/archive/2006/02/14/30572.html</guid><wfw:comment>http://www.blogjava.net/beauty_beast/comments/30572.html</wfw:comment><comments>http://www.blogjava.net/beauty_beast/archive/2006/02/14/30572.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/beauty_beast/comments/commentRss/30572.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beauty_beast/services/trackbacks/30572.html</trackback:ping><description><![CDATA[
		<p>实现方式比较简单：<br /> 创建用户登陆数据库的触发器，使用工具包记载客户端登陆的ip，使用logminer分析相关的归档文件以及联机重做日志，查找恶意删除数据的客户端信息。<br />条件：  以sys用户执行如下脚本<br />创建相关脚本：<br />create table login_log<br />(<br />SID NUMBER(16),   <br />SERIAL NUMBER(16),   <br />MACHINE VARCHAR2(64) ,<br />OSUSER VARCHAR2(30),   <br />USERNAME VARCHAR2(30),<br />PROGRAM VARCHAR2(48),<br />LOGINTIME DATE<br />);<br /><br />create or replace trigger logon_trigger<br />after logon on database<br />declare<br />LPRG VARCHAR2(48);<br />LUSERNAME varchar2(30);<br />LOSUSER   varchar2(30);<br />LMACHINE  varchar2(64);<br />LSID pls_integer;<br />LSERIAL pls_integer;<br />begin<br />--在会话信息中增加客户端ip地址<br />dbms_application_info.set_client_info(sys_context('userenv', 'ip_address'));<br />select sid,serial#,machine,osuser,program,username<br />into LSID,LSERIAL,LMACHINE,LOSUSER,LPRG,LUSERNAME from v$session<br />where sid=(select sid from v$mystat where rownum&lt;2);<br />insert into login_log(sid,serial,machine,osuser,username,program,logintime)<br />values (LSID,LSERIAL,LMACHINE,LOSUSER,LUSERNAME,LPRG,sysdate);end;<br /><br />分析相关日志时，通过v$logmnr_contents视图中session_info字段中的信息可以查找到相关信息。<br />类似如下的sql:<br />     select session_info,sql_redo from v$logmnr_contents where  sql_redo like '%drop%';<br /><br /><br /><br /><br /></p>
<img src ="http://www.blogjava.net/beauty_beast/aggbug/30572.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beauty_beast/" target="_blank">柳随风</a> 2006-02-14 12:26 <a href="http://www.blogjava.net/beauty_beast/archive/2006/02/14/30572.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle logminer工具的使用</title><link>http://www.blogjava.net/beauty_beast/archive/2006/02/14/30565.html</link><dc:creator>柳随风</dc:creator><author>柳随风</author><pubDate>Tue, 14 Feb 2006 03:40:00 GMT</pubDate><guid>http://www.blogjava.net/beauty_beast/archive/2006/02/14/30565.html</guid><wfw:comment>http://www.blogjava.net/beauty_beast/comments/30565.html</wfw:comment><comments>http://www.blogjava.net/beauty_beast/archive/2006/02/14/30565.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/beauty_beast/comments/commentRss/30565.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beauty_beast/services/trackbacks/30565.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 关于logminer的使用，转载一篇从oracle中国用户讨论组的文章，自己也方便查找一、logminer的用途 　　日志文件中存放着所有进行数据库恢复的数据，记录了针对数据库结构的每一个变化，也就是对数据库操作的所有DML语句。 　　logminer 工具即可以用来分析在线，也可以用来分析离线日志文件，即可以分析本身自己数据库的重作日志文件，也可以用来分析其他数据库的重作日志文件。 ...&nbsp;&nbsp;<a href='http://www.blogjava.net/beauty_beast/archive/2006/02/14/30565.html'>阅读全文</a><img src ="http://www.blogjava.net/beauty_beast/aggbug/30565.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beauty_beast/" target="_blank">柳随风</a> 2006-02-14 11:40 <a href="http://www.blogjava.net/beauty_beast/archive/2006/02/14/30565.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle常用脚本</title><link>http://www.blogjava.net/beauty_beast/archive/2006/02/05/29585.html</link><dc:creator>柳随风</dc:creator><author>柳随风</author><pubDate>Sun, 05 Feb 2006 04:15:00 GMT</pubDate><guid>http://www.blogjava.net/beauty_beast/archive/2006/02/05/29585.html</guid><wfw:comment>http://www.blogjava.net/beauty_beast/comments/29585.html</wfw:comment><comments>http://www.blogjava.net/beauty_beast/archive/2006/02/05/29585.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/beauty_beast/comments/commentRss/29585.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/beauty_beast/services/trackbacks/29585.html</trackback:ping><description><![CDATA[
		<p>前一段时间做数据库日常管理、分析，一些脚本没有时间整理，现列出来，有空再整：<br />--oracle 常用sql<br />--查询数据库信息<br />select * from v$database;</p>
		<p>--查询当前实例信息<br />select * from v$instance;</p>
		<p>--查询数据库版本信息<br />select * from v$version;</p>
		<p>--查询所有用户(dba权限)<br />select * from dba_users;</p>
		<p>--查询共享内存中的sql信息，执行较慢<br />select hash_value from v$sqltext where sql_text like '%查询sql%';<br />select sql_text from v$sqltext where hash_value =查找的hash_value order by hash_value,piece;</p>
		<p>--查询当前系统表空间存储信息<br />select a.file_id,a.file_name, a.TABLESPACE_NAME,a.bytes/1024/1024||'M' as totalspace,<br />nvl(b.freespace,0)||'M' as freespace,a.autoextensible from dba_data_files a,<br />(select sum(bytes)/1024/1024 as freespace,file_id,tablespace_name from dba_free_space<br />group by tablespace_name,file_id ) b<br />where a.file_id=b.file_id(+) <br />order  by a.tablespace_name,file_name;</p>
		<p>
				<br />--统计已占用的表空间<br />select sum(a.bytes/1024/1024-nvl(b.freespace,0))||'M' from dba_data_files a,<br />(select sum(bytes)/1024/1024 as freespace,file_id,tablespace_name from dba_free_space<br />group by tablespace_name,file_id ) b<br />where a.file_id=b.file_id(+) and a.tablespace_name='tablespace名称'</p>
		<p> </p>
		<p>--查询当前活动session最近一次执行的sql<br />select sql_text from v$sqltext where hash_value=(<br />select   PREV_HASH_VALUE from v$session where status='ACTIVE' and username is not null ) order by piece</p>
		<p> </p>
		<p>--查询相关用户的索引情况<br />select a.*,b.column_name,b.column_length from <br />(select owner,index_name,table_name,index_type,tablespace_name<br />from dba_indexes where owner ='用户名' and index_name not in<br />(select constraint_name from dba_constraints where owner='用户名' and constraint_type in ('P','R'))<br />)a,<br />(select * from dba_ind_columns b where index_owner='用户名') b<br />where a.index_name=b.index_name <br />order by a.owner,a.table_name,a.index_name </p>
		<p>--重建索引<br />alter index 索引名称 rebuild nologging;</p>
		<p>
				<br />
				<br />--查看事务回滚率<br />select name,value from v$sysstat where name in('user commits','transaction rollbacks');</p>
		<p> </p>
		<p> </p>
		<p>--sql分析优化</p>
		<p>--脚本位置${oracle_home}/rdbms/admin/utlxplan.sql 创建执行计划表<br />--授权访问<br />create public synonym plan_table for plan_table; <br />grant select,update,insert,delete on plan_table to public; <br />--脚本位置${oracle_home}/sqlplus/admin/plustrce.sql 执行授权角色</p>
		<p> </p>
		<p>--spfile<br />--数据库建库完成后，第一次手工启动手工创建spfile文件,命令格式为<br />create spfile[='filename'] from pfile[='filename'];<br />--判断是采用spfile还是pfile启动数据库的，可以下面sql根据是那种方式<br />select decode(count(*),0,'pfile',1,'spfile') from V$spparameter where isspecified='TRUE' and rownum=1;</p>
		<p>--spfile,pfile创建默认位置为$ORACLE_HOME/dbs/,$ORACLE_HOME/database/(windows)<br />--启动时公司搜索默认位置下spfile.ora,spfile$ORACLE_SID.ora,init$ORACLE_SID.ora<br />--采用指定的方式启动<br />startup pfile='filename';<br />--创建spfile,pfile可以在数据库关闭后仍然可以创建<br />--如果pfile内有spfile文件参数的设定，采用pfile方式启动后还可以修改初始参数到spfile中<br />--oracle9.2.0.1版本后创建数据库时系统会自动创建spfile，默认的启动方式就是采用spfile<br />--运行时间spfile文件没有锁定<br />--修改密码</p>
		<p>alter user username identified by newpassword;<br />--oracle9i 验证方式有两种，可以在sqlnet.ora中配置<br />SQLNET.AUTHENTICATION_SERVICES=(NTS)   --操作系统验证，无须用户输入密码<br />SQLNET.AUTHENTICATION_SERVICES=(none) --用正确的用户和密码验证<br />--设置密码级别 remote_login_passwordfile <br />--设置为exclusive，表示口令文件由一个数据库使用 ，远程客户端可以用sys登陆（如果密码文件删除后，远程无法登陆）<br />--设置为shared，表示 多个数据库可以共享一个口令文件,但是只可以识别一个用户SYS，不能将sysdba权限授权给其他用户<br />--设置为none,表示没有口令文件   远程无法用sys登陆，只能通过操作系统验证方式<br />--密码文件如果丢失或损坏，系统无法启动<br />--可以手工创建oracle系统密码<br />orapwd file=&lt;fname&gt; password=&lt;password&gt; entries=&lt;users&gt; <br />entries  --sysdba链接最大数<br />--密码文件没有锁定，只是启动时的引导作用</p>
		<p>
				<br />V$SYSTEM_EVENT  数据库实例整个运行期间所有进程事件的等待时间、次数视图，作为系统优化的依据<br />等待事件分为三种类型 空闲等待、例行等待、资源等待<br />注意很多时候进程是空闲等待处理的，所以在该视图主要查看资源等待时间，<br />如果是进程在例行操作中等待，可以查看该事件的平均等待时间</p>
		<p> </p>
		<p>--v$session_wait<br />--常见的空闲等待事件：client message、null event、pipe get、pmon/smon timer、rdbms rpc message及sql*net等；<br />--常见的非等闲事件：<br />buffer busy waits、<br />db file scattered read、<br />db file sequential read、<br />enqueue、<br />free buffer waits、<br />latch free、<br />log file sync、<br />log file paralle write</p>
		<p> </p>
		<p>导入导出建议一定要同版本的导入导出工具<br />常见错误 exp-00003</p>
		<p>
				<br />估算导出dmp文件大小<br />select sum(bytes) from user_segments where segment_type='TABLE';</p>
		<p>这个计算结果不包含LOB, 和VARRAY, 亦不含分区表数据</p>
		<p>
				<br />--设置归档模式<br />startup mount;<br />alter database archivelog;<br />alter database open;<br />alter system set  log_archive_start=true scope=spfile;<br />shutdown immediate<br />startup;</p>
		<p> </p>
		<p> </p>
		<p>数据库已经误删除数据文件，如何启动</p>
		<p>startup mount<br />alter database datafile 'filepos'  offline drop;(noarchivelog)<br />alter database datafile 'filepos'  offline;(archivelog)<br />alter database open;<br />drop tablespace 'spacename'   including contents;</p>
		<p> </p>
		<p>log_miner的使用</p>
		<p> </p>
		<p> </p>
		<p> </p>
		<p>
				<br />--查看联机日志信息<br />select a.group#,b.member, sequence#,first_change# from v$log a ,v$logfile b<br />where a.group#=b.group#;</p>
		<p> </p>
		<p>v$rollstat三个字段说明<br />rssize 回滚段大小<br />optsize  optimal大小<br />hwmsize   你的回滚段曾经最高大小</p>
		<p>--统计当前回滚段大小、最高峰大小<br />select sum(rssize)/1024/1024||'M',sum(hwmsize/1024/1024)||'M'<br />from v$rollstat;</p>
		<p> </p>
		<p>--查看事务占用的回滚段大小(事务尚未提交)</p>
		<p>select b.used_ublk,b.xidusn,a.sid from v$session a,v$transaction b<br />where a.taddr=b.addr;</p>
		<p> </p>
		<p>--查看操作系统硬件信息<br />prtdiag -v </p>
		<p>
				<br />--临时表空间为空 <br />错误号ORA-25153:<br />alter tablespace 表空间名  add tempfile '文件名' size 文件大小;<br />创建临时表空间<br />create temporary tablespace 新表空间名 tempfile '文件名' size 文件大小;<br />alter  database default temporary tablespace 新表空间名;<br />drop tablespace 旧空间名 including contents;<br /><br /><br /><br /><br /></p>
		<p>rman数据文件损坏恢复脚本<br />--数据文件损坏<br />run{<br />allocate channel c1 type disk;<br />restore datafile 数据文件号;<br />recover datafile 数据文件号;<br />release channel c1;<br />}</p>
		<p>
				<br />一次控制文件损坏，恢复过程<br />故意修改控制文件，出现ora-00205错误<br />在rman下恢复控制文件<br />restore controlfile from file='最近的一次控制文件备份'<br />在alter database open resetlogs 出现<br />ORA 1152 file &lt;name&gt; was not restored from a sufficiently old backup  错误<br />不行<br />然后在rman下从自动文件恢复<br />restore controlfile from autobackup;<br />启动仍然出现该错误，<br />通过rman恢复database也不行，<br />最后没办法，采用<br />ALTER DATABASE BACKUP CONTROLFILE TO TRACE;<br />然后根据trc文件中的指导<br />采用第二种方式也不行，只能采用第一种建立<br />在数据库nomount状态下<br />执行trc相关 脚本<br />alter database open;<br />数据库启动正常<br /></p>
<img src ="http://www.blogjava.net/beauty_beast/aggbug/29585.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/beauty_beast/" target="_blank">柳随风</a> 2006-02-05 12:15 <a href="http://www.blogjava.net/beauty_beast/archive/2006/02/05/29585.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>