美文网首页我爱编程
ORACLE常用PL/SQL备忘#2

ORACLE常用PL/SQL备忘#2

作者: Bobby0322 | 来源:发表于2017-12-28 16:22 被阅读49次

    #1 ORACLE中查询被锁定的表,以及如何解锁

    -- ORACLE表被锁原因:EBS操作某一个FORM界面,
    -- 或者后台数据库操作某一个表时发现一直出于"假死"状态,可能是该表被某一用户锁定,导致其他用户无法继续操作;
    
    -- 查询被锁的表
    
    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;
    
    -- 查看是哪个SESSION引起的
    
     SELECT B.USERNAME,B.SID,B.SERIAL#,LOGON_TIME 
       FROM  V$LOCKED_OBJECT A,V$SESSION B 
       WHERE A.SESSION_ID = B.SID ORDER BY B.LOGON_TIME;
    
    --杀 掉对应进程即解锁
    
     ALTER SYSTEM KILL SESSION'866,20840'    -- 其中866是SID 20840是SERIAL#
    

    #2 ORA-01654:索引无法通过表空间扩展

    -- ORA-01654:索引无法通过表空间扩展
    
    -- 查看所有表空间的数据使用情况
    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 AND UPPER(F.TABLESPACE_NAME) = 'REFORMEREMS_DATA'
    ORDER  BY 1
    
    -- 有可能是索引表空间不够  
    SELECT SUM(BYTES/1024/1024) SIZEMB FROM DBA_FREE_SPACE Z
    
    -- 该索引的 NEXT_EXTENT 过大
    SELECT S.INDEX_NAME,
           S.TABLE_NAME,
           S.TABLESPACE_NAME,
           S.INITIAL_EXTENT,
           S.NEXT_EXTENT
      FROM USER_INDEXES S
      WHERE S.INDEX_NAME = 'IDX_SUBJECTIVE_TEST_NO'
      
    -- 重建该索引 
     ALTER INDEX IDX_SUBJECTIVE_TEST_NO REBUILD TABLESPACE REFORMEREMS_DATA STORAGE(INITIAL 256K NEXT 256K PCTINCREASE 0)  
    
    -- 通过计算 470.6875M的剩余空间,不能满足 NEXT_EXTENT 的1250MB空间  
    SELECT FILE_NAME,TABLESPACE_NAME,BYTES/1024/1024 FROM DBA_DATA_FILES WHERE TABLESPACE_NAME = 'REFORMEREMS_DATA'
    
    -- 通过如下SQL扩展表空间大小,ORA-01144:文件大小(6553600块)超出4194303块的最大数;
    -- 认表空间数据文件大小根据DATA BLOCKS的大小有关,默认最大为32GB,无法再进行扩展了,解决办法是增加表空间数据文件。
    
    ALTER DATABASE DATAFILE 'D:\ORACLEDATA\REFORMEREMS_DATA.DBF' RESIZE 51200M
    
    -- 通过如下SQL增加表空间数据文件,以下SQL语句为REFORMEREMS_DATA表空间创建了一个名称为REFORMEREMS_DATA02.DBF的数据文件,
    -- 该数据文件默认大小为10GB。
    
    ALTER TABLESPACE USERS ADD DATAFILE 'D:\ORACLEDATA\REFORMEREMS_DATA02.DBF' SIZE 10240M
    
    ALTER TABLESPACE "REFORMEREMS_DATA"
    ADD DATAFILE 'E:\ORACLEDATA\REFORMEREMS_DATA02.DBF' SIZE 10240M
    AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED;
    
    -- 此时,REFORMEREMS_DATA表空间有了两个数据文件。
    -- 再次执行表空间使用情况SQL语句,查看表空间使用情况。
    

    #3 tnsnames.ora

    XE =
      (DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = 220.165.9.54)(PORT = 1521))
        (CONNECT_DATA =
          (SERVER = DEDICATED)
          (SERVICE_NAME = XE)
        )
      )
    
    EXTPROC_CONNECTION_DATA =
      (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
        )
        (CONNECT_DATA =
          (SID = PLSExtProc)
          (PRESENTATION = RO)
        )
      )
    
    ORACLR_CONNECTION_DATA = 
      (DESCRIPTION = 
        (ADDRESS_LIST = 
          (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1)) 
        ) 
        (CONNECT_DATA = 
          (SID = CLRExtProc) 
          (PRESENTATION = RO) 
        ) 
      ) 
    
    
    ONLINE
    RANGE
    

    #4 Oracle Instant Client安装与配置

    1. 把下载的instantclient-basic-nt-11.2.0.2.0.zip压缩包解压,放到 C:\instantclient_11_2 目录下。
      在“环境变量”的“系统变量”中增加:
    ORACLE_HOME = C:\instantclient_11_2
    TNS_ADMIN = C:\instantclient_11_2
    NLS_LANG = SIMPLIFIED CHINESE_CHINA.ZHS16GBK
    

    修改Path变量,在后面添加 C:\instantclient_11_2

    1. 新建tnsnames.ora文件
      C:\instantclient_11_2 新建一个tnsnames.ora文件,增加自己的数据库别名配置。

    #5 SQL Server 2008 清空删除日志文件(瞬间日志变几M)

    -- SQL Server 2008 清空删除日志文件(瞬间日志变几M)
    
    USE [master]
    GO
    ALTER DATABASE PPQA SET RECOVERY SIMPLE WITH NO_WAIT
    GO
    ALTER DATABASE PPQA SET RECOVERY SIMPLE
    GO
    USE PPQA
    GO
    DBCC SHRINKFILE (N'PPQA_log' , 11, TRUNCATEONLY) 
    GO
    USE [master]
    GO
    ALTER DATABASE PPQA SET RECOVERY FULL WITH NO_WAIT
    GO
    ALTER DATABASE PPQA SET RECOVERY FULL
    GO
    

    #6 Oracle 查版本号

    SQL> select * from v$version;
    BANNER
    --------------------------------------------------------------------------------
    Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
    PL/SQL Release 11.2.0.1.0 - Production
    CORE    11.2.0.1.0  Production
    TNS for 64-bit Windows: Version 11.2.0.1.0 - Production
    NLSRTL Version 11.2.0.1.0 - Production
    
    SQL> select * from v$version;
     
    BANNER
    --------------------------------------------------------------------------------
    Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
    PL/SQL Release 11.2.0.1.0 - Production
    CORE    11.2.0.1.0  Production
    TNS for 32-bit Windows: Version 11.2.0.1.0 - Production
    NLSRTL Version 11.2.0.1.0 - Production
    

    #7 建立唯一索引、唯一性约束

    -- 对参考学生表创建唯一索引,同时忽略考号为空的情况
    CREATE UNIQUE INDEX IDX_TEST_NO_UNIQUE ON T_EMS_EXAM_STUDENT(NVL2(NULLIF(EXAM_COURSE_ID,NULL) ,NULLIF(TEST_NO,NULL),NULL),NVL2(NULLIF(TEST_NO,NULL) ,NULLIF(EXAM_COURSE_ID,NULL),NULL))
    
    -- 对学生表创建学籍号唯一约束
    ALTER TABLE T_BAS_STUDENT ADD CONSTRAINT UNQ_STUDENT_CODE UNIQUE (STUDENT_CODE)
    
    -- 删除唯一性索引
    DROP INDEX IDX_TEST_NO_UNIQUE
    
    -- 删除唯一性约束
    ALTER TABLE T_BAS_STUDENT DROP CONSTRAINT UNQ_STUDENT_CODE
    

    扩展阅读

    相关文章

      网友评论

        本文标题:ORACLE常用PL/SQL备忘#2

        本文链接:https://www.haomeiwen.com/subject/epsvgxtx.html