Oralce小技巧2

1.      Dbv检查坏块

Dbv  file=users01.dbf  blocksize=8192

2.      动态sql写的时候注意

 sql_stat:='ALTER TABLE '||p_r.TABLE_NAME||' MODIFY CONSTRAINT '||p_r.CONSTRAINT_NAME||' DISABLE';

 execute immediate sql_stat;

 注意红色字后面和前面是有空格的不然连在一起是不行的。||和’之间不要有空格要不它的功能就会失效。

3.      把汉字转化成ascii在转会来

SQL> select unistr('\4E2D\56FD') from dual;

UNIS

中国

SQL> select asciistr('中国') from dual;


ASCIISTR('
---------
\4E2D\56FD
4.      查询和闪回表以前的数据
查询该表一分钟前的数据(delete /updae/insert操作后)
select * from  abc as of TIMESTAMP SYSDATE-1/1440;
insert into abc select * from  abc as of TIMESTAMP SYSDATE-1/1440;
在这种误删除数据的情况下,应该事先激活表的行移动特征,如:
ALTER TABLE emp ENABLE ROW MOVEMENT;
ALTER TABLE emp DISABLE ROW MOVEMENT;
FLASHBACK TABLE b to timestamp to_timestamp('2007-08-28 11:14:00','yyyy-mm-dd hh24:mi:ss'); //我试过,可以
   FLASHBACK TABLE cc
TO TIMESTAMP (SYSTIMESTAMP - INTERVAL '01' minute);
//我也史过可以,且这种好一点,闪回一分钟以前的数据。
闪回表:drop 操作后
SELECT object_name, original_name FROM user_recyclebin;
SHOW recyclebin
desc "BIN$LS3MyjLQRcXgQAB/AQA8Ow==$0"
 FLASHBACK TABLE tablename TO BEFORE DROP;
5.      注意,在存储过程中要涉及很多表,但表中的字段修改:如修改类型,大小等,都有可能使存储过程实效,所以要看看存储过程,重新编译一下。
6.      如果设置了默认值,那么以前的数据中有空的,则这个数据在update的时候是不变的,记住,这个是不报错的,直到了,才发现许多数据都丢失了。
7.    如何取得Oracle当前会话的编号(Session ID)?
SQL>SELECT SID FROM V$MYSTAT WHERE ROWNUM =1;
       SID
----------
     19949
Select * from V$MYSTAT;可以查出当前session的所有统计信息。
下面一个更简单, 但只能在Oracle 10g及以上版本中使用.
SQL> SELECTUSERENV('SID') FROM DUAL;淘宝女装夏装新款
USERENV('SID')
--------------
         1994
 下面这个方法我有时也用, 因为不想用最上面的SQL去写一个子查询, 发现在Oracle 9i上很正常, 但在Oracle 10g上常常返回两行, 因此不能再使用它了.
SQL> SELECT SID FROM V$SESSION WHERE AUDSID=USERENV('SESSIONID');
       SID
----------
     19949
8.   如何查出前台正在发出的sql语句
  select user_name,sql_text
     from v$open_cursor
     where sid in (select sid from (select sid,serial   from v$session
     where status='ACTIVE'))
9.     Oracle快照
   1 源库:Create snapshot log on b; //快速刷新时使用2011夏季短发发型
   2 目标库:Create database link snop_b  Connect to wang identified by wang using 'oe';
   3 目标库:Create snapshot sn_b as select * from b@snop_b;
     //会创建一个叫sn_b的表,里面的数据就是b中同步过来的数据。
   4 目标库:Alter snapshot sn_b refresh fast Start with sysdate+10/8640 next sysdate+1;
     //自动刷新,设定 oracle 自动在 10 钞 (10/24*60*60) 后进行第一次完全刷新,以后每隔 1 天完全刷新一次。 注意好象写成10/24*60*60不行,数据不进行同步,所以我写成10/8640就可以了,以后在试试。
       begin
       dbms_refresh.refresh('sn_b');
       end;  //手动刷新
      把fast改成complete就是完全刷新,快速刷新比完全刷新快,因为快速刷新将主数据库的数据经网络发送到快照的数据少,仅需传送主表中修改过的数据,而完全刷新要传送快照查询的全部结果。  //详见oracle zongjie

注意:快照表是可以更改的,但是更改后是不会在和源表同步的,除非你更改的哪个信息在源表中又更改过。
posted @ 2011-05-17 11:35  ctou45  阅读(158)  评论(0编辑  收藏  举报