编辑|SQL和数据库技术(ID:SQLplusDB)
目录:
初体验建议
云时代了,一切其实都在“云化”。
对于用户而言,似乎步入了一个浏览器就可以浏览器搞定一切的时代。
现今有好多的各类数据库SQL在线运行网站,并且提供一个包含安装了数据库的在线的Linux环境的似乎并不多。
据说墨天轮近来发布了“数据库在线实训平台”(),所以也试着尝个鲜。
初体验
Oracle作为我最为熟悉的数据库,其实首先尝试一下【Oracle18C在线实训环境】。
下边就开始体验之旅。
首先linux查看数据库运行,1毛钱订购90天的Linux测试环境。
(基本等于白送了,启动一下笔记本的水费似乎也不止这种。
加上31个脚本,一个字:值、值、值。
花了钱的东西似乎就会珍视,买了就要用上去)
通过网页linux软件工程师培训,联接数据库--》进入实训环境。
右侧是数据库初始化的说明。
左侧是Linus的命令行界面。
老鸟儿实测
对于IT老鸟儿而言,还是随性地瞧瞧,满足满足好奇心。
我是谁?我原先是root。还有我不能看/不能干的事么?哈哈~
我在哪?瞧瞧地图不走失!
见到docker-entrypoint-initdb.d这个文件,可以推测应当是docker做的镜像。
查看OS版本:catetc/redhat-release
OS版本是RedHatEnterpriseLinuxServerrelease7.9linux查看数据库运行,这样除了可以作为数据库的测试环境,也可以作为Linux的测试环境。
查看c盘状态:df-h
查看安装用户oracle的环境变量:env
-bash-4.2# su - oracleLast login: Thu Oct 28 20:50:03 CST 2021[oracle@modb ~]$ envHOSTNAME=modbSHELL=/bin/bashTERM=vt100HISTSIZE=1000USER=oracleLS_COLORS=rs=0:di=01;...ORACLE_SID=XEMAIL=/var/spool/mail/oraclePATH=/opt/oracle/product/18c/dbhomeXE/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/oracle/product/18c/dbhomeXE/binPWD=/home/oracleHISTCONTROL=ignoredupsSHLVL=1HOME=/home/oracleLOGNAME=oracleORACLE_HOME=/opt/oracle/product/18c/dbhomeXE_=/usr/bin/env
根据右边的方式,一步一步地操作,相信小白也可以很快入手嵌入式linux培训,具体内容如下:
初始化数据库--Oracle Express Edition (XE)--18C (18.4.0)--默认创建1个PDB--第一次进入需等待初始化建库完成--预计5分钟su - oracle--查看建库进度tail -f opt/oracle/diag/rdbms/xe/XE/trace/alert_XE.log--检查实例状态为opensqlplus as sysdbaselect status from v$instance;show pdbs--初始化HR Schema Demoalter session set container=xepdb1;@?/demo/schema/human_resources/hr_main.sql--依次输入密码,默认表空间,日志目录hr2021USERSTEMP$ORACLE_HOME/demo/schema/log/exitHR用户登录--检查监听lsnrctl statussqlplus hr/hr2021@modb:1521/xepdb1col TABLE_NAME for a50select table_name,num_rows from user_tables;SELECT e.first_name || ' ' || e.last_name "Name", TRUNC(MONTHS_BETWEEN(j.end_date, j.start_date)) "Months Worked"FROM employees e, job_history jWHERE e.employee_id = j.employee_idORDER BY "Months Worked";exit常用管理脚本--内置了常用的34个脚本在/home/oracle/admin目录下cd home/oracle/admin/sqlplus as sysdbaSQL> !ls2pc_clean.sql bind_noused.sql segment_size.sql sqlhis_awr.sql wait_event.sqlash_sql_line_id.sql cursor_purge.sql session_kill.txt sqlinfo_total.sql wait_event_block.sqlash_top_sql_event.txt ddl_metadata.sql session_sid.sql tablespace_used.sql wait_event_hash.sqlash_used.txt dml_get.sql session_spid.sql tabstat.sql wait_event_sqlid.sqlawr_db_time.sql fra_get.sql shared_pool_free.sql temp_used.txt wait_session_hash.sqlawr_event_histogram.txt param_get.sql sql_monitor.sql transaction_get.sql wait_session_sqlid.sqlawr_metric_name.sql redo_switch.sql sql_profile.txt undo_used.sqlSQL> @wait_event.sql INST_ID EVENT COUNT(*)---------- ---------------------------------------------------------------- ---------- 1 SQL*Net message to client 1SQL> SQL> @tablespace_used.sql------------------------------ --------------- --------------- ----------SYSTEM 0.81 0.00 99.44%SYSAUX 0.49 0.03 93.96%UNDOTBS1 0.07 0.00 92.95%USERS 0.00 0.00 20.00%TABLESPACE_NAME SIZE_G FREE_G USED_PCTTablespace Total(MB) Used(MB) Free(MB) Pct. Free(%)------------------------------ ---------- ---------- ---------- ------------TEMP 33 0 33 100SQL>
外置脚本内容
体验了一下各类命令,我还是十分有兴趣地瞧瞧外置了的常用的34个脚本的内容。
1.查看表空间大小
[oracle@modb admin]$ cat tablespace_use.dsql--表空间set linesize 220 pagesize 10000COL SIZE_G FOR A15COL FREE_G FOR A15COL USED_PCT FOR A10COL TABLESPACE_NAME FOR A30SELECT d.tablespace_name, to_char(nvl(a.bytes 1024 1024 1024, 0), '99,999,990.00') size_g, to_char(nvl(f.bytes, 0) 1024 1024 1024, '99,999,990.00') free_g, to_char(nvl((a.bytes - nvl(f.bytes, 0)) a.bytes * 100, 0), '990.00') || '%' used_pct FROM dba_tablespaces d, (SELECT tablespace_name, SUM(bytes) bytes FROM dba_data_files GROUP BY tablespace_name) a, (SELECT tablespace_name, SUM(bytes) bytes FROM dba_free_space GROUP BY tablespace_name) f WHERE d.tablespace_name = a.tablespace_name(+) AND d.tablespace_name = f.tablespace_name(+) AND NOT (d.extent_management = 'LOCAL' AND d.contents = 'TEMPORARY') ORDER BY 4 DESC;--临时表空间select df.tablespace_name "Tablespace", df.totalspace "Total(MB)", nvl(FS.UsedSpace, 0) "Used(MB)", (df.totalspace - nvl(FS.UsedSpace, 0)) "Free(MB)", round(100 * (1-( nvl(fs.UsedSpace, 0) df.totalspace)), 2) "Pct. Free(%)"FROM (SELECT tablespace_name, round(SUM(bytes) 1048576) TotalSpace FROM dba_TEMP_files GROUP BY tablespace_name) df, (SELECT tablespace_name, ROUND(SUM(bytes_used) 1024 1024) UsedSpace FROM gV$temp_extent_pool GROUP BY tablespace_name) fs WHERE df.tablespace_name = fs.tablespace_name(+);
2.实时的undo使用量
[oracle@modb admin]$ cat undo_used.sql--实时的undo使用量set linesize 220set pagesize 1000col username for a20col module for a40col sql_id for a15col status for a10col machine for a20alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';select * from (select start_time, username, s.MACHINE, s.OSUSER, r.name, ubafil, --Undo block address (UBA) filenum ubablk, --UBA block number t.status, (used_ublk * 8192 1024) kbtye, used_urec, s1.SQL_ID, substr(s1.SQL_TEXT,0,20) from v$transaction t, v$rollname r, v$session s, v$sqlarea s1 where t.xidusn = r.usn and s.saddr = t.ses_addr and s.sql_id = s1.sql_id(+) order by 9 desc) where rownum <= 10;
3.临时表空间的使用状况
[oracle@modb admin]$ cat temp_used.txt查询temp表空间使用率:select df.tablespace_name "Tablespace", df.totalspace "Total(MB)", nvl(FS.UsedSpace, 0) "Used(MB)", (df.totalspace - nvl(FS.UsedSpace, 0)) "Free(MB)", round(100 * (1-( nvl(fs.UsedSpace, 0) df.totalspace)), 2) "Pct. Free(%)"FROM (SELECT tablespace_name, round(SUM(bytes) 1048576) TotalSpace FROM dba_TEMP_files GROUP BY tablespace_name) df, (SELECT tablespace_name, ROUND(SUM(bytes_used) 1024 1024) UsedSpace FROM gV$temp_extent_pool GROUP BY tablespace_name) fs WHERE df.tablespace_name = fs.tablespace_name(+)查询实时使用temp表空间的sql_id和sid:set linesize 260 pagesize 1000col machine for a40col program for a40SELECT se.username, sid, serial#, se.sql_id machine, program, tablespace, segtype, (su.BLOCKS*8/1024/1024) GB FROM v$session se, v$sort_usage su WHERE se.saddr = su.session_addr order by su.BLOCKS desc;/*需要注意的是这里查询sql_id要用v$session视图的sql_id,而不要用v$sort_usage视图的sql_id,v$sort_usage视图里面的sql_id是不准确的*/查询历史的temp表空间的使用的SQL_IDselect a.SQL_ID, a.SAMPLE_TIME, a.program, sum(trunc(a.TEMP_SPACE_ALLOCATED 1024 1024)) MB from v$active_session_history a where TEMP_SPACE_ALLOCATED is not null and sample_time between to_date('&date1', 'yyyy-mm-dd hh24:mi:ss') and to_date('&date2', 'yyyy-mm-dd hh24:mi:ss') group by a.sql_id,a.SAMPLE_TIME,a.PROGRAM order by 2 asc,4 desc;
4.会话和SQLID
[oracle@modb admin]$ more wait_session_sqlid.sqlset linesize 260set pagesize 1000col sid for 99999col spid for a8col event for a30col module for a35col machine for a15col username for a10col holder for a10col final for a10col sql_id for a15col exec_gets for 99999999col seconds for a5col object_id for 999999col param for a30col sql_text for a6col PGA_USE for 9999alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';select a.sid, a.username, a.machine, a.module, a.event, a.sql_id, round(decode(c.executions,0,buffer_gets,buffer_gets/executions)) exec_gets, a.ROW_WAIT_OBJ# object_id, a.BLOCKING_INSTANCE||'_'||a.blocking_session holder, a.FINAL_BLOCKING_INSTANCE||'_'||a.FINAL_BLOCKING_SESSION final, to_char(LAST_CALL_ET) seconds, a.p1 || '_' || a.p2 || '_' || a.p3 param, b.spid, trunc(b.PGA_USED_MEM 1024 1024,2) as PGA_USE, substr(c.sql_text,0,6) sql_text from v$session a, v$process b,v$sql c where a.paddr = b.addr(+) and a.status = 'ACTIVE' and not (a.type = 'BACKGROUND' and a.state = 'WAITING' and a.wait_class = 'Idle') and a.sql_id=c.sql_id(+) and a.sql_child_number=c.CHILD_NUMBER(+) order by a.sql_id, a.machine/
5.获取蕴涵参数值
$ more param_get.sqlset linesize 220 pagesize 1000col ksppinm for a40col ksppstvl for a40col ksppdesc for a100select a.ksppinm, a.ksppdesc,b.ksppstvl,a.inst_id from sys.x$ksppi a, sys.x$ksppcv b where upper(a.ksppinm) like upper('%¶m%') and a.indx = b.indx order by a.ksppinm;
6.等待风波和SQLID
cat wait_event_sqlid.sqlset linesize 220set pagesize 1000select a.inst_id,a.event, a.sql_id,max(round(decode(c.executions,0,c.buffer_gets,c.buffer_gets/c.executions))) exec_gets, count(*) from gv$session a,gv$sql c where a.status='ACTIVE' and not (a.type = 'BACKGROUND' and a.state='WAITING' and a.wait_class='Idle') and a.sql_id=c.sql_id(+) and a.sql_child_number=c.CHILD_NUMBER(+) and a.inst_id=c.inst_id
group by a.inst_id,a.event, a.sql_id
order by a.inst_id,count(*) desc, a.sql_id
;
7.获取DDL
$ more ddl_metadata.sql
set linesize 260
set long 999999
set pagesize 1000
select dbms_metadata.get_ddl(upper('&object_type'),upper('&object_name'),upper('&owner')) FROM DUAL;
8.SQLMonitor脚本
$ cat sql_monitor.sql
SET LONG 1000000
SET LONGCHUNKSIZE 1000000
SET LINESIZE 1000
SET PAGESIZE 0
SET TRIM ON
SET TRIMSPOOL ON
SET ECHO OFF
SET FEEDBACK OFF
SELECT DBMS_SQLTUNE.REPORT_SQL_MONITOR(
SQL_ID => '&SQL_ID',
TYPE => 'TEXT',
REPORT_LEVEL => 'ALL') AS REPORT
FROM dual;
其他
等等...
初体验建议
版本最新化
可以看见这个实训环境的数据库版本是Oracle18CExpressEdition也就是精简的免费版,现今最新的版本是
21cExpressEdition,可以适当升升级!
不过对于数据库的核心技术而言各版本基本差别不大,以实验为目的版本差异也无伤大雅。
支持手机浏览。
还真想在手机上也就能尝试一下测试数据库,并且很遗憾排版基本是混乱的。
假如才能稍稍调整一下手机的适应排版就完美了。
3.部份乱码
查看表空间大小的脚本(tablespace_use.dsql)中的英文是乱码。
——End——
HandsOn:(常用命令&小方法)
自动创建数据库及创建过程碰到的错误(踩到的坑)
数据库管理和维护常用操作和命令
RMAN相关基础操作
【常用命令】修改数据库字符集(仅供测试使用)
【常用命令】监视数据库的用户登入和注销会话信息
【常用命令】自动统计搜集的停止(无效)和启动(有效)
【常用命令】获取数据库对象的定义(DDL)
【常用命令】修改数据库字符集(仅供测试使用)
【怎么办001】DROPUSER...CASCADE非常慢如何办?
【怎么办002】想要获取数据库对象的定义(DDL)如何办
【怎么办】003怎么强化Oracle数据库安全--监控数据导出导入操作
【怎么办】004怎样找到删库跑路的人--监控数据库用户登入
SQL*PLUS方法:生成易读的HTML报表
【快问快答】如何判定OJVM是否被使用?
【快问快答】如何搜集回看sql句子中传入的绑定变量值
【快问快答】事务异常或则instanceabort时,怎样计算事务rollback时间
使用PL/SQL发短信相关的OracleACL(AccessControlList)
DBA命令速查1:查看SQL的执行计划
DBA命令速查2:查看蕴涵参数值
DBA命令速查3:获取Oracle服务器IP的方式