ITPub博客

首页 > 数据库 > Oracle > Oracle常用脚本

Oracle常用脚本

原创 Oracle 作者:husthxd 时间:2017-08-22 22:05:38 0 删除 编辑
1.linux 启动数据库脚本

#!/bin/bash

export ORACLE_HOSTNAME=emcc.example.com

echo "Starting the Oracle Database and network listener ....."
echo ""

export ORACLE_HOME=/u01/db/product/dbhome_1
export PATH=$ORACLE_HOME/bin:$PATH
export ORACLE_SID=orcl

$ORACLE_HOME/bin/lsnrctl start

$ORACLE_HOME/bin/sqlplus '/as sysdba'<<- _START_DB
        startup;
        alter system register;
        exit;
_START_DB

2.查询主外键依赖脚本
select b.owner as parent_owner,b.table_name as parent_table,a.owner as child_owner,a.table_name as child_table
from dba_constraints a, dba_constraints b
where a.constraint_type='R' 
         and a.r_constraint_name = b. constraint_name 
         and b.constraint_type='P'
         and b.table_name=<被依赖表名>;


3.查看数据库字符集
select * from nls_database_parameters;


4.查询数字代表的字符集


在sqlplus里通过select nls_charset_name(852) from dual;可以查看该数字代表的字符集。

03 03 54 45 58 50 4F 52 54 3A

其中,03 54是16进制的数字,代表了一种字符集。将其转换为10进制为:


SQL> select to_number('0354','xxxx') from dual;
TO_NUMBER('0354','XXXX')
------------------------
                    852
查询852代表的字符集
SQL> select nls_charset_name(852) from dual;
NLS_CHAR
--------
ZHS16GBK


逆向操作:
SQL> select nls_charset_id('ZHS16GBK') from dual;
NLS_CHARSET_ID('ZHS16GBK')
--------------------------
                      852

------------------------------------------------------------------------------------------

如何查询dmp文件的字符集
用oracle的exp工具导出的dmp文件也包含了字符集信息,dmp文件的第2和第3个字节记录了dmp文件的字符集。如果dmp文件不大,比如只有几M或几十M,可以用UltraEdit打开(16进制方式),看第2第3个字节的内容,如0354,然后用以下SQL查出它对应的字符集:
SQL> select nls_charset_name(to_number('0354','xxxx')) from dual;
ZHS16GBK
如果dmp文件很大,比如有2G以上(这也是最常见的情况),用文本编辑器打开很慢或者完全打不开,可以用以下命令(在unix主机上):
cat exp.dmp |od -x|head -1|awk '{print $2 $3}'|cut -c 3-6
然后用上述SQL也可以得到它对应的字符集。

5.查看表空间的使用情况 
SELECT trunc(SUM(bytes) / (1024 * 1024 * 1024),2) AS free_space, tablespace_name 
FROM dba_free_space 
GROUP BY tablespace_name; 

SELECT a.tablespace_name, 
trunc(a.bytes/ (1024 * 1024 * 1024),2) total, 
trunc(b.bytes/ (1024 * 1024 * 1024),2) used, 
trunc(c.bytes/ (1024 * 1024 * 1024),2) free, 
trunc((b.bytes * 100) / a.bytes,2) "% USED ", 
trunc((c.bytes * 100) / a.bytes,2) "% FREE " 
FROM sys.sm$ts_avail a, sys.sm$ts_used b, sys.sm$ts_free c 
WHERE a.tablespace_name = b.tablespace_name 
AND a.tablespace_name = c.tablespace_name; 

SELECT tablespace_name, 
file_id, 
file_name, 
round(bytes / (1024 * 1024), 0) total_space 
FROM dba_data_files 
ORDER BY tablespace_name; 

6.查看表空间中的对象
COLUMN segment_name  format a20

select * from (
SELECT t.owner, t.segment_name,t.segment_type,
trunc((SUM(bytes)/1024/1024/1024),2) as SIZE_GB
From dba_segments t 
WHERE t.tablespace_name IN ('TBS_SD','TBS_SSD')
AND t.segment_type <> 'LOBSEGMENT'
GROUP BY t.owner,t.segment_name,t.segment_type
ORDER BY SUM(bytes) desc
) where rownum <= 20;


SELECT t.owner, t.segment_name,t.segment_type,
trunc((SUM(bytes)/1024/1024/1024),2) as SIZE_GB
From dba_segments t 
WHERE t.segment_name = &table_name
AND t.segment_type <> 'LOBSEGMENT'
GROUP BY t.owner,t.segment_name,t.segment_type
ORDER BY SUM(bytes) desc

7.查看正在执行的SQL
select a.terminal,a.username,b.SQL_FULLTEXT
from v$session a, v$sqlarea b 
where a.sql_address = b.address 
           and a.status = 'ACTIVE';

8.Interval分区表
年:INTERVAL (NUMTOYMINTERVAL(1,'year')
月:INTERVAL (NUMTOYMINTERVAL(1,’month’)
周:INTERVAL ( NUMTODSINTERVAL (7, 'day') )
日:INTERVAL ( NUMTODSINTERVAL (1, 'day') )

numtodsinterval(<x>,<c>) ,x是一个数字,c是一个字符串,
表明x的单位,这个函数把x转为interval day to second数据类型
常用的单位有 ('day','hour','minute','second')

NUMTOYMINTERVAL(1, 'YEAR') 一年

NUMTOYMINTERVAL(1, 'MONTH') 一个月

NUMTODSINTERVAL(1, 'DAY') 一天

NUMTODSINTERVAL(1, 'HOUR') 一小时

NUMTODSINTERVAL(1, 'MINUTE') 一分钟

NUMTODSINTERVAL(1, 'SECOND') 一秒

9.查询分区表信息
col partition_position format 999 head "Pos"
col partition_name format a10 head "Name"
col high_value format a50 head "High Value"
select partition_position, partition_name, high_value
from dba_tab_partitions
where table_name = 'T_PARTITION_SUB128' order by 1;

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/6906/viewspace-2143973/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: MySQL基本管理
请登录后发表评论 登录
全部评论
ITPUB数据库版块资深版主,对Oracle、PostgreSQL有深入研究。

注册时间:2007-12-28

  • 博文量
    1602
  • 访问量
    4380083