马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
一、数据库访问
1.1 访问方式
可以通过本地数据库工具如:Navicat、DBeaver、PLSQL等,通常此方式都存在着权限的限定,部分SQL指令无权限实验;也可以直接通过数据库服务器进行访问。
1.2 数据库服务器
1.2.1 Windows/Linux
Windows:打开Windows PowerShell
Linux:登陆Linux服务器,切换到oracle用户权限
1.2.2 监听相关命令
查询监听状态:lsnrctl status
启动监听:lsnrctl start
关闭监听:lsnrctl stop
重新加载监听:lsnrctl reload
1.2.3 进入sqlplus
的方式
回车之后会提示输入用户名,密码
或
- sqlplus
- username/password
复制代码 username:用户名
password:密码
或
- connect username/password
复制代码 或
- connect username/password
- @servername
复制代码 servername:服务名
或
1.2.4 基础SQL命令
查看数据库实例名:
- show parameter instance_name;
复制代码 关闭数据库:
启动数据库:
退出sql语句实验:
二、常用的SQL语句
2.1 数据库表空间使用情况查询
2.1.1 统计
- SELECT fs.TABLESPACE_NAME "表空间",
- round(total / (1024 * 1024 * 1024), 2) "总空间(G)",
- round(free / (1024 * 1024 * 1024), 2) "剩余(G)",
- round((total - free) / (1024 * 1024 * 1024), 2) "已使用(G)",
- round((total - free) / total, 4) * 100 "使用率%"
- FROM (SELECT TABLESPACE_NAME, SUM(BYTES) free
- FROM DBA_FREE_SPACE GROUP BY TABLESPACE_NAME) fs,
- (SELECT TABLESPACE_NAME, SUM(BYTES) total
- FROM DBA_DATA_FILES GROUP BY TABLESPACE_NAME) df
- WHERE fs.TABLESPACE_NAME = df.TABLESPACE_NAME;
复制代码 2.1.2 明细
- SELECT df.FILE_ID AS "文件ID",
- df.TABLESPACE_NAME AS "表空间",
- df.FILE_NAME AS "文件名",
- CONCAT(ROUND(NVL(df.BYTES, 0)/(1024*1024), 2), 'MB') AS "总空间",
- CONCAT(ROUND((NVL(df.BYTES, 0)-SUM(NVL(fs.BYTES, 0)))/(1024*1024), 2), 'MB') AS "已使用",
- CONCAT(ROUND(SUM(NVL(fs.BYTES, 0))/(1024*1024), 2), 'MB') AS "剩余",
- CONCAT(ROUND(SUM(NVL(fs.BYTES, 0))/NVL(df.BYTES, 0), 4)*100 , '%') AS "剩余%"
- FROM DBA_FREE_SPACE fs, DBA_DATA_FILES df
- WHERE fs.FILE_ID = df.FILE_ID
- GROUP BY df.TABLESPACE_NAME ,df.FILE_NAME ,df.FILE_ID ,df.BYTES
- ORDER BY df.TABLESPACE_NAME ;
复制代码 2.2 数据库表空间扩容
2.2.1 单机情况
自动扩容,有最大限定的:
- ALTER TABLESPACE tablespacename ADD DATAFILE 'filepath' SIZE 1024M AUTOEXTEND ON NEXT 8M MAXSIZE 30720M;
复制代码 非自动扩容(表空间最大为32G):
- ALTER TABLESPACE tablespacename ADD DATAFILE 'filepath' SIZE 30G;
复制代码 tablespacename:待扩容的表空间
filepath:上面查询到的对应的表空间文件名,留意文件名不能重复
2.2.2 集群情况(Oracle RAC)
查询磁盘组信息:
或
- SELECT GROUP_NUMBER ,NAME ,TYPE ,STATE ,TOTAL_MB ,FREE_MB FROM "GV$ASM_DISKGROUP";
复制代码 扩容命令:
- ALTER TABLESPACE tablespacename ADD DATAFILE '+磁盘组名' size 30G;
复制代码 +磁盘组名:一样平常来说都是+DATA
Oracle RAC安装时打开了omf,以是新增的数据文件只必要写到’+磁盘组名’,就可以自动创建到数据文件所在目录
2.3 游标查询
2.3.1 查询最大游标数和最大打开游标数
- SELECT MAX(a.value) AS highest_open_cur,
- p.value AS max_open_cur
- FROM v$sesstat a,
- v$statname b,
- v$parameter p
- WHERE a.statistic# = b.statistic#
- AND b.name = 'opened cursors current'
- AND p.name = 'open_cursors'
- GROUP BY p.value;
复制代码 2.3.2 打开游标的信息查询
- SELECT a.value,
- s.username,
- s.sid,
- s.serial#
- FROM v$sesstat a,
- v$statname b,
- v$session s
- WHERE a.statistic# = b.statistic#
- AND s.sid = a.sid
- AND b.name = 'opened cursors current'
- ORDER BY 1 DESC;
复制代码 2.3.2 未关闭PreparedStatement的SQL查询
- SELECT oc.sid,
- oc.hash_value,
- oc.sql_text,
- COUNT(*) how_many
- FROM v$open_cursor oc
- GROUP BY sid,
- hash_value,
- sql_text
- ORDER BY 4 DESC;
复制代码 2.4 历程相关SQL
2.4.1 查询用户占用资源信息
- SELECT l.SESSION_ID ,o.OWNER ,o.OBJECT_NAME
- FROM "V$LOCKED_OBJECT" l,dba_objects o
- WHERE l.OBJECT_ID = o.OBJECT_ID;
复制代码 2.4.2 根据SID(即SESSION_ID)查询出死锁历程信息
- SELECT SID ,"SERIAL#" ,USERNAME ,OSUSER ,MACHINE ,TERMINAL ,PROGRAM ,PREV_EXEC_START ,EVENT ,LOGON_TIME
- FROM v$session WHERE SID IN (SESSION_ID1 ,SESSION_ID2) ;
复制代码 2.4.3 直接查询死锁的历程
- SELECT s.SID, s."SERIAL#", l.TYPE
- FROM v$lock l, v$session s
- WHERE l.SID = s.SID
- AND l.TYPE = 'TM';
复制代码 2.4.4 结束死锁历程(SID,SERIAL#)
- ALTER system kill SESSION 'SID,SERIAL#';
复制代码 2.5 表占用查询
2.5.1 查询占用内存前10的表
- SELECT * FROM
- (SELECT SEGMENT_NAME ,ROUND(NVL(BYTES, 0)/(1024*1024), 2)
- FROM DBA_SEGMENTS
- WHERE OWNER = USER
- ORDER BY BYTES DESC
- )
- WHERE rownum <= 10;
复制代码 2.5.2 删除表数据
drop删除表数据,删除表数据和结构:
truncate删除表数据,只删除表数据,不删除表结构,整体一次性删除,服从高,开释空间:
delete删除表数据,只删除表数据,不删除表结构,单行数据删除,服从低,不开释空间:
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |