分享一些非常有用的oracle脚本

时间:2018-11-15
本文章向大家介绍日常收集整理的oracle常用脚本,主要包括ORACLE 默认用户名密码、创建数据表空间、创建临时表空间、删除用户以及用户所有的对象、删除表空间、查看表空间使用情况、查看表空间是否具有自动扩展的能力、给表空间增加数据文件等等,需要的朋友可以参考一下

  ORACLE 默认用户名密码

sys/change_on_install         SYSDBA 或 SYSOPER          不能以 NORMAL 登录,可作为默认的系统管理员
system/manager                 SYSDBA 或 NORMAL            不能以 SYSOPER 登录,可作为默认的系统管理员
sysman/oem_temp                sysman                     为 oms 的用户名
scott/tiger                    NORMAL                     普通用户
aqadm /aqadm                   SYSDBA 或 NORMAL           高级队列管理员
Dbsnmp/dbsnmp                  SYSDBA 或 NORMAL           复制管理员

  创建数据表空间 

create tablespace zfmi 
logging 
datafile 'D:\oracle\oradata\zfmi\zfmi.dbf' 
size 100m 
autoextend on 
next 32m maxsize 2048m 
extent management local; 

  创建临时表空间 

create temporary tablespace zfmi_temp 
tempfile 'D:\oracle\oradata\zfmi\zfmi_temp.dbf' 
size 32m 
autoextend on 
next 32m maxsize 2048m 
extent management local;

  删除用户以及用户所有的对象 

drop user zfmi cascade; 

cascade参数是级联删除该用户所有对象,经常遇到如用户有对象而未加此参数则用户删不了的问题,所以习惯性的加此参数 

  删除表空间 

前提:删除表空间之前要确认该表空间没有被其他用户使用之后再做删除 
drop tablespace zfmi including contents and datafiles cascade onstraints; 

including contents 删除表空间中的内容,如果删除表空间之前表空间中有内容,而未加此参数,表空间删不掉,所以习惯性的加此参数 
including datafiles 删除表空间中的数据文件 
cascade constraints 同时删除tablespace中表的外键参照 

  查看表空间使用情况

SELECT UPPER(F.TABLESPACE_NAME) "表空间名",
       D.TOT_GROOTTE_MB "表空间大小(M)",
       D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空间(M)",
       TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.TOT_GROOTTE_MB * 100,
                     2),
               '990.99') "使用比",
       F.TOTAL_BYTES "空闲空间(M)",
       F.MAX_BYTES "最大块(M)"
  FROM (SELECT TABLESPACE_NAME,
               ROUND(SUM(BYTES) / (1024 * 1024), 2) TOTAL_BYTES,
               ROUND(MAX(BYTES) / (1024 * 1024), 2) MAX_BYTES
          FROM SYS.DBA_FREE_SPACE
         GROUP BY TABLESPACE_NAME) F,
       (SELECT DD.TABLESPACE_NAME,
               ROUND(SUM(DD.BYTES) / (1024 * 1024), 2) TOT_GROOTTE_MB
          FROM SYS.DBA_DATA_FILES DD
         GROUP BY DD.TABLESPACE_NAME) D
 WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME
 ORDER BY 4 DESC;

  查看表空间是否具有自动扩展的能力

SELECT T.TABLESPACE_NAME,
       D.FILE_NAME,
       D.AUTOEXTENSIBLE,
       D.BYTES,
       D.MAXBYTES,
       D.STATUS
  FROM DBA_TABLESPACES T, DBA_DATA_FILES D
 WHERE T.TABLESPACE_NAME = D.TABLESPACE_NAME
 ORDER BY TABLESPACE_NAME, FILE_NAME;

  给表空间增加数据文件

ALTER TABLESPACE app_data ADD DATAFILE    
'D:\ORACLE\PRODUCT\10.2.0\ORADATA\EDWTEST\APP03.DBF' SIZE 50M; 

  新增数据文件,并且允许数据文件自动增长

ALTER TABLESPACE app_data ADD DATAFILE  
'D:\ORACLE\PRODUCT\10.2.0\ORADATA\EDWTEST\APP04.DBF' SIZE 50M  
AUTOEXTEND ON NEXT 5M MAXSIZE 100M;  

  允许已存在的数据文件自动增长

ALTER DATABASE DATAFILE 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\EDWTEST\APP03.DBF'    
AUTOEXTEND ON NEXT 5M MAXSIZE 100M;

  手工改变已存在数据文件的大小

ALTER DATABASE DATAFILE 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\EDWTEST\APP02.DBF'    
RESIZE 100M;

  查询误删数据

create table rs_eregion_cust_equ_r_01 as 
SELECT * FROM rs_eregion_cust_equ_r AS OF TIMESTAMP to_timestamp('2013-09-26 09:40:00','yyyy-mm-dd hh24:mi:ss');

  Oracle表解锁

--查询被锁的表
SELECT  sn.username, m.SID,sn.SERIAL#, m.TYPE,
           DECODE (m.lmode,
                   0, 'None',
                   1, 'Null',
                   2, 'Row Share',
                   3, 'Row Excl.',
                   4, 'Share',
                   5, 'S/Row Excl.',
                   6, 'Exclusive',
                   lmode, LTRIM (TO_CHAR (lmode, '990'))
                  ) lmode,
           DECODE (m.request,
                   0, 'None',
                   1, 'Null',
                   2, 'Row Share',
                   3, 'Row Excl.',
                   4, 'Share',
                   5, 'S/Row Excl.',
                   6, 'Exclusive',
                   request, LTRIM (TO_CHAR (m.request, '990'))
                  ) request,
           m.id1, m.id2
      FROM v$session sn, v$lock m
     WHERE (sn.SID = m.SID AND m.request != 0)           --存在锁请求,即被阻塞
        OR (      sn.SID = m.SID                           --不存在锁请求,但是锁定的对象被其他会话请求锁定
            AND m.request = 0
            AND lmode != 4
            AND (id1, id2) IN (
                          SELECT s.id1, s.id2
                            FROM v$lock s
                           WHERE request != 0 AND s.id1 = m.id1
                                 AND s.id2 = m.id2)
           )
ORDER BY id1, id2, m.request;

--执行解锁
alter system kill session 'sid,SERIAL#'; 

  创建用户指定表空间

create user zfmi identified by zfmi 
default tablespace zfmi temporary tablespace zfmi_temp; 

  用户授权

grant DBA,connect,resource to zfmi;