dbms_stats and analyze
讨论一: 使用dbms_stats 还是analyze 自从Oracle8.1.5引入dbms_stats包, Oracle及专家们就推荐使用dbms_stats取代analyze。 理由如下: 1. dbms_stats可以并行分析 2. dbms_stats有自动分析的功能(alter table monitor ) 3. analyze 分析统计信息的有些时候不准确 第1,2比较好理解,且第2点实际上在VLDB(Very Large Database)中是最吸引人的;3以前比较模糊,看了metalink236935.1 解释,analyze在分析Partition表的时候,有时候会计算出不准确的Global statistics 。 原因是dbms_stats会实在的去分析表全局统计信息(当指定参数);而a
alter system flush shared_pool
使用Flush Shared Pool缓解共享池问题Oracle, 深入解析Oracle, 读书笔记 十二月 3rd, 2009 原创文章,转载请注明: 转载自dbtan 谈DB本文链接地址: http://www.dbtan.com/2009/12/uses-flush-shared-pool-to-alleviate-the-sharing-pond-question.html使用Flush Shared Pool缓解共享池问题: 前面提到,本质上ORA-04031多数是由于SQL编写不当引起,所以如果能够修改应用绑定变量是最好的解决之道。当然如果应用不能修改,或者不能强制变量绑定,那么Oracle还提供一种应急处理方法,强制刷新共享池。alter system flush shared_pool;刷新共
lock and kill
通过v$locked_object视图可以初步判断可疑锁定。或者用dba_outstanding_alterts视图(这个好像10g才有)select object_name,object_type,reason,instance_name from dba_outstanding_alerts;select sid,serial#,sql_id from v$session where sid=853 and serial#=33740;sid serial# sql_id-------------------------------查看是什么SQL语句引发的:sql> select * from v$sql where sql_id='...';让后在KILLsql>alter system kill session 'sid,#serial'; 这里输入要kill的sid,#serial号码;[@more@]
table or view not exits
在执行drop user AAA;删除用户时,出现错误:ORA-00604:递归SQL层1出现错误ORA-00942:表或视图不存在解决办法:第一步,设置sql_trace=true,以便在运行sql语句后在D:oracleadminORADB00udump下生成跟踪文件。alter session sql_trace=true;第二步,运行drop user AAA;出错后,查看最新的跟踪文件,可以看到最后几行中显示在执行delete from system.AQ$_INTERNET_AGENT_PRIVS where ....时出现的ORA-00942:表或视图不存在这个错误。执行desc system.AQ$_INTERNET_AGENT_PRIVS也显示表不存在说明表AQ$_INTERNET_AGENT_PRIVS不存在,只
shrink使用分析
从10g开始,oracle开始提供Shrink的命令,假如我们的表空间中支持自动段空间管理 (ASSM),就可以使用这个特性缩小段,即降低HWM。这里需要强调一点,10g的这个新特性,仅对ASSM表空间有效,否则会报 ORA-10635: Invalid segment or tablespace type。shrink space语句两个阶段都执行。 shrink space compact只执行第一个阶段。如果系统业务比较繁忙,可以先执行shrink space compact重组数据,然后在业务不忙的时候再执行shrink space降低HWM释放空闲数据块。 shrink必须开启行迁移功能。alter table table_name enable row movement ;注意:
utlrp.sql和catpatch.sql两个脚本的作用
$ sqlplus '/as sysdba' @$ORACLE_HOME/rdbms/admin/utlrp.sqlutlrp.sql脚本可以在数据库运行的状态下执行以编译、数据库中的invalid对象. oracle建议在对数据库进行迁移、升级、降级后都运行一遍utlrp.sql以编译无效对象。--打完patch后重建数据字典视图脚本catpatch.sql为了保证系统的的数据词典的完整性和有效性,最好的打patch后在migrate状态下运行catpatch.sqlsql> shutdown immediatesql> startup migratesql> @$ORACLE_HOME/rdbms/admin/catpatch.sqlsql> shutdown immediatesql> startup为加快速度,可临时调大这
pupbld.sql 错误解决
oracle9isqlplus /nologconn peng/peng@mispeng报错:SQL> conn peng/peng访问 PRODUCT_USER_PROFILE 时出错警告: 未加载产品用户概要文件信息!您需要将 PUPBLD.SQL 作为 SYSTEM 运行已连接。SQL> conn peng/peng@mispeng已连接。但是用pl/sql 用户peng登陆的时候,不会报错。解决办法:先找到pupbld.sql路径$ORACLE_HOME/sqlplus/admin/pupbld.sql@$ORACLE_HOME/sqlplus/admin/pupbld.sql[@more@]
statspack 安装总结
个人QQ:149196034 欢迎联系[oracle@DELL admin]$ pwd/oracle/product/database/rdbms/adminSQL> select instance_name,host_name,version,startup_time from v$instance;INSTANCE_NAME HOST_NAME VERSION STARTUP_TIME---------------- ---------------------------------------------------------------- ----------------- ------------mis DELL 9.2.0.6.0 2010-9-2 12:1:
ora_604错误解决
个人QQ 149196034 欢迎朋友加入SQL> create table t_604 as 2 select * from 3 (select object_type,to_char(avg(object_id),'999999.999') from dba_objects 4 group by object_type 5 order by 2 desc) 6 where rownum<10;create table t_604 asselect * from(select object_type,to_char(avg(object_id),'999999.999') from dba_objectsgroup by object_typeorder by 2 desc)where rownum<10ORA-00604: 递归 SQL 层 1 出现错误ORA-01401: 插入的值对于列过大 分析错误:oralce 将to_char(avg(object_id),'999999.
v$session and v$process and lock ,wait,kill 总述
个人qq 149196034v$session 真是个好动态性能视图,可以获得很多有用的信息! 确定要kill的用户:SID,SERIAL#,以及确定kill process v$session SADDR: session address SID: session identifier,常用于连接其它列。 SERIAL#: sid 会重用,但是同一个sid被重用时,serial#会增加,不会重复。 AUDSID: audit session id。可以通过audsid查询当前session的sid。select sid from v$session where audsid=userenv('sessionid'); PADDR: process address,关联v$process的addr字段,可以通过这个字段查处当前session对应操作系统的那个
rman——备份实际应用概述
个人联系方式:QQ149196034rman备份1:脚本解析:数据库0级全备份,包括控制文件备份,备份7天以内的归档日志,检查备份,删除过期备份;run{ allocate channel cha1 type disk; backup incremental level 0 format '/rmanbak/inc0_%d_%s_%p_%u_%T.bak' tag monday_inc0 database include current controlfile; sql "alter system archive log current"; backup format='/rmanbak/%d_%s.arc' archivelog from time='sysdate-7' until time='sysdate'; release channel cha1; }crosscheck
linux:oracle10g调整SGA
oracle10g调整SGAoracle10g调整10g很简单,oracle8i需要调整的参数就很多。10g需要调整的两个参数为:sga_max_sizesga_target1:查看数据库用的spfile,还是pfile;SQL> show parameter spfile;NAME TYPE VALUE------------------------------------ ----------- ------------------------------spfile string /oracle/product/10.2.0/dbs/spfilezxhs.oraVALUE存在,说明用的spfile;2:查看SGASQL> show parameter s
db_recovery_file_dest_size设置
个人QQ 149196034 希望技术朋友家人!今天一查看alert.log,发现归档日志很多,db_recovery_file_dest_size设置是初始值2G,used 100% DELETE EXPIRED commands. system command was used to delete files, then use RMAN CROSSCHECK and4. Delete unnecessary files using RMAN DELETE command. If an operating reflect the new space.3. Add disk space and increase db_recovery_file_dest_size parameter to BACKUP RECOVERY AREA command.2. Back up files to tertiary device such as tape using RMAN then consider chan
spfile和pfille 区分、修改、RMAN备份
1:pfile和spfile概念oracle 8I 参数文件用的是PFILE 需要手工修改参数文件 $ORACLE_BASE/admin/mis/scripts/init.oraORACLE 9I 参数文件用的是SPIFLE 动态修改 alter system set processes=500 scope=spfile;spfile 分为动态参数和静态参数 静态参数需要在参数文件中修改,重启后生效;动态参数可以动态调整,修改后立即生效。2:启动方式sql>startup pfile='/oracle/admin/mis/pfile/init.ora';oracle9i第一次启动用PFILE,以后全部用spfile spfile 必须由pfile创建sql>startup fpile='/oracle/admin/mis/pfil
FLASHBACK 闪回查询
create table peng_tt_sms_mt_em as select * from mover.tt_sms_mt_em;select count(*) from peng_tt_sms_mt_em t9506select count(*) from peng_tt_sms_mt_em twhere sms_mt_sn like '137%';858SQL> delete peng_tt_sms_mt_em 2 where sms_mt_sn like '137%';858 rows deletedSQL> commit;Commit completeSQL> select count(*) from peng_tt_sms_mt_em; COUNT(*)---------- 8648查找数据库SCN变化select name,first_change# fscn,next_change# nscn,first_time from v$archived_log......................../orac
sql_trace跟踪与分析
Sql-trace 跟踪与诊断 我的联系方式:qq 149196034使用sql_trace工具我遇到的一个问题是:在bs结构中,终端用户在select查询的时候,我看到的都是一个用户名,虽然SID,SERIAL#不同,但是我不知道如何确定是哪个用户产生的问题。希望有人能帮我!1:选择需要跟踪的用户2:模式分为:跟踪当前用户,跟踪别的用户3:停止trace跟踪3:产生trace文件,路径在udump/4:tkprof格式化trace文件5:分析trace文件,如何解析trace文件介绍6:解决sql问题 1select,开启当前用户跟踪方式1select sid,serial#,username from v$session where username i
rman catalog and nocatalog(转载)
nocatalog方式就是用control file作为catalog,每一次备份都要往控制文件里面写好多备份信息,控制文件里面会有越来越多的备份信息,即RMAN的备份信息写在本地控制文件里面。若为catalog则必须要首先要创建目录备份数据库,建立恢复目录,即数据库的备份信息写到恢复目录里面。当通过rman nocatalog方式备份Oracle数据库,Oracle使用controlfile存放RMAN的备份信息。因此,当使用Rman nocatalog方式备份数据库时,一定要记得备份controlfile。初始化参数control_file__record_keep_time设置备份信息保存时间,到规定时间就自动清除以前的备
flashback drop
flashback drop 不但闪回删除的表,而且恢复所有索引以及触发器和授权。但是外键不能恢复;oracle 10g实际上drop table的时候从数据库结构上说并没有删除表,而是rename table;首先:检查是否为ARCHIVE模式:select log_mode from v$database;SQL> drop table test2;Table droppedSQL> select * from test2;select * from test2ORA-00942: 表或视图不存在SQL> flashback table test2 to before drop;DoneSQL> select * from test2; ID---------- 1rename命令:alter table test2 rename to test3;[@more@]
保护ORACLE数据库的安全
保护ORACLE数据库的安全SQL> desc dba_usersName Type Nullable Default Comments --------------------------- -------------- -------- ------- --------------------------------------- USERNAME VARCHAR2(30) Name of the user USER_ID NUMBER ID number of the user PASSWORD VARCHAR2(30) Y Encrypted password ACCOUNT_STATUS VARCHAR2(32) LOCK_DATE DATE Y EXPIRY_DATE DATE Y DEFAULT_TABLESPACE VARCHAR2(30) Default tablespace for data TEMPORARY_TABLESPACE VARCHAR2(30) Default tablespace for temporary tables CRE
pl/sql 进行ORACLE编程
标识PL/SQL对象描述触发器与触发事件标识影响PL/SQL性能的配置选项1:标识PL/SQL对象:procedure:过程function:函数package:程序包package body:程序包主体trigger:触发器程序包由程序包规范和程序包主体组成。程序包规范发布了程序包中各种函数与过程的调用规范,程序包主体则体现了这些过程与函数。触发器是一种特殊的PL/SQL对象,这种对象不是被请求调用的pl/sql代码块,它们在发生触发事件时自动运行。2:触发事件:DML:insert,update,delete;DDL:CREATE,DROP,TRUNCATE ;会话登入与登出;数据库的启动与关闭;由于空间问题导致的