Oracle数据库的一些常用操作经验总结

发表于:2008-2-22 12:25

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:未知    来源:网络转载

二三:基于表空间的备份恢复方式
以表空间的方式备份数据可以根据一下几个步骤进行。
1:把表空间置于read only状态
alter tablespce tablespace_name read only;
2:用exp备份以表空间方式备份数据
exp “ ’sys/manager as sysdba’ ” file=test.dmp tablespaces=表空间名字 transport_tablespace=y  log=test.log
3:备份原来的表空间中的所有数据文件以及test.dmp文件.
4:恢复原来表空间中所有的数据文件到新的数据库下。
5:用imp方式恢复数据
imp “ ’sys/manager as sysdba’ ” file=test.dmp tablespaces=表空间名字 transport_tablespace=y datafiles=’要恢复数据的文件路径’(如果多个文件用逗号分开)
6:将表空间置于read write模式下
alter tablespce tablespace_name read write;
至此,基于表空间的恢复完成。
二四:sqlplus中通过错误号查错误信息
SQL>host oerr ora 03113
SQL>exec dbms_output.put_line(sqlerrm(-03113));
二五:利用ORADEBUG命令DUMP控制文件
先利用oradebug命令来dump出控制文件中的内容

[zhangleyi@fedora zhangleyi]$ sqlplus /nolog

SQL*Plus: Release 10.1.0.2.0 - Production on Thu Apr 15 01:17:54 2004

Copyright (c) 1982, 2004, Oracle. All rights reserved.

@>conn sys/dba as sysdba
Connected.

SYS@ora10g>oradebug setmypid
Statement processed.
SYS@ora10g>oradebug dump controlf 4
Statement processed.

生成的dump文件作为附件上传了,有兴趣的可以下载看看。

如果搞清楚了控制文件中的各个部分的含义,对于Oracle的很多机制,特别是备份和恢复,就能更明白了。

IXDBA.NET技术社区

先说一个,我们注意下面两个部分。
***********************************************************
DATABASE ENTRY
***********************************************************
Database checkpoint: Thread=1 scn: 0x0000.00120a61

***********************************************************
DATA FILE RECORDS
***********************************************************
DATA FILE #1:
(name #7) /u01/oracle/oradata/ora10g/system01.dbf
creation size=0 block size=8192 status=0xe head=7 tail=7 dup=1
tablespace 0, index=1 krfil=1 prev_file=0
unrecoverable scn: 0x0000.00000000 01/01/1988 00:00:00
Checkpoint cnt:267 scn: 0x0000.00121076 04/14/2004 23:23:58
Stop scn: 0xffff.ffffffff 04/14/2004 05:32:53

我们可以看到所有的数据文件Stop scn: 0xffff.ffffffff,这是一个极大的值,说明我们的数据库是打开的。我们知道,shutdown abort的时候,没有checkpoint,控制文件也不会被更新,当数据库重新启动的时候,Oracle会发现这个SCN仍然是这个极大值,和数据库的Checkpoint SCN不一样,此时数据库就会进行恢复,只有当这两个SCN一样,数据库才能OPEN。

大家也可以自己作个实验,shutdown immediate数据库,这是正常关闭,然后startup mount,然后dump控制文件,会发现Stop SCN和Checkpoint SCN是一样的值。

另外大家都知道SCN这个名词,但是我们可以看到其实Oracle中有很多类型的SCN,而每个SCN负责不同的功能。

二六:如何通过oracle系统进程查找正在执行的SQL语句
1、 先用ps -aux查询,发现有个进程占用大量CPU,记录下PID

2、 用语句SELECT a.username,a.sid,a.serial# FROM v$session a,v$process c
WHERE c.addr=a.paddr and spid=PID
查出相应的SESSION
3、 用语句select * from v$session_wait where sid=...
就查出等待事件是什么。
以上操作其实还可以用一个sql实现:
SELECT   /*+ ORDERED */
         sql_text
    FROM v$sqltext a
   WHERE (a.hash_value, a.address) IN (
            SELECT DECODE (sql_hash_value,
                           0, prev_hash_value,
                           sql_hash_value
                          ),
                   DECODE (sql_hash_value, 0, prev_sql_addr, sql_address)
              FROM v$session b
             WHERE b.paddr = (SELECT addr
                                FROM v$process c
                               WHERE c.spid = '&pid'))
ORDER BY piece ASC
/
这里我们涉及了3个视图,并应用其关联进行数据获取.
首先需要输入一个pid,这个pid即process id,也就是在Top或ps中我们看到的PID.
通过pid和v$process.spid相关联我们可以获得Process的相关信息
进而通过v$process.addr和v$session.paddr相关联,我们就可以获得和session相关的所有信息.
再结合v$sqltext,我们即可获得当前session正在执行的SQL语句.
通过v$process视图,我们得以把操作系统和数据库关联了起来.

《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号