首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > 其他数据库 >

Oracle系列之一 点滴累积

2012-07-03 
Oracle系列之一 点滴积累1、解锁用户如果用户被锁,用用户登陆的时候会提示:ORA-28000: the account is lock

Oracle系列之一 点滴积累

1、解锁用户

如果用户被锁,用用户登陆的时候会提示:

ORA-28000: the account is locked

解决:

sys/*** as sysdba 登陆后

alter user scott account unlock;

2、orcle自带工具

1)、%ORACLE_HOME%\rdbms\admin\utlxplan.sql 创建plan_table

2)、%ORACLE_HOME%\sqlplus\admin\plustrace.sql 创建plustrace角色

3)、%ORACLE_HOME%\rdbms\admin\spcreate.sql 安装statspack

3、收集执行计划: ??

exec dbms_stats.gather_table_stats(user,'gtt2');//用户某表的执行计划
exec dbms_stats.gather_schema_stats(user,gather_temp=>true);//用户所有表,包括临时表

?dbms_stats会自动提交事务的

4、创建临时表,oracle临时表是静态表

1)、会话级临时表,提交事务后数据仍然可见

create global temporary table gtt1(x number) on commit preserve rows;

2)、事务级临时表,提交事务后数据就被删除了。用此种方式创建的临时表,无法用dbms_stats收集执行计划

create global temporary table gtt2(x number) on commit delete rows;

5、v$statname系统里所有统计项信息,v$mystat当前会话统计信息,v$sesstat实例启动以来所有会话的统计信息,v$sysstat保存所有session的累计值

6、闪回flashback

1)、获取当前闪回号

SQL>variable scn number;
SQL>exec :scn := dbms_flashback.get_system_change_number;

2)、获取表闪回时段的数据

SQL>select * from t as of scn :scn;

3)、把表恢复到某个闪回时刻,从执行的sql看闪回命令会回滚当前会话未提交事务。另,如果表被删除了,此处就无法闪回了(?)。下边此处出错表明未启用移动行

SQL>flashback table t to scn :scn;
SQL> flashback table t to scn 80975242;flashback table t to scn 80975242                *第 1 行出现错误:ORA-08189: 因为未启用行移动功能, 不能闪回表
SQL>alter table t enable row movement;
7、设置当前事务级别,如何设置会话级的事务隔离level,如何查询当前事务隔离级别,如何查询当前会话级事务隔离级别?
SQL>set transaction isolation level serializable;

8、游标共享

SQL>alter session set cursor_sharing=force;

但是共享有副作用,同一条sql在cursor_sharing=force/exat是后产生了两条不同的执行计划,substr的参数化是不是有点多余呢?

SQL> select substr(dname,1,2) from dept;SUBS----ACRESAOPSQL> select sql_text from v$sql where sql_text like '%substr(dname%';SQL_TEXT----------------------------------------select substr(dname,1,2) from deptselect substr(dname,:"SYS_B_0",:"SYS_B_1") from dept

?9、从spfile创建pfile

SQL>create pfile='e:\pfile.txt' from spfile;

?10、修改spfile中参数的值

SQL> alter system set pga_aggregate_target = 256m comment='test' scope=both ;系统已更改。

?11、获取当前服务器进程id

SQL>select p.spid from v$session s left join v$process p on s.paddr = p.addr where s.audsid=userenv('sessionid');

12、延迟约束

SQL> create table t2(    x int constraint x_not_null not null deferrable,    y int constraint y_not_null not null,    z varchar2(30));
SQL> set constraint x_not_null deferred;
SQL> insert into t2 values(null,3,'x');已创建 1 行。SQL> commit;commit*第 1 行出现错误:ORA-02091: 事务处理已回退ORA-02290: 违反检查约束条件 (SCOTT.X_NOT_NULL)

? 13、当前会话使用的undo段大小

SQL>select b.value from v$statname a left join v$mystat b on a.statistic# = b.statistic# where a.name = 'redo size';

?14、获取当前时间和当前cpu时间

SQL>create or replace procedure get_cpu_time as     begin           dbms_output.put_line('cpu time: ' || dbms_utility.get_cpu_time);        dbms_output.put_line('time: ' || dbms_utility.get_time);    end;    /过程已创建。SQL>exec get_cpu_time;cpu time: 420time: 3512889PL/SQL 过程已成功完成。

? 15、获取最热块

?

select tch,file#,dbablk,case when obj = 4294967295then 'rbs/compat segment'else(select max('(' || object_type||')' || owner || '.' || object_name) || decode(count(*),1,'','maybe!')from dba_objectswhere data_object_id = x.obj)end whatfrom (select tch,file#,dbablk,obj from x$bhwhere state <> 0order by tch desc) xwhere rownum <= 5; 

?16、会话锁定关系

select (select username from v$session where sid = a.sid) blocker,a.sid,' is blocking ',(select username from v$session where sid = b.sid) blockee,b.sidfrom v$lock a,v$lock bwhere a.block = 1 and b.request > 0and a.id1 = b.id1and a.id2 = b.id2;

17、查看数据库是否强制写事务日志redo log

?

SQL> select force_logging from v$database;FORCE_------NO

18、查看数据库事务日志redo log模式

?

SQL> select log_mode from v$database;LOG_MODE------------------------NOARCHIVELOG

19、查看sql语句生成redo log的size之一:set autotrace on,会看到统计信息里有

20、查看sql语句生成redo log的size之二,通过此语句在sql执行前后获取,然后计算出来。

SQL> select ms.value from v$mystat ms left join v$statname sn on sn.statistic# = ms.statistic# where sn.name = 'redo size';     VALUE----------   1198620

21、查看当前事务使用的undo blocks数量:

SQL> select t.used_ublk from v$transaction t left join v$session s on s.taddr = t.addr where s.sid = (select sid from v$mystat where rownum = 1); USED_UBLK----------        18

22、...

1 楼 javaroad 2011-11-11   光棍节无聊,学习了。 2 楼 yueyemaitian 2011-11-11   javaroad 写道光棍节无聊,学习了。
别说的这么没出息好吧

热点排行