oracle数据库有一张表无法操作,drop与truncatee和drop就报错,但是v$locked_objec里没有被锁记录

Oracle 常见问题解答_PHP教程_ThinkSAAS
Oracle 常见问题解答
Oracle 常见问题解答
以前搜集的一个Oracle比较常见问题的列表,忘记了是从哪来的关于 SELECT N 问题有感于一些网友多次咨询和讨论选取某些指定行数据的问题, 我写了下面这样的简单说明, 请大家指正.这里描述的 SELECT N 包括这样几种情况:1. 选取TOP N行记录2. 选取N1-N2行记录3. 选取FOOT N行记录当然需要考虑是否有ORDER BY子句的情况, 下面试以系统视图CAT为例分别说明.注: A. 为没有ORDER BY的情况B. 有ORDER BY的情况1. 选取 TOP N 行记录A. SELECT * FROM CAT WHERE ROWNUM&=NB. SELECT * FROM( SELECT * FROM CAT ORDER BY TABLE_TYPE )WHERE ROWNUM&=N2. 选取N1-N2行记录A. SELECT TABLE_NAME,TABLE_TYPE FROM( SELECT ROWNUM ROWSEQ,TABLE_NAME,TABLE_TYPE FROM CAT )WHERE ROWSEQ BETWEEN N1 AND N2;或:SELECT * FROM CAT WHERE ROWNUM&=N2MINUSSELECT * FROM CAT WHERE ROWNUM&N1B. SELECT TABLE_NAME,TABLE_TYPE FROM( SELECT ROWNUM ROWSEQ,X.* FROM (SELECT * FROM CAT ORDER BY TABLE_TYPE) X)WHERE ROWSEQ BETWEEN N1+1 AND N2;3. 选取FOOT N行记录这里是说明不知道记录集的记录个数的情况, 如果已知, 用上面2的方法即可A. SELECT TABLE_NAME,TABLE_TYPE FROM( SELECT ROWNUM ROWSEQ,TABLE_NAME,TABLE_TYPE FROM CAT )WHERE ROWSEQ & ( SELECT COUNT(*)-N FROM CAT )B. SELECT TABLE_NAME,TABLE_TYPE FROM( SELECT ROWNUM ROWSEQ,TABLE_NAME,TABLE_TYPE FROM CAT ORDER BY TABLE_TYPE)WHERE ROWSEQ & ( SELECT COUNT(*)-N FROM CAT )或SELECT * FROM ( SELECT TABLE_NAME,TABLE_TYPE FROM CAT ORDER BY TABLE_TYPE DESC) WHERE ROWNUM&=N以上在ORACLE8.1.5 for Windows2000pro 上测试通过-- end --oracle FAQ(1) from chao_ping 1.快速整理破碎的表(在Oracle8i里边才可以这样使用) ALTER TABLE table_name MOVE ( TABLESPACE XXX); 如何移动一张表所在的表空间 方法一: 1. Export 这张表 2. Drop这张表 3. Create tabl 4. Imp Ignore=y 还要注意的一点是,所有要读取这张表的PL/SQL储存过程都会失效。需要重新编译。 1. SELECT * FROM DBA_OBJECTS WHERE STATUS = 'INVALID'; 2. 对这些包,函数,过程重新编译。 方法二: 仅对Oracle8i适用。 使用下面的语句: ALTER TABLE table_name MOVE TABLESPACE new_ 这样的话,所有的约束、索引、触发器都不会受到影响。 但是需要rebuild这个标上的所有索引。 2.怎样直接进入sql*plus而不用输入用户名,密码: sqlplus / sqlplus _string 3.怎样快速重建索引: alter index xxx rebuild storage(); alte 4. 为什么我看不到dbms_output的结果? SET SERVEROUTPUT ON 5. 进行一次大的事务以后,已经COMMIT了,但为什么我的回滚段还是那样大? 因为没有设置OPTIMAL的值,所以不会自动收缩。 可以用alter rollback segment shrink to Xm;来手工进行收缩。 6. 为什么要使用VARCHAR2,而不用CHAR? A.CHAR只支持2000字节长,而VARCHAR2支持4000字节的长度,适用性更好 B. CHAR 占用更多的存储空间,定义多长,它就占用多长的空间,插入字符后面自动加空格填充;而VARCHAR2不论定义多长,都只使用实际插入的长度。 7. 为什么从不同的数据字典看,表/索引所占用的空间不一样? SQL& select blocks , empty_blocks from dba_tables where table_name='表名'; BLOCKS EMPTY_BLOCKS ---------- ------------
SQL& select bytes,blocks,extents from dba_segments where segment_name='表名'; BYTES BLOCKS EXTENTS ---------- - --------- ---------- 0 1 这是因为第一个数据库视图DBA_TABLES的BLOCKS列是指实际上使用的BLOCK数目,还有一些BLOCK虽然被占用了,但是没有数据存在,不计入里边。而在DBA_SEGMENTS这个数据库视图里边,BLOCKS列是指这个表总共占用的BLOCK的数目,包括有数据和没有数据的BLOCK总量。如果把第一个视图里边的BLOCKS和EMPTY_BLOCKS地总和加起来,正好等于第二个视图的BLOCKS列的大小。 8. 怎样把数据库的一张,多张表存为一个普通的文本文件? 可以在SQL*Plus里边用SPOOL命令把选出来的数据保存在SPOOL指定的文件里边。 9. 怎样从一张表里删除重复的记录 SQL& SELECT * FROM EMP; EMP_ID OFFICE_ID EMPNAME 305 12 ELLISON, GEORGE 305 12 MERCURIO, JASON 128 17 SIMPSON, LINDA 305 22 JACKSON, DREW 使用下面的SQL语句来识别那些重复的记录: SQL& SELECT COUNT(*), EMP_ID, OFFICE_ID FROM EMP GROUP BY EMP_ID, OFFICE_ID HAVING COUNT(*) & 1; 结果如下: COUNT(*) EMP_ID OFFICE_ID 2 305 12 Table Example, with duplicate values: SQL& SELECT * FROM EMP; EMP_ID OFFICE_ID EMPNAME 305 12 ELLISON, GEORGE 305 12 MERCURIO, JASON 128 17 SIMPSON, LINDA 305 22 JACKSON, DREW 使用下面的语句来删除重复的记录: SQL& DELETE FROM EMP A WHERE (EMP_ID, OFFICE_ID, 2) IN (SELECT EMP_ID, OFFICE_ID, decode(count(*),1,1,2) FROM EMP B WHERE A.EMP_ID=B.EMP_ID AND A.OFFICE_ID = B.OFFICE_ID GROUP BY EMP_ID, OFFICE_ID); 10. 怎样在SQL*PLUS里想数据库插入特殊字符? 可以使用CHR函数。 11. 怎样删除一个列? 在Oracle8i里边,可以直接Drop一个列。语法为alter table table_name drop column_ 但是注意要在initsid.ora里边设定compatible=8.1.0以上。 12. 怎样重命名一个列? 1 alter table "table_name" add (new_column_name data_type); 2 update table_name set new_column_name = old_column_name where rowid= 3 alter table table_name drop column old_column_ 13. 怎样快速清空一张表? Truncate table table_ 14. 怎样为事务指定一个大的回滚段? Set transaction use rollback segment rbs_ 15. 怎样知道一张表上有那些权限赋予了哪些人,给他们了什么权限? select * from dba_tab_privs where table_name='表名'; 16. 怎么发现是谁锁住了你需要的一张表? Select object_id from v$locked_ Select object_name, object_type from dba_objects where object_id=''; 每次清空一张表的时候,(使用truncate),这张表的存储参数NEXT自动复位到最后被删除的那个extent的大小。同样,如果显式地从一张表里边释放空间,NEXT参数也会自动被设置成最后被释放的那个extent的大小。 在SQL*Plus里边可以为一个事务指定一个回滚段:这在有大的事务将要发生的话时候还是很有用的。使用下面的语句可以为这个事务指定一个回滚段: SQL&SET TRANSACTION USE ROLLABCK SEGMENT 回滚段名称; 还可以在PL/SQL里边为一个事务指定一个回滚段(不使用动态sql语句)。这个需要使用Oracle提供的包:DBMS_TRANSACTION.USE_ROLLBACK_SEGMENT(‘回滚段名称'); 在有些平台上的Oracle,在启动的时候会自动生成一个sgadefSID.dbf,用这个文件是否存在就可以判断一个实例是否在运行。这个文件包含了SGA在内存中的地址。在数据库关闭的时候,Oracle会自动删除这个文件。但是在Oracle8i里边,这个文件不再存在了。需要使用新的判断方式来断定究竟某个实例是否在运行。比如PS命令。 在Oracle7里边,想要知道数据文件是否可以自动扩展,必须从sys.filext$这张表里边查取,但是在Oracle8里边,从dba_data_files里边就可以知道数据文件是否可以自动扩展了。 从Oracle8i开始,可以创建另一类数据库一级的触发器,比如数据库启动、关闭,用户登录、注销等事务,都可以触发这个事件的发生,从而作某些记录。在数据库一级定义的触发器会在所有用户相应事件发生的时候触发,而在Schema一级定义的触发器只有在某个特定用户的相应事件发生的时候才会触发。 从Oracle8i开始,多了一种关闭数据库的方式:SHUTDOWN TRANSACTIONAL。这种方式允许所有的用户提交它们的工作。但是一旦提交之后就马上被切断联接,等所有用户都完成了各自的事务,shutdown就开始了。 从Oracle8开始,可以创建临时表,这些表的定义对于所有该用户的会话都是可以看到的,但是每个会话查询、插入、删除的数据和别的会话查询、插入、删除的数据都是不相关的。就像每个会话都分别有这样一份表一样。 从Oracle8i开始,对于那些没有进行分区的表,可以不用IMP/EXP就可以快速重组。但是这需要两倍于该表容量的表空间。这个语句就是: ALTER TABLE TB_NAME MOVE TABLESPACE TS_NAME; 在Oracle8i里边可以创建反序索引。(CREATE INDEX i ON t (a,b,c) REVERSE;)。由于反序索引的相邻键值不是存放在物理相邻的位置,因此只有全索引扫描或者通过单个列这一类语句才能够有效利用这些索引。这类反序索引在Oracle并行服务器上能够较好地协调不同实例对数据库的修改,可以在一定程度上提高系统性能。 从Oracle8开始,$instance视图可以查获许多有用的信息:比如主机名称,实例名,启动时间,版本号等。 临时表空间里边创建的临时段只有在shutdown地时候才会被释放。 但是在permanent表空间里边创建的临时段在一个事务结束之后就会被释放,有Smon进程来完成这个任务。oracle FAQ(2) from chao_ping 关于OPTIMAL参数 optimal是用于限制回滚段大小的一个存储参数。在执行一个长的事务之后,那个事务所使用的回滚段会比较大,而设置了Optimal这个参数以后,一旦事务提交结束,回滚段自动收缩到Optimal所指定的大小。 如果你的系统中有许多长时间运行的事务的话,那么应该把回滚段的Optimal参数设置的比较大一点。这样有利于保持回滚段表空间的连续性。否则不断的扩张、收缩会使表空间更加破碎。 如果系统中主要的事务都是短时间的,那么应该把回滚段设置的比较小一些,这样有利于让回滚段里面的信息可以存储在SGA里边,以利于提高系统性能。 回滚段的Optimal参数可以在创建回滚段的时候指定,也可以用 ALTER ROLLBACK SEGMENT SEGMENT_NAME OPTIMAL XX M;这样来重新设定。 Oracle8i 里边的 ALTER SESSION SET CURRENT_SCHEMA= 可以用来更改当前的用户模式。 Oracle公司已经宣称,不再支持server manager,这个工具自从Oracle 6.0开始,就一直是管理Oracle数据库的主要工具。现在,SQL*Plus替代了Server Manager的地位,因此,Server Manager中相应的功能也都集成到了SQL*Plus之中。 SQL*Plus新增加的主要命令是startup, shutdown, archive log,和recover。当然,标准的SQL语法仍然是支持的了,比如一系列的CREATE, ALTER等语句。但是也对其中的一些有了一些改变,比如原来不支持的ALTER DATABASE OPEN,ALTER DATABASE MOUNT,ALTER DATABASE BACKUP 等句子。 对于SET命令,也多了一些新的选项,用来包含一些如自动恢复等。SHOW命令也开始可以用来直接显示参数SHOW PARAMETER ,SHOW SGA等。而这些,原来都只是在Server Manager里面才有的功能。 Oracle8i仍旧保留了尽人皆知的INTERNAL账户,但是要记住,这主要是为了向后兼容。INTERNAL账户的功能现在开始有SYSDBA,SYSOPER这两个角色来支持了。INTERNAL/SYS的口令可以用下面这个方法来进行修改: O/S Prompt& orapwd password=&some password& 当数据库刚刚创建的时候,SYS的密码默认为change_on_install,而SYSTEM的密码是manager,而INTERNAL则根本就没有密码。因此,创建完数据库之后,第一件要做的事情就是改变以上三个用户的口令。INTERNAL的口令可以用前面提到过的方法来改变,而SYSTEM,SYS则可以直接用ALTER USER username IDENTIFIED BY password;来更改。注意,在Oracle8i开始,ALTER USER SYS IDENTIFIED BY password;同时也会更改INTERNAL的密码,如果你为INTERNAL设置了密码的话,同时,马上把SYSDBA,SYSOPER这两个角色授予负责管理这个数据库的用户。对于那些使用INTERNAL来连接数据库的脚本,也要相应的作一些修改。 启动和关闭数据库: 要从SQL*Plus里边启动数据库,请按照以下的步骤进行: O/S Prompt&sqlplus /nolog SQL& connect scott/tiger as SYSDBA SQL& startup 如果希望用不同于默认得参数来启动数据库,可以使用下面代参数的启动命令: SQL& startup PFILE=&init.ora file to be used& 有时候需要启动数据库,但是不让普通用户进入,比如为了平衡IO,需要移动一个数据文件的位置,这时候就需要改变默认得启动选项: SQL& startup mount 当完成了维护任务之后,可以选择关闭数据库然后再重新按照正常方式打开,或者直接在SQL*Plus里边输入下面的命令,Oracle就可以开始正常运行了: SQL& alter database open 有时候需要创建一个新的数据库,或者需要重建控制文件,就需要用下面的语句: SQL& startup nomount 有时候,数据库难以正常启动,就可以考虑使用下面的办法来强迫启动:使用FORCE选项,STARTUP FORCE实际上相当于一个SHUTDOWN ABORT然后再STARTUP这样一个过程。 SQL& startup force SHUTDOWN这个命令也有好几种参数可以选择: 正常关闭是等待所有用户都从系统退出以后,再正常关闭系统。这是一种最最理想的关闭数据库的方式。一般都应该使用这种方式来正常关闭数据库。 SQL& shutdown 在Oracle8i开始,新加了一个关闭选项:SHUTDOWN TRANSACTIONAL。这允许所有用户都完成它们的事务,一旦事务提交,马上被断开连接。这样既保证了用户不会丢失它们的事务,也保证了数据库可以及时关闭,进行必要的维护操作。这种方式关闭的话,下次系统启动之后,也不用进行实例一级的恢复。比下面提到的另外两种方式都要理想。 SQL& shutdown transactional SHUTDOWN IMMEDIATE是马上中止用户的当前事务,并不等这些事务完成,回滚这些用户的当前事务。但是如果有一些事务很久没有提交的话,那么SHUTDOWN IMMEDIATE或许就不像说得那样IMMEDIATE了。可能也要花很多时间来回滚这些事务。 SQL& shutdown immediate 在Oracle8i里边最后一种关闭方式是SHUTDOWN ABORT。这种关闭方式和直接关闭计算机的电源其实没有太多的区别。任何当前连接的用户都被马上断开联接,在下次实例再次启动的时候,必须进行实例一级的恢复,用以回滚没有提交的事务。 SQL& shutdown abort ALTER TABLE table_name MOVE之后,表上的索引标志为UNUSABLE? 在Oracle8i开始,可以直接使用alter table table_name move [tablespace tablespace_name]; 来为一张表移动到另一个表空间,或者重新组织表的存储方式,以减少碎片。但是,这样使用过之后,所有这张表上的索引都将被标志为unusable。这是因为MOVE一张表之后,表中列对应的物理位置都改变了,就是所有行的ROWID都变化了,而这张表的索引就用到了其中行的ROWID。由于Oracle不会自动更新索引对应的ROWID,这时候,索引上的ROWID就指向了错误的地方。因此,索引被标志为UNUSABLE。这时候,你就需要手工重建索引。可以使用下面的语法来重建索引: ALTER INDEX index_name REBUILD;当然,还可以为索引指定特定的合适的存储参数,来优化索引的存储。或许Oracle之所以没有自动维护索引,就是为了让你可以为索引指定合适的存储参数。 如何远程安装Oracle: 如果需要从PC机上的X-window客户端安装Unix上的Oracle系统,要注意下面这一点:Oracle8i使用的是Universal Installer,使用了Java技术,必须在图形界面下安装。如果是远程安装,必须设置一下什么地方来显示Universal Installer的图形界面:使用 $DISPLAY=workstation_name:0.0 $export DISPLAY 举一个例子,你的PC机的IP地址是150.150.4.128,机器名字叫做test,那么就可以使用下面的语法来进行为安装作准备工作: $DSIPLAY=150.150.4.128:0.0 $export DISPLAY 或者使用下面的语法,但是必须这个test机器的信息写在hosts文件里边: DSIPLAY=test:0.0 $export DISPLAY
PHP开发框架
开发工具/编程工具
服务器环境
ThinkSAAS商业授权:
ThinkSAAS为用户提供有偿个性定制开发服务
ThinkSAAS将为商业授权用户提供二次开发指导和技术支持
让ThinkSAAS更好,把建议拿来。
开发客服微信DevilRex119 的BLOG
用户名:DevilRex119
文章数:876
评论数:24
访问量:80329
注册日期:
阅读量:5863
阅读量:12276
阅读量:352326
阅读量:1050419
51CTO推荐博文
方式含义startup & & &启动实例、装载数据库、打开数据库startup nomount & & & &启动实例,不加载数据库startup mount & 启动实例,加载数据库但不打开数据库startup restrict & 启动过程中限制访问数据库startup force & & 迫使数据库启动startup pfile=/oracle/app/oracle/product/10g/dbs/initminos.ora & & & & 使用非缺省参数文件启动数据库,以特定文件中指定参数启动数据库,本例为”/oracle/app/oracle/product/10g/dbs/initminos.ora注:启动前需要先使用sqlplus登录到数据库中 $ sqlplus sys/oracle as sysdbaSQL*Plus: Release10.2.0.4.0 - Production on Mon May 28 03:39:35 2012Copyright (c) ,Oracle. &All Rights Reserved.Connected to an idleinstance.SQL& startupORACLE instance started.Total System Global Area bytesFixed Size & & & & & & & & &2097760 bytesVariable Size & & & & & & bytesDatabase Buffers & & & &
bytesRedo Buffers & & & & & & &
bytesDatabase mounted.Database opened.SQL&方式含义shutdown normal不允许新的连接;等待当前的连接释放shutdown immediately不允许新的连接;当前的事务回滚;不等待当前的连接释放shutdown abort不允许新的连接;立即中止当前事务中的SQL当前事务不回滚;下次启动时有实例的恢复过程shutdown transactional不允许新的连接;等待当前事务完成;事务完成后断开当前的连接$ sqlplus sys/oracle assysdbaSQL*Plus: Release10.2.0.4.0 - Production on Mon May 28 03:39:35 2012Copyright (c) ,Oracle. &All Rights Reserved.Connected SQL& shutdown immediateDatabase closed.Database dismounted.ORACLE instance shut down.SQL&a)sqlplus &/ as sysdba&这是典型的操作系统认证,不需要listener进程,数据库即使不可用也可以登录b)sqlplus username/password 不需要listener进程,登录本机数据库,数据库实例启动即可c)sqlplususername/password@tnsname需要listener进程,最常见的远程登录模式,需要启动数据库实例和listener进程在多实例环境中,a)和b ) 两种连接方式默认连接的实例为当前环境变量中SID值定义的实例,如果需要连接另外的实例,请更改环境变量中SID值后进行连接$ env | grep SID & ORACLE_SID=minos$ export ORACLE_SID=rct$ env | grep SID ORACLE_SID=rct2环境变量文件在aix系统中,环境变量文件一般存放在/etc/profile ,/etc/environment, $HOME/.profile 这三个文件中三个环境变量的定义如下: /etc/environment -操作系统在登录时使用的第一个文件, / etc / environment文件中包含的变量指定的所有进程的基本环境。 /etc/profileC 操作系统在登录时使用的第二文件,这个文件中包含了所有登录用户指定的基本环境$HOME/.profile -操作系统在登录时最后使用的文件,这个文件中存在放在属主目录中,定义了当前登录用户的工作环境系统级的环境变量一般在/etc/environment 文件中定义,与数据库相关的环境变量就定义在/etc/profile 文件中,如下所示export ORACLE_BASE=/oracle/app/oracle export ORACLE_HOME=/oracle/app/oracle/product/10g/export ORACLE_SID=minos对于solaris系统而言,环境变量文件一般存放在/etc/profile , $HOME/.profile这两个文件中。故修改时只需修改/etc/profile 文件即可2/etc/oratab 文件/etc/oratab 文件描述目前系统中创建的数据库实例以及是否通过 dbstart 和 dbshut 来控制该实例的启动与关闭,如下所示:minos:/oracle/app/oracle/product/10g:Y其中minos 为实例 ID/oracle/app/oracle/product/10g为 ORACLE_HOME目录Y表示允许使用 dbstart和 dbshut 启动和关闭该实例数据库,如果设置为N 表示不通过 dbstart 和 dbshut 启动和关闭实例数据库2数据库实例初始化文件 initSID.ora每个数据库实例都有一个初始化参数文件,其缺省存放的路径为$ORACLE_BASE/dbs ,其名称为 initSID.ora如minos实例对应的参数文件为 initminos.ora,缺省存放路径为/oracle/app/oracle/product/10g/dbs/initminos.ora2tnsnames.ora文件此文件类似于unix 中的hosts文件,提供tnsname到主机名或者ip的对应。几个重要参数:PROTOCOL:客户端与服务器端通讯的协议,一般为TCP,该内容一般不用改。HOST:数据库侦听所在的机器的机器名或IP地址PORT:数据库侦听正在侦听的端口,系统缺省值为1521。SERVICE_NAME:数据库实例的服务名对于外场环境而言,tnsnames.ora文件一般存放在$ORACLE_HOME/network/admin/tnsnames.ora以下为一个完整的tnsnames.ora文件#tnsnames.ora NetworkConfiguration File: /oracle/app/oracle/product/10g/network/admin/tnsnames.ora# Generated by Oracleconfiguration tools.MINOS_10.63.208.116 = &(DESCRIPTION = & &(ADDRESS = (PROTOCOL = TCP)(HOST = minos1)(PORT = 1521)) & &(CONNECT_DATA = & & &(SERVER = DEDICATED) & & &(SERVICE_NAME = minos) & &) &)RCT_10.63.208.116 = &(DESCRIPTION = & &(ADDRESS = (PROTOCOL = TCP)(HOST = minos1)(PORT = 1521)) & &(CONNECT_DATA = & & &(SERVER = DEDICATED) & & &(SERVICE_NAME = rct) & &) &)RCT = &(DESCRIPTION = & &(ADDRESS = (PROTOCOL = TCP)(HOST = minos1)(PORT = 1521)) & &(CONNECT_DATA = & & &(SERVER = DEDICATED) & & &(SERVICE_NAME = rct) & &) &)MINOS = &(DESCRIPTION = & &(ADDRESS = (PROTOCOL = TCP)(HOST = minos1)(PORT = 1521)) & &(CONNECT_DATA = & & &(SERVER = DEDICATED) & & &(SERVICE_NAME = minos) & &) &)EXTPROC_CONNECTION_DATA = &(DESCRIPTION = & &(ADDRESS_LIST = & & &(ADDRESS = (PROTOCOL = TCP)(HOST =10.63.208.116)(PORT = 1521)) & &) & &(CONNECT_DATA = & & &(SERVICE_NAME = PLSExtProc) & &) &)2listener.ora文件listener作为监听器进程的配置文件,接受远程对数据库的接入申请并转交给oracle的服务器进程。几个重要参数:SID_NAME:数据库实例名ORACLE_HOME:数据库目录PROTOCOL: 客户端与服务器端通讯的协议,一般为TCP,该内容一般不用改。HOST: 数据库侦听所在的机器的机器名或IP地址PORT:数据库侦听正在侦听的端口,系统缺省值为1521。对于外场环境而言,listener.ora文件一般存放在$ORACLE_HOME/network/admin/ listener.ora以下为一个完整的listener.ora文件# listener.ora NetworkConfiguration File: /oracle/app/oracle/product/10g/network/admin/listener.ora# Generated by Oracleconfiguration tools.SID_LIST_LISTENER = &(SID_LIST = & &(SID_DESC = & & &(SID_NAME = PLSExtProc) & & &(ORACLE_HOME = /oracle/app/oracle/product/10g/) & & &(PROGRAM = extproc) & &) & &(SID_DESC = & & &(SID_NAME = minos) & & (ORACLE_HOME = /oracle/app/oracle/product/10g/) & &) & &(SID_DESC = & & &(SID_NAME = rct) & & &(ORACLE_HOME = /oracle/app/oracle/product/10g) & &) &)LISTENER = &(DESCRIPTION_LIST = & &(DESCRIPTION = & & &(ADDRESS = (PROTOCOL = TCP)(HOST = minos1)(PORT = 1521)) & &) &)以下操作语句执行前需要使用sqlplus或者PLSQL Developer客户端登录数据库进行操作。 &Sqlplus登录方式如下:650) this.width=650;" width="607px" height="161px" src="/e/u/themes/default/images/spacer.gif" word_img="file:///C:\Users\y\AppData\Local\Temp\msohtmlclip1\01\clip_image002.png" style="url( /e/u/lang/zh-cn/images/localimage.png) no-border:1px solid #ddd" /> PLSQL Developer登录方式如下:650) this.width=650;" width="398px" height="207px" src="/e/u/themes/default/images/spacer.gif" word_img="file:///C:\Users\y\AppData\Local\Temp\msohtmlclip1\01\clip_image003.png" style="url( /e/u/lang/zh-cn/images/localimage.png) no-border:1px solid #ddd" />650) this.width=650;" width="715px" height="348px" src="/e/u/themes/default/images/spacer.gif" word_img="file:///C:\Users\y\AppData\Local\Temp\msohtmlclip1\01\clip_image005.png" style="url( /e/u/lang/zh-cn/images/localimage.png) no-border:1px solid #ddd" />650) this.width=650;" width="607px" height="483px" src="/e/u/themes/default/images/spacer.gif" word_img="file:///C:\Users\y\AppData\Local\Temp\msohtmlclip1\01\clip_image007.png" style="url( /e/u/lang/zh-cn/images/localimage.png) no-border:1px solid #ddd" />SELECT sid,serial#,username,program,machine,statusFROM v$ & &650) this.width=650;" width="442px" height="162px" src="/e/u/themes/default/images/spacer.gif" word_img="file:///C:\Users\y\AppData\Local\Temp\msohtmlclip1\01\clip_image008.png" style="url( /e/u/lang/zh-cn/images/localimage.png) no-border:1px solid #ddd" />SELECT file_name,statusFROM dba_data_650) this.width=650;" width="439px" height="262px" src="/e/u/themes/default/images/spacer.gif" word_img="file:///C:\Users\y\AppData\Local\Temp\msohtmlclip1\01\clip_image009.png" style="url( /e/u/lang/zh-cn/images/localimage.png) no-border:1px solid #ddd" />Available 代表数据库文件均为可用状态io情况查询表空间读写情况SELECT name,phyrds,phywrtsFROM V$datafiledf,V$filestat fsWHERE df.file# =fs.file#;650) this.width=650;" width="473px" height="370px" src="/e/u/themes/default/images/spacer.gif" word_img="file:///C:\Users\y\AppData\Local\Temp\msohtmlclip1\01\clip_image010.png" style="url( /e/u/lang/zh-cn/images/localimage.png) no-border:1px solid #ddd" />其中PHYRDS代表已完成的物理读次数,PHYWRTS代表DBWR完成的物理写次数数据库的IO负载系统的瓶颈在于磁盘IO,所以一般可以通过操作系统的一些命令来确认一个系统是否是存在IO负载问题,比如iostat,sar 等650) this.width=650;" width="543px" height="368px" src="/e/u/themes/default/images/spacer.gif" word_img="file:///C:\Users\y\AppData\Local\Temp\msohtmlclip1\01\clip_image011.png" style="url( /e/u/lang/zh-cn/images/localimage.png) no-border:1px solid #ddd" />重点关注的几个指标就是idle值和iowait,但是idle值非常小(小于20%)或者iowait值非常大 (大于70%)时,说明IO出现问题。由于IO问题涉及操作系统,存储系统,cp负荷及应用系统等一些因素,故当发现问题请及时联系硬件厂家进行分析处理的繁忙程度SELECTretries.value/entries.value &Redo Log Buffer Retry Ratio&FROM V$sysstat retries,V$sysstat entriesWhere retries.name = &'redo buffer allocation retries'And entries.name = &'redo entries';650) this.width=650;" width="412px" height="133px" src="/e/u/themes/default/images/spacer.gif" word_img="file:///C:\Users\y\AppData\Local\Temp\msohtmlclip1\01\clip_image012.png" style="url( /e/u/lang/zh-cn/images/localimage.png) no-border:1px solid #ddd" />redo buffer allocation retries事件越少越好,该语句查询结果应该接近0或少于1%,否则要增加redo bufferSelect.username,s.program,s.status,se.event,se.total_waits,se.total_timeouts,se.time_waited,se.average_waitfrom v$session s,v$session_event seWhere s.sid=se.sid & & &And se.event not like 'SQl*Net%' & & &And s.status = 'ACTIVE' & & &And s.650) this.width=650;" width="383px" height="105px" src="/e/u/themes/default/images/spacer.gif" word_img="file:///C:\Users\y\AppData\Local\Temp\msohtmlclip1\01\clip_image013.png" style="url( /e/u/lang/zh-cn/images/localimage.png) no-border:1px solid #ddd" />select * from
(select event &waitevent&,time_waited &time waited&,
round(time_waited /(selectsum(time_waited)
from v$system_event),4) &%timewaited&,
total_waits &waits&,
round(total_waits /(selectsum(total_waits)
from v$system_event),4)&%waited&
from v$system_event &where wait_class!='Idle' order by 2 desc)
where rownum &=30;650) this.width=650;" width="461px" height="222px" src="/e/u/themes/default/images/spacer.gif" word_img="file:///C:\Users\y\AppData\Local\Temp\msohtmlclip1\01\clip_image014.png" style="url( /e/u/lang/zh-cn/images/localimage.png) no-border:1px solid #ddd" />值%waited代表等待数据比,此值越小越好,此值越高代表等待事物数多,需要检查cp和ioundo表空间的使用情况现场很多情况下undo有可能使用率到100%,这个和系统配置和事务大小,以及系统繁忙程度有关系。Undo是否真正满了要怎么看,用sys用户登录sqlplus(前提,系统只有一个undotbs表空间)使用以下语句查看undo表空间情况$sqlplus &sys/oracle@minos as sysdbaSQL&select sum(bytes),status from dba_undo_ext650) this.width=650;" width="391px" height="122px" src="/e/u/themes/default/images/spacer.gif" word_img="file:///C:\Users\y\AppData\Local\Temp\msohtmlclip1\01\clip_image015.png" style="url( /e/u/lang/zh-cn/images/localimage.png) no-border:1px solid #ddd" />一般来说外场环境都是创建一个undotbs,如果有多个undotbs的情况,请使用以下语句查询SQL& select sum(bytes),status,tablespace_name from dba_undo_extents group by status,tablespace_650) this.width=650;" width="583px" height="130px" src="/e/u/themes/default/images/spacer.gif" word_img="file:///C:\Users\y\AppData\Local\Temp\msohtmlclip1\01\clip_image016.png" style="url( /e/u/lang/zh-cn/images/localimage.png) no-border:1px solid #ddd" />每个undo extent可以有三种状态:active:有活动事务在此extent上expired:已结束的事务,undo 信息超过undo_retention时间限制unexpired:已经结束的事务,undo 信息未达到undo_retention时间限制当一个事务开始它将会去寻找可用的undo block来存放undo信息,它将按照以下顺序请求undo space.先去搜索拥有非active extent的undo segment,如果没有发现,那么会去创建新的undosegment,如果空间不够不能创建,将返回错误。所以如果undo虽然表空间满,但是有很多非active的空间的话,应该不会出现事务失败的问题使用system用户登录数据库,执行下面的sql语句查询数据库服务器的字符集:SQL& select &userenv('language') AMERICAN_AMERICA.ZHS16GBK在客户端查询字符集$ echo $NLS_LANGAMERICAN_AMERICA.ZHS16GBK执行计划explain plan for select *select * fromtable(dbms_xplan.display)650) this.width=650;" width="563px" height="351px" src="/e/u/themes/default/images/spacer.gif" word_img="file:///C:\Users\y\AppData\Local\Temp\msohtmlclip1\01\clip_image017.png" style="url( /e/u/lang/zh-cn/images/localimage.png) no-border:1px solid #ddd" />oracle用户登录服务器,将所需要执行的脚本放到服务器上例如: 执行/home/omc 目录下的test.sql 脚本$cd &/home/omc$sqlplus /nologSQL&conn system/oracle@minos &SQL&@test.sql 数据文件先关闭数据库实例$sqlplus /nologSQL&conn / as sysdbaSQL&shutdown immediate启动数据库实例至mount状态进行offline 操作SQL&startup mountSQL&alter databasedatafile ‘/datafile/u01/UEP_CAF_FM05.dbf’ OFFLINE DROP;SQL&alter database open连接数据库sqlplus /nologSQL& conn sys/修改参数SQL& show parameter db_ NAME & & & & & & & & & & & & & & & &TYPE & & & &VALUE ------------------------------------ ----------- ------------------------------db_files & & & & & & & & & & & & & &integer & & 200 SQL& alter system set db_files=1000 scope= System altered. 修改后关闭数据库SQL& Database closed. Database dismounted. ORACLE instance shut down. 修改完成后启动数据库SQL& ORACLE instance started. Total System Global Area & bytes FixedSize & & & & & & & & 1218892 bytes VariableSize & & & & & &
bytes Database Buffers & & & &
bytes RedoBuffers & & & & & & & 2973696 bytes Database mounted. Database opened. SQL&show parameter db_ NAME & & & & & & & & & & & & & & & &TYPE & & & &VALUE ------------------------------------ ----------- ------------------------------db_files & & & & & & & & & & & & & &integer & & 1000 SQL& exit 至此db_files参数修改工作完成以sys用户登录数据库SQL& conn sys/oracle@minosas sysdba在一个表空间增加一个数据文件,文件路径和大小需要自己修改成适合的位置和大小。特别注意:路径和文件名的正确性,严格区分字母大小写SQL& ALTER TABLESPACE UEP_CAF_FMADD DATAFILE '/datafile/u01/UEP_CAF_FM01.DBF' SIZE 4096M REUSE AUTOEXTEND OFF;以sys用户登录数据库SQL& conn sys/oracle@minosas sysdba创建一个表空间SQL& CREATE TABLESPACE&TEST& LOGGING DATAFILE '/datafile/u01/TEST.dbf'SIZE 5M REUSE AUTOEXTEND ON NEXT &5MMAXSIZE &300M EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M SEGMENT SPACE MANAGEMENT &AUTO ;增加一个数据文件,文件路径和大小需要自己修改成适合的位置和大小特别注意:路径和文件名的正确性,严格区分字母大小写SQL& ALTER TABLESPACE&TEST& ADD DATAFILE '/datafile/u01/test1.dbf' &SIZE &5M REUSE AUTOEXTENDON NEXT &5MMAXSIZE &300M查询当前数据表空间文件位置并关闭数据库实例$ sqlplus /nologSQL& connectsys/oracle@minos as sysdbaSQL& select file_namefrom dba_data_Files order by file_SQL&SQL&移动数据库表空间文件的物理位置mv/datafile/u01/system01.dbf /datafile/u02/system01.dbf;mv/datafile/u01/undotbs01.dbf /datafile/u02/undotbs01.dbf;mv/datafile/u01/sysaux01.dbf /datafile/u02/sysaux01.dbf;mv/datafile/u01/users01.dbf /datafile/u02/users01.dbf;mv/datafile/u01/uep.dbf /datafile/u02/uep.dbf;mv/datafile/u01/MINOS_RNS_PM_ORI03.dbf /datafile/u02/MINOS_RNS_PM_ORI03.dbf;&提示1:system,undo,sysaus,user等系统表空间文件也可以作为数据文件进行迁移启动数据库至mount状态SQL& connect sys/oracleas sysdbaSQL&修改数据表空间文件在数据库中路径SQL& alter databaserename file '/datafile/u01/system01.dbf' to '/datafile/u02/system01.dbf';SQL& alter databaserename file '/datafile/u01/undotbs01.dbf' to '/datafile/u02/undotbs01.dbf';SQL& alter databaserename file '/datafile/u01/sysaux01.dbf' to '/datafile/u02/sysaux01.dbf';SQL& alter databaserename file '/datafile/u01/users01.dbf' to '/datafile/u02/users01.dbf';SQL& alter databaserename file '/datafile/u01/uep.dbf' to '/datafile/u02/uep.dbf';SQL& alter databaserename file '/datafile/u01/MINOS_RNS_PM_ORI03.dbf' to'/datafile/u02/MINOS_RNS_PM_ORI03.dbf';启动实例,如果实例正常打开无报错且使用语句查询表空间路径已修改则表示迁移成功SQL&SQL& select file_namefrom dba_data_Files order by file_SQL&SQL&日志迁移查询当前数据表空间文件位置并关闭数据库实例$ sqlplus /nologSQL& connectsys/oracle@minos as sysdbaSQL& select g.member,v.status from v$log v, v$logfile g where v.GROUP#=g.GROUP#;SQL& alter SQL&SQL&移动redo日志的物理位置mv /datafile/u01/redo01.log/datafile/u02/mv/datafile/u01/redo02.log &/datafile/u02/mv/datafile/u01/redo03.log &/datafile/u02/修改数据表空间文件在数据库中位置SQL& connect sys/oracleas sysdbaSQL&SQL& alter databaserename file '/datafile/u01/redo03.log' to '/datafile/u02/redo03.log';SQL& alter databaserename file '/datafile/u01/redo02.log' to '/datafile/u02/redo02.log';SQL& alter databaserename file '/datafile/u01/redo01.log' to '/datafile/u02/redo01.log';打开实例并切换日志SQL&SQL& alter 验证迁移结果SQL& select g.member,v.status from v$log v, v$logfile g where v.GROUP#=g.GROUP#;SQL&SQL&日志的大小确认redo文件名和路径$sqlplus /nologSQL&connsystem/oracle@minosSQL& select member fromv$MEMBER-----------------------------------------------------------------/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/REDO03.LOG/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/REDO01.LOG/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/REDO02.LOG添加新的日志文件组SQL& alter database addlogfile &group 4 '/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/REDO04.LOG'size 1024m;Database altered. SQL& alter database addlogfile &group 5 '/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/REDO05.LOG'size 1024m;Database altered. SQL& alter database addlogfile &group 6 '/ORACLE/PRODUCT/10.2.0/ORADATA/ORCL/REDO06.LOG'size 1024m;Database altered. 删除先前日志过小的日志组1、2、3SQL& alter databasedrop logfile group 1;Database altered. SQL& alter databasedrop logfile group 2;Database altered. SQL& alter databasedrop logfile group 3;Database altered. 删除日志组出现的错误,比如删除group 3时出现如下错误alter database droplogfile group 3*ERROR at line 1:ORA-01623: log 3 iscurrent log for instance minos (thread 1) - cannot dropORA-00312: online log 3thread 1: '/datafile/u01/minos/minos/redo03.log'对于这种情况,请执行切换日志命令,命令如下:SQL& alter
&System altered. 执行该命令后,可以用以下命令查看当前日志组状态。SQL& select * fromv$GROUP# & &THREAD# SEQUENCE# & & &BYTES & &MEMBERS ARC STATUS---------- -------------------- ---------- ---------- --- ----------------FIRST_CHANGE# FIRST_TIME------------- ------------ & & & & & 3 & & & & &1 & & & & 12
& & & & &1 NO INACTIVE & & -OCT-11 & & & & 4 & & & & &1 & & & & 12
& & & & &1 NO CURRENT & & -OCT-11 & & & & 5 & & & & &1 & & & & 11
& & & & &1 NO ACTIVE & & -OCT-11 & & & & 6 & & & & &1 & & & & 11
& & & & &1 NO ACTIVE & & -OCT-11使用日志查询命令查出的结果中,必定有一个日志组为CURRENT状态重复执行日志切换命令,可以使新增加的日志组状态由unused变为active如果删除日志时报错,报错的日志组会转入active状态,该状态不能删除,至少等待5分钟,当该日志组自动从active状态转为inactive后,该日志文件才能被删除。本步骤的删除、切换、查看日志命令可以反复执行,直到将group1,gourp2,gourp3日志都删除后,方可进入下一步。查询所有的日志的状态,确认redo日志大小和状态SQL& selectgroup#,bytes,members status from v$ & &GROUP# & & BYTES & & STATUS---------- -------------------- & & & & 4
& & & & &1 & & & & 5
& & & & &1 & & & & 6
& & & & &1查询当前临时表空间大小并关闭数据库实例$ sqlplus /nologSQL& connsys/oracle@minos as sysdbaSQL& select file_name,tablespace_name,bytes,maxbytes,autoextensiblefrom dba_temp_---需要先查看原有临时表空间大小是多少SQL& shutdown immediate启动实例至mount状态后drop掉旧的临时表空间SQL& connect sys/oracleas sysdbaSQL& startup mountSQL& alter databasetempfile '/datafile/u01/temp01.dbf' drop打开数据库实例,新建临时表空间SQL&SQL& ALTER TABLESPACETEMP ADD TEMPFILE ' /datafile/u01/temp.dbf' SIZE 3253MAUTOEXTEND ON NEXT 5120K MAXSIZE UNLIMITED; ---标红值为临时表空间的大小,建议设置成与旧临时表空间一样的大小SQL& selectfile_name,tablespace_name,bytes,maxbytes from dba_temp_SQL&SQL&登录数据库查询控制文件位置$sqlplus /nolog$conn sys/oracle@minos assysdbaSQL& select name fromv$NAME--------------------------------------------------------------------------------/datafile/u02/minos/control01.ctl/datafile/u02/minos/control02.ctl/datafile/u02/minos/control03.ctl修改数据库系统中控制文件路径SQL&alter system setcontrol_files='/datafile/u02/control01.ctl','/datafile/u02/control02.ctl','/datafile/u02/control03.ctl'scope= SQL&shutdown immediate 修改控制文件物理路径$cp &/datafile/u01/control* &/datafile/u02/ 连接数据库测试实例启动$sqlplus /nologSQL&conn sys/oracle assysdbaSQL&startup实例启动成功后,删除旧的控制文件$rm &/datafile/u01/control* undo表空间用SYS用户以SYSDBA身份登陆到数据库。$sqlplus /nologSQL&conn sys/oracle assysdba创建新的UNDO表空间SQL&CREATE UNDOTABLESPACE &UNDOTBS2& DATAFILE'/datafile/u02/minos/undotbs02.dbf' SIZE 16384M REUSE AUTOEXTEND &ON NEXT 5120K MAXSIZE &32767M切换UNDO表空间为新的UNDO表空间SQL&alter system set undo_tablespace=undotbs2scope=等待原UNDO表空间所有UNDO SEGMENT OFFLINE SQL&selectusn,xacts,status from v$看STATUS字段的值是否有PENDING OFFLINE值,如果有就等待一会再执行上面的语句观察,知道没有,再执行下一步操作删除原UNDO表空间SQL&drop tablespaceundotbs1 including co2按用户导出,导入$expuep4x/U_tywg_2008@minos file=/export/home/test.dmp &log=/tmp/exp_test.log$impuep4x/U_tywg_2008@minos &full=y &file=/export/home/test.dmp &log=/tmp/exp_test.log2多个用户导出,导入exp system/oracle@minos owner=(uep4x,caffm4x)file=/export/home/test.dmplog=/tmp/exp_test.logimp system/oracle@minos full=y &file=/export/home/test.dmp &full=y &log=/tmp/exp_test.log2按表导出,导入exp minos_pm/u_tywg_2008parfile=test.dat其中PARFILE代表传递给导出的参数文件的名字,这个文件将包含所有参数的入口项。file=/oracle/pmoneday.dmp & ----定义导出数据的路径及名称tables=(A_TD_TDCCRM,\A_TD_TDCBHORNC,\A_TD_TDCHHORNC,\A_TD_TDIRATHO,\A_TD_TDRABASN) & & & & & & &----定义需要导出的表rows=y & & & & & & & & & & &----定义是否导出行statistics=none & & & & & & ---- 定义是否分析对象query=& where collecttime&to_date('0:00:46','YYYY-MM-DD HH24:MI:SS') and collecttime&to_date('0:00:46','YYYY-MM-DD HH24:MI:SS') & ----定义导出表的查询条件Imp minos_pm/u_tywg_2008 ignore=yrow=y file=/oracle/pmoneday.dmp log=/tmp/imp.log在10g之前,传统的导出和导入分别使用EXP工具和IMP工具,从10g开始,不仅保留了原有的EXP和IMP工具,还提供了数据泵导出导入工具EXPDP和IMPDP。使用EXPDP和IMPDP时应该注意的事项:EXP和IMP是客户段工具程序,它们既可以在客户端使用,也可以在服务器段使用。EXPDP和IMPDP是服务端的工具程序,他们只能在ORACLE服务端使用,不能在客户端使用。IMP只适用于EXP导出文件,不适用于EXPDP导出文件;IMPDP只适用于EXPDP导出文件,而不适用于EXP导出文件。数据泵工具导出导入的步骤:1、创建DIRECTORY$sqlplus &sys/oracle@minos as sysdbaSQL&create directorydir_dp as '/datafile/u01/backup/'; 2、授权并查看目录及权限SQL&Grant read,write ondirectory dir_dp to minos_SQL&SELECT privilege,directory_name, DIRECTORY_PATH FROM user_tab_privs t, all_directories d WHERE t.table_name(+) = d.directory_name ORDER BY 2, 1;3、执行导出导入expdp minos_pm/u_tywg_2008schemas=minos_pm directory=dir_dp dumpfile=expdp_test.dmplogfile=expdp_test1. & & impdp minos_pm/u_tywg_2008 schemas=minos_pm &dumpfile=expdp_test.dmp logfile=expdp_test.logdirectory=dir_dp job_name=my_job增量备份步骤9i起, exp的增量备份功能已经被废弃,exp的增量备份是8i的功能,从9i起就转向rman。如果是联机热备份,也就是说数据库打开的情况下用rman备份,需要数据库启动归档模式。增量备份rman下有几个级别,level 0应该是增量起点,以后的增量备份应该使用level 1来进行。增量备份的level 0备份和整库全备份效果是一样的,唯一不同的是整库备份不能用于增量的备份恢复。增量备份后面的一级差异或者累计备份,理论上都是备份前一次增量备份后变化的内容。如果变化比较多的话,文件会大一点,如果变化不多,文件就会很小。备份文件的如果要指定路径名称,可以使用通配符比如%U这样文件就不会重名了,如:format 'C:\BACKUP\%U',简单点可以不指定,会有缺省路径和名称。以联机热备份为例,数据库版本为oracle10g,操作步骤举例如下:打开数据库归档模式shutdown normal或shutdown immediate关闭数据库$sqlplus sys/oracle@minosas sysdbaSQL&启动数据库到mount状态SQL&启用或停止归档模式, 如果要启用归档模式,此处使用alter database archivelog 命令。SQL& alte & & & & & &Database altered.打开数据库SQL& & & & & & &Database altered.察看归档模式是否打开SQL&Database log mode & & & & & & Archive Mode---已打开Automatic archival & & & & & & Enabled―自动归档Archive destination & & & & & &/opt/oracle/oradata/conner/archiveOldest online logsequence & & &148Next log sequence toarchive & &151Current log sequence & & & & &151如果需要停止归档模式,此处使用alter database noarchivelog 命令关闭数据库SQL& 启动数据库到mount状态SQL&关闭归档模式SQL& alter
& & & & & &Database altered.打开数据库SQL& & & & & & &Database altered.察看归档模式是否关闭SQL& & & & & & &Database log mode & & & & & & &No Archive Mode & & & & & &Automatic archival & & & & & & Enabled & & & & & &Archive destination & & & & & &/opt/oracle/oradata/conner/archive & & & & & &Oldest online log sequence & & 149 & & & & & &Current log sequence & & & & & 152Oracle10g之前,你还需要修改初始化参数使数据库处于自动归档模式。在pfile/spfile中设置如下参数:log_archive_start = true重启数据库此参数生效,此时数据库处于自动归档模式。也可以在数据库启动过程中,手工执行:archive log start使数据库启用自动归档,但是重启后数据库仍然处于手工归档模式。从Oracle10g开始,log_archive_start参数已经废除$rmanrman&connect targetsys/oracle@minos开始做一次增量的0级备份rman&BACKUP INCREMENTALLEVEL 0 DATABASE;sqlplus中进行一些操作比如:创建一张表,插入一条记录然后做一次增量的1级差异备份rman&BACKUP INCREMENTALLEVEL 1 DATABASE;sqlplus中再进行一些其它操作,比如:再插入一条记录。下面可以依次类推,做一些操作然后作增量的1级差异备份。作数据库的恢复操作关闭数据库,启动到mount模式rman&rman&恢复数据库,应用上面的增量备份rman&不完全恢复到某个时间点rman&recover databaseuntil time ' 16:56:43'; &(rman&list backup 可以看到所有备份操作的信息,从中可以查到比如:第二次增量备份的时间点,这样可以作一个不完全恢复到某个时间点,当然也可以完全恢复recover database)打开数据库同时切换日志,如果是完全恢复就不用切换日志,直接打开数据库即可(alter databaseopen)。rman&alter daoracle用户登录服务器执行如下命令:$sqlplus /nologSQL&connminos_pm/u_tywg_2008@minos & & & & SQL&select tname fromtab;查看是否可以正常返回所有表名如果以上2条命令执行有异常,则说明oracle存在问题。数据库日志位置:$ORACLE_BASE/admin/sid_name/bdump/alert_sid.log服务器日志:server-XXXXXX.log无法启动手动启动oracle:$sqlplus /nologSQL&conn sys/SQL&startup如果执行完以上3步报错的话,需要执行以下步骤尝试恢复:$sqlplus /nologSQL&conn sys/SQL&startup mount;SQL&recover database;SQL&alter database open;如果依旧不行需要查看数据库日志确认具体原因常见几种可能情况:2oracle磁盘没有挂载,启动提示:找不到control01.dbf这种情况,需要检查提示的路径下是否有该文件,检查系统硬盘或者磁阵mount是否正常2数据文件丢失,启动提示:找不到minos_rns_XXX.dbf需要检查这个文件是否在对应路径下,文件名与大小写是否一致,是否对这个文件进行过迁移。如果确实找不到这个文件了,只能重建表空间2报out of memory错误此类问题是系统的sga-max值设置太小导致。或者是oracle的sga设置太大了。可以按照如下操作: & & & 1)重新设置系统sga_max值:用如下命令修改/etc/system文件内容。# vi system修改Solaris系统参数,在文件/etc/system中添加:set noexec_user_stack=1再使用命令添加参数:# projadd -U oracle -G dba -p 1234 -c &oracleparameters& user.oracle # projmod -sK &project.max-shm-memory=(priv,18g,deny)& user.oracle # projmod -sK&project.max-shm-ids=(priv,100,deny)& user.oracle # projmod -sK&project.max-sem-ids=(priv,100,deny)& user.oracle # projmod -sK&process.max-sem-nsems=(priv,256,deny)& user.oracle &注意:根据服务器物理内存的不同# projmod -sK &project.max-shm-memory=(priv,18g,deny)& user.oracle参数的设置也需要做相应改动,按照以下列表物理内存参数设置16G9G32G18G64G36G修改完成后,保存退出,重启计算机使参数生效。#init 6 & & & 2)修改数据库配置bash-3.00$ iduid=101(oracle)gid=101(dba)$ sqlplus sys/oracle@minosas sysdbaSQL& shutdown immediateSQL& cre &SQL& exit$ cd $ORACLE_HOME/dbs/修改pfile文件,vi initminos.ora找到*.sga_target= & &由原来的大小修改为如下规划:安装模式1:SGA=安装模式2:SGA=安装模式3:SGA=安装模式4:SGA=安装模式5:SGA=$export ORACLE_SID=minos$sqlplus / as sysdbaSQL&creSQL&startuporacle系统参数在某些情况下,需要修改系统参数,如processes数,sga大小,pga大小,游标数等等。这些都可以在pfile中修改,步骤如下:bash-3.00$ iduid=101(oracle)gid=101(dba)$ sqlplus sys/oracle@minosas sysdbaSQL& shutdown immediateSQL& cre &SQL& exit$ cd &$ORACLE_HOME/dbs/找到对应的参数,修改后保存。$export ORACLE_SID=minos$sqlplus / as sysdbaSQL&creSQL&startup使用sqlplus登录数据库发现数据库,提示用户被锁定。需要使用conn sys/oracle@SID登录数据库。执行解锁语句(ALTER USER USER_NAME ACCOUNT UNLOCK;)
了这篇文章
类别:┆阅读(0)┆评论(0)

我要回帖

更多关于 delete drop truncate 的文章

 

随机推荐