ORACLE常用PL/SQL备忘#2

SQL JOINS

文氏图

#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

#8 Oracle批量删除以T_TMP_开头的表

DECLARE

BEGIN
  FOR VCUR IN (SELECT T.TABLE_NAME
                 FROM USER_TABLES T
                WHERE T.TABLE_NAME LIKE 'T_TMP_%') LOOP
    EXECUTE IMMEDIATE 'DROP TABLE '||VCUR.TABLE_NAME;
  END LOOP;
END;

#8 Sqlserver 密码过期时间查询

-- Sqlserver 密码过期时间查询

DECLARE @login NVARCHAR(30)

-- 查询设定密码过期的登陆账号
SELECT  @login = name
FROM    sys.sql_logins
WHERE   is_expiration_checked = 1
        AND name = 'Tdf'
 
-- 计算登录账户密码已使用天数
SELECT  @login AS 'login' ,
        DATEDIFF(d,
                 CAST(LOGINPROPERTY(@login, 'PasswordLastSetTime') AS datetime),
                 GETDATE()) AS 'pwd_using_days'

-- 计算密码到期之前的剩余天数
-- 注意,只适合于sql server 2008
SELECT  LOGINPROPERTY(@login, 'DaysUntilExpiration') AS 'days_until_expiration'

扩展阅读

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容