zoukankan      html  css  js  c++  java
  • ORACLE常用脚本

    1、查看表空间的名称及大小
    2、查看表空间物理文件的名称及大小
    3、查看回滚段名称及大小
    4、查看控制文件
    5、查看日志文件
    6、查看表空间的使用情况
    7、查看数据库库对象
    8、查看数据库的版本 
    9、查看数据库的创建日期和归档方式
    10、查看当前所有对象
    11、建一个和a表结构一样的空表
    12、察看数据库的大小,和空间使用情况
    13、查看现有回滚段及其状态
    14、查看数据文件放置的路径
    15、显示当前连接用户
    16、把SQL*Plus当计算器
    17、连接字符串
    18、查询当前日期
    19、用户间复制数据
    20、视图中不能使用order by,但可用group by代替来达到排序目的
    21、通过授权的方式来创建用户
    22、How to find the tablespace of a table?
    23、How to remove duplicate rows from a table
    24、检查无效的数据库对象 
    25、检查不起作用的约束
    26、检查无效的trigger 
    27、检查无效的trigger 
    28、密码有效期的查看、修改
    29、DOS链接提示"无效选项"的处理
    30、数据库密码如果忘了怎么办
    31、资源文件
    32、断开用户连接
    33、查看数据库服务器连接参数
    34、查看数据库名及其他属性
    35、密码过期的处理
    36、查找表中字段重复的数据
    37、查询对象占用空间大小
    38、查询系统是以pfile还是spfile启动
    39、DBLink的创建、删除、查询
    40、查看数据库版本
    41、移动表或表分区
    42、查看数据文件是否被存储占用
    43、删除表空间的空数据文件
    44、不配置网络,直接连接
    45、锁定对象后的解锁
    46、取得一段时间内的所有日期
    47、设置Segment
    48、批量更新
    49、查询输出到文本
    50、获得全球唯一32位字符串
    51、授权用户表空间权限
    52、查看段(deferred_segment_creation)值
    53、闪回
    54、找回删除的表
    55、缩小Undo表空间
    56、创建一个数据库常用代码
    57、Merge语句
    58、判断是哪个IP导致用户被锁
    100、一些数据字典(以DBA登录)

    //////////////////////////////////////////////////////////
    1、查看表空间的名称及大小

        select t.tablespace_name, round(sum(bytes/(1024*1024)),0) ts_size
         from dba_tablespaces t, dba_data_files d
         where t.tablespace_name = d.tablespace_name
         group by t.tablespace_name;

    2、查看表空间物理文件的名称及大小

      select tablespace_name, file_id, file_name,
       round(bytes/(1024*1024),0) total_space
       from dba_data_files
       order by tablespace_name;

    3、查看回滚段名称及大小

      select segment_name, tablespace_name, r.status,
       (initial_extent/1024) InitialExtent,(next_extent/1024) NextExtent,
       max_extents, v.curext CurExtent
       From dba_rollback_segs r, v$rollstat v
       Where r.segment_id = v.usn(+)
       order by segment_name ;

    4、查看控制文件

      select name from v$controlfile;

    5、查看日志文件

      select member from v$logfile;

    6、查看表空间的使用情况
       --显示表空间大小、剩余大小、剩余百分比
    select f.tablespace_name 表空间名,curG-file_freeG 实际使用G,curG 磁盘占用G,maxG 最大空间G,ext_freeG+file_freeG 剩余空间G
    from
    (select tablespace_name,round(sum(bytes/(1024*1024*1024)),2) as file_freeG
    from dba_free_space group by tablespace_name) f
    join
    (select tablespace_name,round(sum(bytes/(1024*1024*1024)),2) as curG,
    round(sum(maxbytes/(1024*1024*1024)),2) as maxG,round(sum(maxbytes-bytes)/(1024*1024*1024),2) as ext_freeG
    from dba_data_files group by tablespace_name) d
    on f.tablespace_name=d.tablespace_name;

      --显示数据文件大小、最大大小、剩余百分比
    select tablespace_name,file_name,file_id,
    round(bytes/(1024*1024),0) as 当前占用M,round(maxbytes/(1024*1024),0) 最大空间M,
    round((maxbytes-bytes)/(1024*1024),0) as 剩余空间M,
    to_char(100*(maxbytes-bytes)/DECODE(maxbytes,0,maxbytes-bytes,maxbytes), '999.99')||'%' as 剩余百分比
    from dba_data_files order by tablespace_name,file_id

      SELECT A.TABLESPACE_NAME,A.BYTES TOTAL,B.BYTES USED, C.BYTES FREE,
       (B.BYTES*100)/A.BYTES "% USED",(C.BYTES*100)/A.BYTES "% 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;

    7、查看数据库库对象

      select owner, object_type, status, count(*) count# from all_objects group by owner, object_type, status;

    8、查看数据库的版本 

      Select version FROM Product_component_version Where SUBSTR(PRODUCT,1,6)='Oracle';

      select * from v$version;

    9、查看数据库的创建日期和归档方式

      Select Created, Log_Mode, Log_Mode From V$Database;

    10、查看当前所有对象

      SQL> select * from tab;

    11、建一个和a表结构一样的空表

      SQL> create table b as select * from a where 1=2;

      SQL> create table b(b1,b2,b3) as select a1,a2,a3 from a where 1=2;

    12、察看数据库的大小,和空间使用情况

      SQL> col tablespace format a20
       SQL> select b.file_id  文件ID,
       b.tablespace_name  表空间,
       b.file_name     物理文件名,
       b.bytes       总字节数,
       (b.bytes-sum(nvl(a.bytes,0)))   已使用,
       sum(nvl(a.bytes,0))        剩余,
       sum(nvl(a.bytes,0))/(b.bytes)*100 剩余百分比
       from dba_free_space a,dba_data_files b
       where a.file_id=b.file_id
       group by b.tablespace_name,b.file_name,b.file_id,b.bytes
       order by b.tablespace_name
       /
       dba_free_space --表空间剩余空间状况
       dba_data_files --数据文件空间占用情况

    13、查看现有回滚段及其状态

      SQL> col segment format a30
       SQL> SELECT SEGMENT_NAME,OWNER,TABLESPACE_NAME,SEGMENT_ID,FILE_ID,STATUS FROM DBA_ROLLBACK_SEGS;

    14、查看数据文件放置的路径

      SQL> col file_name format a50
       SQL> select tablespace_name,file_id,bytes/1024/1024,file_name from dba_data_files order by file_id;

    15、显示当前连接用户

      SQL> show user

    16、把SQL*Plus当计算器

      SQL> select 100*20 from dual;

    17、连接字符串

      SQL> select 列1||列2 from 表1;
       SQL> select concat(列1,列2) from 表1;

    18、查询当前日期

      SQL> select to_char(sysdate,'yyyy-mm-dd,hh24:mi:ss') from dual;

    19、用户间复制数据

      SQL> copy from user1 to user2 create table2 using select * from table1;

    20、视图中不能使用order by,但可用group by代替来达到排序目的

      SQL> create view a as select b1,b2 from b group by b1,b2;

    21、通过授权的方式来创建用户

      SQL> grant connect,resource to test identified by test;

      SQL> conn test/test

      create user SXK identified by ncsxk default tablespace ncbdcsxk;
       grant connect,create session,create table,select any table to sxk;

    22、How to find the tablespace of a table?

      SELECT tablespace_name
       FROM all_tables
       WHERE table_name = 'YOURTABLENAME';

    23、How to remove duplicate rows from a table

      If the unique/primary keys can be identified from the table, it is easier to remove the records from the table using the following query:
       DELETE FROM tablename
       WHERE rowid not in (SELECT MIN(rowid)
       FROM tablename
       GROUP BY column1, column2, column3...);
       Here column1, column2, column3 constitute the identifying key for each record.
       If the keys cannot be identified for the table, you may create a temporary table using the query
       CREATE TABLE temptablename
       AS SELECT DISTINCT *
       FROM tablename;
       Then drop the original table and rename the temp table to original tablename.

    24、检查无效的数据库对象 

      col owner for a20
     col object_name for a30
     SELECT owner, object_name, object_type
       FROM dba_objects
       WHERE status= 'INVALID';

    25、检查不起作用的约束

      SELECT owner, constraint_name, table_name, constraint_type, status
       FROM dba_constraints
       WHERE status = 'DISABLED' AND constraint_type = 'P' ;

    27、检查无效的trigger 

      SELECT owner, trigger_name, table_name, status
      FROM dba_triggers
      WHERE status = 'DISABLED';

    28、密码有效期的查看、修改

      --查看概要文件名
         select username,profile from dba_users where username='user';
       --检查概要文件(默认为default)的密码有效期设置
         select * from dba_profiles s where s.profile='DEFAULT' and resource_name='PASSWORD_LIFE_TIME';
       --将密码有效期修改成无限制
         alter profile default limit password_life_time unlimited;
       --检查“RESOURCE_LIMIT”是否配置为“FLASE”
         show parameter resource_limit;
         alter system set resource_limit=false scope=both;
       --修改有效期后,还没有被提示ORA-28002警告的用户账号不会再碰到同样的提示,而已经被提示的用户账号必须再改一次密码
         alter user user_name identified by <old_password> account unlock;  --不用换密码

    29、DOS链接提示"无效选项"的处理

      $sqlplus /nolog
       sql>conn / as sysdba 或 sql>conn user_name/psw as sysdba

    30、数据库密码如果忘了怎么办

      开始-->运行-->cmd
       输入 :sqlplus /nolog 回车
       输入 :connect / as sysdba 回车
       用户解锁 : alter user system account unlock 回车
       修改密码:alter user system identified by manager

    31、资源文件

      --查看RESOURCE_LIMIT值
         show parameter resource_limit;
       --启动当前资源限制
         alter system set RESOURCE_LIMIT=true;
       --创建资源配置(时间单位:分钟)
         create profile [profilename] limit connect_time unlimited idle_time unlimited;
       --把某种配置文件赋给某个用户
         alter user [user_name] profile [profilename];
       --查看用户使用了哪个资源文件
         select username,profile from dba_users;
       --查看资源文件设置的权限
         select profile,resource_name,limit from dba_profiles;

    32、断开用户连接

      --查看哪些用户连接了数据库
         select sid,serial#,username from v$session;
       --断开用户的连接
         alter system kill session '118,1394'; --'118,1394' : 'sid,serial#'

    33、查看数据库服务器连接参数
       --专用服务器连接(dedicated server),共享服务器连接(shared server)
       --如果VALUE_COL_PLUS_SHOW_PARAM大于0为()dedicated模式
         show parameter shared_server mts_servers;

    34、查看数据库名及其他属性
         select name from v$database;
         show parameter db
         查看参数文件。

    35、密码过期的处理
       --查询该用户所使用的profile,如果没有特别设置,一般会是default:
         SELECT username,PROFILE FROM dba_users;
       --查询default的profile设置是否有密码限制,发现密码生命期限为180天:
         SELECT * FROM dba_profiles WHERE resource_name='PASSWORD_LIFE_TIME';
       --修改default的profile密码策略为无限制:
         alter profile default limit password_life_time unlimited;
       --策略已更改,但如果修改profile时候已经有该提示的用户还是需要修改密码,保持原密码即可,无提示的用户将不会再提示
         alter user username identified by xxx;
       --密码的历史,password_reuse_time=30,password_reuse_max=10,用户可以在30天以后重用该密码,要求密码必须被改变超过10次。
         create profile p1 limit password_reuse_time 1/1440 password_reuse_max 1;
         alter user scott profile p1;
       --5分钟后可重用该密码,但这期间必须要被改成其他密码一次
         alter profile p1 limit password_reuse_time 5/1440 password_reuse_max 1;

    36、查找表中字段重复的数据
       --count函数不能与列同时使用,但加group by后就可以了。分组后找出组中多余一条记录的,然后作为查询条件。
         select * from bdc_fwsx where 不动产单元号 in (select 不动产单元号 from (
         select count(1) as a,不动产单元号 from bdc_fwsx where 状态=1 group by 不动产单元号)
         where a>1) and 状态=1 order by 不动产单元号

    37、查询对象占用空间大小
       --查询段占用的空间
         select bytes from user_segments where segment_name='tablename';
       --查询段剩余空间和已用空间
         analyze table tablename compute statistics;
         select empty_blocks,blocks from user_table where table_name='tablename';

    38、查询系统是以pfile还是spfile启动
       --如果isspecified里有true,表明用spfile进行了指定配置
       --如果全为false,则表明用pfile启动
         select isspecified,count(*) from v$spparameter group by isspecified;
         select decode(count(*),1,'spfile','pfile') from v$spparameter
         where rownum=1 and isspecified='TRUE';

    39、DBLink的创建、删除、查询
       --跨库查询数据时可以建立数据库连接,create后不加public,则创建的dblink只有创建者可以使用
         create [public] database link link_name connect to user_name identified by user_pwd using 'server_name';
         drop database link link_name;
       --使用时,只要在表名后加“@link_name”即可。
       --应避免使用connect by, start with, prior关键字。BLOB字段不可用。
       --当本地global_names为TRUE时,link_name必须与远程的global_name一致
         show parameter global_name;
         select * from dba_db_links;
         alter system set global_names=FALSE;
       --如果创建连接后还是无法查询,可以试一下把server_name换成连接字符串。
         create [public] database link link_name connect to user_name identified by user_pwd using
    '(DESCRIPTION =
         (ADDRESS_LIST =
           (ADDRESS = (PROTOCOL = TCP)(HOST = 17.16.27.251)(PORT = 1521))
         )
         (CONNECT_DATA =
           (SERVICE_NAME = GHY)
         )
    )';
       --查看dblink详细信息,如是否在使用中
         select * from v$dblink;

    40、查看数据库版本
       select * from v$version;

    41、移动表或表分区
       --移动表的语法
         Alter table tablename move [Tablespace new_name Storage(initial 50M next 50M
         pctincrease 0 pctfree 10 pctused 50 initrans 2) nologging];
       --移动分区的语法
         alter table tablename move (partition partname) [update global indexes];
       --之后之后必须重建索引
         Alter index indexname rebuild;
       --如果表有Lob段,那么正常的Alter不能移动Lob段到别的表空间,而仅仅是移动了表段,
       --可以采用如下的方法移动Lob段
         alter table tablename move lob(lobsegname) store as (tablespace newts);

    42、查看数据文件是否被存储占用
       --如果找不到记录,说明数据文件没有存储任何数据
         select segment_name,file_id,blocks from dba_extents where file_id=5;

    43、删除表空间的空数据文件
       --首先查询到数据文件的file_id(dba_data_files),然后查看数据文件是否是空数据文件(dba_extents)
         alter tablespace tbs_name drop datafile 'datafile_path_name.dbf';

    44、不配置网络,直接连接
       --启动cmd
         sqlplus /nolog
         conn user/pwd@IP:1521/DBName;

    45、锁定对象后的解锁
       --查出锁定的对象sid与serial#,杀死会话(两列数据用逗号连接)
         select * from v$session where sid in (select session_id from v$locked_object);
       --结果
         SID    SERIAL#
         ================
         136    14178
       --杀死会话
         alter system kill session '136,14178';

    46、取得一段时间内的所有日期
       --两个日期之间的天数
         select to_char(to_date('2017-01-01','yyyy-mm-dd')+level-1) dt,level
         from dual connect by level <=
           floor(to_date('2017-07-23','yyyy-mm-dd')-to_date('2017-01-01','yyyy-mm-dd'))+1;
       --起始日期,n,显示n个月
         select to_char(add_months(date'2017-01-01', level-1), 'yyyy-mm') months
         from dual connect by level <= 12

    47、设置Segment
         alter system set deferred_segment_creation=false scope=both;

    48、批量更新
         update a set WtNo=b.No from WT_Task a join WT_Basicinformation b on a.WtId=b.WtId;

    49、查询输出到文本
         spool [输出文件全路径]
         set echo on     --显示SQL执行语句
         [查询语句]
         spool off

    50、获得全球唯一32位字符串
       --sys_guid()是RAW类型数据,rawtohex转换为16进制表示的字符串;
       --hextoraw是将16进制表示的字符串转换为RAW类型
         select rawtohex(sys_guid()) from dual

    51、授权用户表空间权限
         alter user user_name quota unlimited on tablespace_name;
         alter user user_name quota *M on tablespacename;
         alter user user_name quota 0 on tablespacename;
       --配额数据字典
         dba_ts_quotas,user_ts_quotas

    52、查看段(deferred_segment_creation)值
       --创建表前修改该值为FALSE,导出时就会导出空表
         show parameter deferred_segment_creation;
         alter system set deferred_segment_creation=false scope=both;

    53、闪回
         select * from tablename as of timestamp to_timestamp('2019-10-30 02:00:00','yyyy-mm-dd hh24:mi:ss');

    54、找回删除的表
         select * from recyclebin where original_name='tablename';
         flashback table "object_name" to before drop;

    55、缩小Undo表空间
       --关闭自动增长
         alter database datafile 'D:SoftwareOracle11goradataORCLUNDOTBS01.DBF' autoextend off;
       --缩小undo tablespace
         create undo tablespace undotbs2 datafile 'D:SoftwareOracle11goradataORCLUNDOTBS02.DBF' size 100M;
         alter system set undo_tablespace=undotbs2;
         drop tablespace undotbs1 including contents and datafiles cascade constraints;

    56、创建一个数据库常用代码
       --创建数据库、创建表空间、用户,用户分配权限
         create tablespace space_name datafile 'D:Oracleoradataspace_namedatafile01.dbf' size 100M autoextend on next 20M maxsize 30G;
         create user user_name identified by pwd default tablespace spacename temporary tablespace TEMP;
         grant create session,connect, dba to user_name;
         alter tablespace space_name add datafile 'D:Oracleoradataspace_namedatafile02.dbf' size 100M autoextend on next 20M maxsize 30G;
         alter database datafile 'D:Oracleoradataspace_namedatafile02.dbf' resize 2048M autoextend on next 10M maxsize 30G;
       --删除表空间:首先查询到数据文件的file_id(dba_data_files),然后查看数据文件是否是空数据文件(dba_extents)
         drop tablespace space_name including contents and datafiles cascade constraints;
         alter tablespace space_name drop datafile 'datafile_path_name.dbf';
       --分配segment
         alter system set deferred_segment_creation=false scope=both;
       --修改default的profile密码策略为无限制,密码生命期限默认为180天
         select username,profile from dba_users;
         select * from dba_profiles where resource_name='PASSWORD_LIFE_TIME';
         alter profile default limit password_life_time unlimited;
       --建表
         create table table_name 
         (id number, 
          name varchar2(200)
          constraint PK_TABLE_NAME primary key(ID)
         )tablespace(space_name);

    57、Merge语句
           merge [into] [schema.]table [alias]
           using {[schema.]table|views|query} [alias]
           on {condition}
           when matched then update set {clause}
           when not matched then insert values {clause}

    58、判断是哪个IP导致用户被锁
       --用dba角色的用户登陆,查看被锁用户及时间
         select username,account_status,lock_date from dba_users;
       --查看哪个ip导致被锁 搜索文件listener.log,路径:.diag nslsnrDESKTOP-Q5H59EDlistener race
       --根据锁定时间与log中的对比,找到登录IP

    100、一些数据字典(以DBA登录)

      --查看数据库全名
         select * from GLOBAL_NAME;
       --查看数据库归档方式
         SELECT DBID, NAME, LOG_MODE FROM V$DATABASE;
         ARCHIVE LOG LIST;
       --查看文件路径
         SELECT NAME FROM V$DATAFILE;
         SELECT MEMBER FROM V$LOGFILE;
         SELECT GROUP#, STATUS, MEMBER FROM V$LOGFILE;
       --查看日志文件当前状态
         SELECT GROUP#, ARCHIVED, STATUS FROM V$LOG;
       --查看用户系统权限
         select * from user_sys_privs;
       --查看游标
         SELECT SID,USER_NAME,SQL_TEXT FROM V$OPEN_CURSOR;
       --查看目录对象
         select * from dba_directories;
       --查询撤销设置
         show parameter undo_
       --查看表空间
         select name,bigfile,flashback_on from v$tablespace;
       --查看用户控件配额
         user_ts_quotas
       --查看NLS参数
         select * from v$nls_parameters;
       --与角色相关的数据字典视图
         SYSTEM_PRIVILEGE_MAP    所有可用系统权限
         dba_roles        列出数据库中定义的角色
         dba_role_privs    列出授予数据库用户的角色
         session_roles    列出当前用户启动的角色
         role_sys_privs    列出授予其他角色的角色,显示通过角色授予用户的系统权限
         role_tab_privs    列出授予角色的表权限
         role_role_privs    列出授予角色的系统权限
         dba_sys_privs    列出用户或角色系统权限(直接赋值给用户或角色的系统权限)
         user_sys_privs    列出当前用户所拥有的权限
       --与分区表相关
         dba_tab_partitions
         dba_tab_subpartitions
       --查看哪些用户连接了数据库
         select sid,serial#,username from v$session;
       --查看表属性
         user_tables        用户表属性列表
         all_tables        系统表属性列表
       --配额数据字典
         dba_ts_quotas    用户表空间配额信息
         user_ts_quotas    当前用户表空间配额信息
       --查看所有数据字典及其说明
         DICT        列出所有数据字典及其说明
         DICT_COLUMNS    列出数据字典每个列的作用
       --查看用户相关信息
         user_tab_privs    列出当前用户的表级权限
         user_sys_privs    列出当前用户的系统权限
         user_role_privs    列出当前用户的角色
         user_tables        列出当前用户下所有的表
         user_users        列出当前用户属性,如缺省表空间等
         dba_sys_privs    显示指定用户所具有的系统权限
         dba_users        查看用户属性
         tab            显示当前用户所拥有的表、视图、序列
       --查看执行的SQL语句
         v$sql        显示执行的SQL语句,优先使用,比v$sqlarea快,不会产生share pool latch的争用
         v$sql_bind_capture    sql需要预编译的很多参数绑定在v$sql_bind_capture 这个表,如v$sql出现:1,:2等
         v$sqlarea        对v$sql的一个group by统计,相同的version合为一条记录

  • 相关阅读:
    iOS (封装)一句话调用系统的alertView和alertController
    仿写从iOS8开始支持的UIAlertController:BGAAlertController-Android
    iOS开发之UIAlertController的适配
    使用dispatch_once实现单例
    关于内存警告
    Android之drawable state各个属性具体解释
    vijos 1115 火星人
    X-UA-Compatible IE 浏览器默认文档模式设置
    POJ--1300--Door Man【推断无向图欧拉通路】
    sharepoint 2013 附件控件FileUpload怎样检验是否为图片的方法
  • 原文地址:https://www.cnblogs.com/publiter/p/13595614.html
Copyright © 2011-2022 走看看