ORACLE-有时会用到的SQL

  日常维护或做数据分析时,会使用到的一些sql,有时想起,就记录下来了,整理出来一些,比较杂乱。偶尔看看,可以回顾回顾知识。

1.重做表分析

analyze table tablename compute statistics;

  对索引无效时可以尝试

2.查看索引创建速度(长任务)

SELECT SID,
       START_TIME,
       SYSDATE,
       OPNAME,
       TARGET_DESC,
       SOFAR,
       TOTALWORK,
       TRUNC(SOFAR / TOTALWORK * 100, 2) || '%' AS PERWORK,
       TIME_REMAINING / 60 NEEDTIME
  FROM V$SESSION_LONGOPS
 WHERE SOFAR != TOTALWORK
   AND TOTALWORK <> 0;

  一些执行用时很久(创建索引,大表更新,复杂查询等)的操作,可已通过上面SQL进行查询。

3.查看锁

SELECT B.OWNER, B.OBJECT_NAME, A.SESSION_ID, A.LOCKED_MODE
  FROM V$LOCKED_OBJECT A, DBA_OBJECTS B
 WHERE B.OBJECT_ID = A.OBJECT_ID;

4.缓存命中率

SELECT SUM(PINHITS) / SUM(PINS)
  FROM V$LIBRARYCACHE;

5.用户profile查看

SELECT USERNAME, PROFILE FROM DBA_USERS;

6.查看密码天数

SELECT *
  FROM DBA_PROFILES S
 WHERE S.PROFILE = 'DEFAULT'
   AND S.RESOURCE_NAME = 'PASSWORD_LIFE_TIME'

7.密码永不过期

ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;

8.索引失效和重建

alter index index_name unusable;

  对大表进行大量插入时,由于对索引的维护会耗费很多事件,可以临时禁用索引,在维护后,在重新新建索引来提高效率

alter index index_name rebuild tablespace tablespace_name

  重建索引

9.分析函数(开窗函数)

row_number() over(partition by ... order by ...)
rank() over(partition by ... order by ...)
dense_rank() over(partition by ... order by ...)
count() over(partition by ... order by ...)
max() over(partition by ... order by ...)
min() over(partition by ... order by ...)
sum() over(partition by ... order by ...)
avg() over(partition by ... order by ...)
first_value() over(partition by ... order by ...)
last_value() over(partition by ... order by ...)
lag() over(partition by ... order by ...)
lead() over(partition by ... order by ...)

10.修改字符集

shutdown immediate; 
startup mount 
ALTER SYSTEM ENABLE RESTRICTED SESSION; 
ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0; 
ALTER SYSTEM SET AQ_TM_PROCESSES=0; 
alter database open; 
ALTER DATABASE CHARACTER SET ZHS16GBK; 
shutdown immediate; 
startup
select userenv('language') from dual;  查看字符集
select * from nls_database_parameters 数据库字符集
select * from nls_instance_parameters 客户端字符集

11.数据泵

create public database link link_name connect to 帐号 identified by 密码
   using '(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME =orcl)
)
)'

  数据泵,可以用于跨数据库的访问(可以在不同的服务器间)

12.查看回滚

select * from v$transaction;

13.存储过程循环游标优化

CREATE OR REPLACE PROCEDURE PROC_AAA(V_a IN VARCHAR2) IS
cursor cur is
     SELECT * FROM A;
    TYPE TAB_ID IS TABLE OF CUR%ROWTYPE;

BEGIN
OPEN CUR;
    loop
      FETCH CUR BULK COLLECT
        INTO V_SAVE_INFO limit 500;

      FOR i IN REVERSE 1 .. V_SAVE_INFO.count LOOP
       BEGIN
            操作(V_SAVE_INFO(I).*****END;
       V_SUM:=V_SUM+1;
      END LOOP;
      commit;
      exit when CUR%notfound;
    END LOOP;
    CLOSE CUR;
END PROC_ AAA;

14.水位线

DELETE 表不会重置水位线,全表扫描时,会扫所有数据段
Append 会在水位线之上添加数据,会增加HWM
TRUNCATE 会重置HWM
Alter table tableName move 

15.存储过程动态SQL

EXECUTE IMMEDIATE V_EXEC_SQL;
EXECUTE IMMEDIATE V_EXEC_SQL INTO V_COUNT_ERROR;

  ‘’两个单引号代表字符中的一个单引号

16.查询DDL

SELECT DBMS_METADATA.GET_DDL(U.OBJECT_TYPE, u.object_name)
FROM USER_OBJECTS u
where U.OBJECT_TYPE IN ('TABLE','INDEX','PROCEDURE');

17.Exp/imp导出/导入

exp 帐号/密码@服务器地址:1521/实例 file=文件路径 statistics=none tables=(address…sys_sec_usergroup_user)

IMP 帐号/密码 FILE=文件路径 LOG=abc.LOG FULL=Y IGNORE=Y

猜你喜欢

转载自www.cnblogs.com/matf2020/p/12240184.html
今日推荐