zoukankan      html  css  js  c++  java
  • oracle 常用命令

    常用数据字典

    可以使用desc 查看结构

    dba_users
    dba_tablespaces
    user_users
    user_tablespaces
    dba_data_files #文件数据,可查看表空间的实际存储位置
    USER_CONSTRAINTS; #查询数据字典可以看到某个表中约束的信息
    
    #查看表
    user_tables#当前用户表
    user_tab_comments;#
    all_tab_comments #所有表
    
    #视图字典视图
    dba_views——DBA视图描述数据库中的所有视图
    all_views——ALL视图描述用户“可访问的”视图
    user_views——USER视图描述“用户拥有的”视图 
    dba_tab_columns——DBA视图描述数据库中的所有视图的列(或表的列)
    all_tab_columns——ALL视图描述用户“可访问的”视图的列(或表的列)
    user_tab_columns——USER视图描述“用户拥有的”视图的列(或表的列) 
    
    ##权限
    dba_role_privs
    dba_sys_privs
    role_sys_privs 
    

    登录和基本操作

    使用sqlplus 登录

    ### 登录和基本操作
    connect sysdba/manager
    
    ### 查看当前用户
    show user;
    
    ###权限
    select * from dba_role_privs;
    select * from dba_sys_privs;
    select * from role_sys_privs; 
    
    ###查看当前用户对象的表
    select table_name from user_tables;
    select * from user_tab_comments; # all_tab_comments
    
    ### 查看数据字典(表)的结构
    desc dba_tablespaces; # 系统管理员
    desc user_tablespaces; #普通用户
    
    ### 查看用户字典
    desc dba_users; #系统管理员
    desc user_users; #普通用户
    
    ###查询数据字典
    select * from dba_users; #系统管理员才能查询,注意 非管理员用户登录查询该字典会提示,表或者视图不存在,因为没有权限
    select * from user_users; #普通用户查询
    
    ### 解锁scott用户
    select account_status from dba_users where username='SCOTT'; # 查看scott用户的状态
    alter user scott account unlock; #将scott用户解锁,默认是锁状态
    alter user scott identified by tiger; #修改scott 用户密码
    

    表空间

    ### 查询
    select * from dba_tablespaces; # 查看dba用户表空间
    select * from dba_tablespaces; # 查看dba用户表空间
    select default_tablespace from user_users where username='SCOTT';#查看SCOTT用户的默认表空间
    
    ### 设置用户的默认或者临时表空间
    alter user username default/temporary tablespace tablespacename; #语法
    alter user scott default tablespace SYSTEM; #设置SCOTT用户默认表空间是system,注意需要dba用户来修改,普通用户权限不足
    
    #修改之后使用scott 用户登录,查询数据字典
    select * from user_users; #可以看到默认的用户表空间已经变更
    
    ###通过数据字典查看表空间数据
    desc dba_data_files; #数据字典
    select * from dba_data_files; #查看数据文件存储
    select * from dba_tablespaces; #查看表空间的状态
    
    ### 创建表空间
    create [temporary] tablespace tablespacename datafile 'xxx.dbf' size 10m ; 语法
    
    create TABLESPACE fore_tablespace DATAFILE 'fore_tablespace.dbf' SIZE 10m; #默认是永久表空间,使用dba用户创建表空间,大小10m
    create temporary TABLESPACE temp_tablespace DATAFILE 'temp_tablespace.dbf' SIZE 10m; #创建临时表空间,大小10m
    
    ### 设置表空间的联机或者脱机状态
    alter tablespace tablespacename online|offline; #语法
    
    alter tablespace fore_tablespace offline; #默认创建的时候是联机
    select * from dba_tablespaces;#查看表空间状态
    
    ### 修改表空间的状态(只有在联机状态下可以修改)
    alter TABLESPACE tablespacename read ONLY| read write;#语法,只读和可读写,默认是可读写的
    
    alter TABLESPACE fore_tablespace read ONLY;
    select * from dba_tablespaces; #查看表空间的状态
    
    ### 修改数据文件(表空间需要在联机状态下)
    select * from dba_tablespaces; #查看表空间状态
    alter tablespace tablespacename add DATAFILE '/home/oracle/xx/df1.dbf' size  10m; # 语法
    alter tablespace fore_tablespace  add DATAFILE 'df1.dbf' size  10m; #若不指定路径,则会oracle存放在oracle的默认位置
    select * from dba_data_files where TABLESPACE_NAME='TEST_USER_TABLESPACE1'; #查看表空间对应的数据文件
    
    ###删除表空间的数据文件,注意不能删除创建表空间的第一个数据文件,若想删除,需要先删除表空间
    --强行删除会出现该错误
    --------------------------------------------------------------------------
    -----03261. 00000 -  "the tablespace %s has only one file"---------------
    -----*Cause:    Dropping file from ts which has a single file extent.-----
    -----*Action:   Cannot make a tablespace fileless-------------------------
    -------------------------------------------------------------------------
    alter tablespace tablespacename drop DATAFILE 'df1.dbf'; #语法,指定文件名
    
    ###删除表空间
    drop TABLESPACE tablespacename[INCLUDING CONTENTS] ; #语法,[INCLUDING CONTENTS]包含对应的数据文件
    drop TABLESPACE TEST_USER_TABLESPACE1 INCLUDING CONTENTS ;  #删除表空间以及表空间对应的数据文件
    

    ###创建表
    CREATE TABLE TABLE_NAME (
        COLUMN_NAME DATATYPE ,...
    ) #语法
    
    CREATE TABLE USERINFO (
        ID NUMBER(6,0) ,
        USERNAME VARCHAR2(20),
        EMAIL VARCHAR2(20),
        BIRTHDAY DATE
    ); #创建用户信息表
    
    DESC USERINFO; #查看表结构
    
    ###修改表
    
    --添加字段
    ALTER TABLE TABLE_NAME ADD COLUMN_NAME DATEtYPE;#语法
    ALTER TABLE USERINFO ADD AGE NUMBER(3,0); #添加字段
    
    --修改字段名字
    ALTER TABLE TABLE_NAME RENAME COLUMN COLUMN_NAME TO NEW_COLUMN_NAME;#语法
    ALTER TABLE USERINFO RENAME COLUMN AGE TO AGE1; #将AGE重命名为AGE1
    
    --修改表名
    RENAME TABLE_NAME TO NEW_TABLENAME;#语法
    RENAME USERINFO TO NEW_USERINFO; #修改USERINFO 为 NEW_USERINFO
    
    --修改字段的数据类型
    ALTER TABLE TABLE_NAME MODIFY COLUMN_NAME DATETYPE; #语法
    ALTER TABLE USERINFO MODIFY AGE DATE; #修改字段的数据类型
    
    --删除字段
    ALTER TABLE TABLE_NAME DROP COLUMN COLUMN_NAME; #语法
    ALTER TABLE USERINFO DROP COLUMN AGE; #删除字段AGE
    
    --删除表
    DROP TABLE TABLE_NAME ; #语法
    DROP TABLE USERINFO ; #删除表
    
    --删除表中所有的数据,截断表,比delete效率高
    TRUNCATE TABLE TABLE_NAME; #语法
    TRUNCATE TABLE USERINFO;
    
    

    表约束

    主键约束
    非空约束
    唯一约束
    检查约束

    1.主键约束(PRIMARY KEY)

    1. 主键用于唯一地标识表中的每一条记录,可以定义一列或多列为主键。
    2. 是不可能(或很难)更新.
    3. 主键列上没有任何两行具有相同值(即重复值),不允许空(NULL).
    4. 主健可作外健,唯一索引不可;

    2.唯一性约束(UNIQUE)

    1. 唯一性约束用来限制不受主键约束的列上的数据的唯一性,用于作为访问某行的可选手段,一个表上可以放置多个唯一性约束.
    2. 只要唯一就可以更新.
    3. 即表中任意两行在 指定列上都不允许有相同的值,允许空(NULL).
    4. 一个表上可以放置多个唯一性约束
    ### 添加非空约束(创建表时)
    CREATE TABLE TABLE_NAME (
    COLUMN_NAME DATE_TYPE [NOT NULL]|[缺省]|[NULL]); #语法,添加表的时候添加非空约束,默认是可以为空
    
    ###修改
    ALTER TABLE TABLE_NAME MODIFY COLUMN_NAME DATE_TYPE [NOT NULL]|[缺省]|[NULL]; #语法
    
    ###添加主键约束(创建表时)
    CREATE TABALE TABLE_NAME(
    ID NUMBER(11,0) PRIMARY KEY); # PRIMARY KEY 主键约束
    
    --多个字段联合约束,联合主键,复合主键
    CREATE TABALE TABLE_NAME(
    ID NUMBER(11,0),
    NAME VARCHAR2(20) ,
    CONSTRAINT CONSTRAINT_NAME PRIMARY KEY (COLUMN_NAME1,COLUMN_NAME2)
    ); # PRIMARY KEY 主键约束,语法 CONSTRAINT(约束)
    
    ---例子
    CREATE TABLE HELLO(
      ID NUMBER(11,0) ,
      NAME VARCHAR2(20) ,
      CONSTRAINT PK_ID_NAME PRIMARY KEY (ID,NAME)
    );
    
    --查询数据字典可以看到某个表中约束的信息
    DESC USER_CONSTRAINTS;
    SELECT * FROM USER_CONSTRAINTS;#查看所有约束
    
    ###后为表添加约束
    ALTER TABLE TABLE_NAME ADD CONSTRAINT CONSTRAINTS_NAME PRIMARY KEY (COLUMN_NAME1,COLUMN_NAME2,...);
    
    --修改约束的名字
    ALTER TABLE TABLE_NAME RENAME CONSTRAINT PK_NAME TO NEW_PK_NAME;
    SELECT * FROM USER_CONSTRAINTS;#查看所有约束
    
    --启用禁用约束
    ALTER TABLE TABLE_NAME DISABLE | ENABLE CONSTRAINT CONSTRAINT_NAME;
    SELECT STATUS FROM USER_CONSTRAINTS;#可以查看约束的状态 status
    
    --删除主键约束
    ALTER TABLE TABLE_NAME DROP CONSTRAINT CONSTAINT_NAME ;
    
    ALTER TABLE TABLE_NAME DROP PRIMARY KEY [casacade] #级联删除,在有外键的时候使用
    
    ###外键约束
    
    --创建表的时候添加,列级约束,在新建字段的时候添加
    CREATE TABLE TABLE_NAME(
    COLUMN DATE_TYPE REFERENCES OTHER_TABLE (COLUMN_NAME),OTHER_TABLE (COLUMN_NAME)...); #语法
    
    --在新建表时,最后添加
    CREATE TABLE TABLE_NAME(
    CONSTRAINT CONSTRAINT_NAME FOREIGN KEY(COLUMN_NAME(本表中的字段))
    REFERENCES OTHER_TABLE (COLUMN_NAME),OTHER_TABLE (COLUMN_NAME) [ON DELETE CASCADE]); #语法 [ON DELETE CASCADE]是否级联删除,当主表中的删除时,从表中的一行会被删除
    
    --在修改表的时候添加外键约束
    ALTER TABLE TABLE_NAME ADD CONSTRAINT CONSTRAINT_NAME FOREIGN KEY (COLUMN_NAME) REFERENCES OTHER_TABLE(COLUMN_NAME) [ON DELETE CASCADE];
    
    --禁用(启用) 外键约束
    SELECT * FROM USER_CONSTRAINTS; #找到对应表的约束名称 CONSTRAINT_NAME
    ALTER TABLE TABLE_NAME DISABLE|ENABLE CONSTRAINT CONSTRAINT_NAME; #禁用约束
    
    --删除外键约束
    ALTER TABLE TABLE_NAME DROP CONTRAINT CONSTRAINT_NAME;
    
    
    ###唯一约束
    --列级别
    CREATE TABLE TABLE_NAME (
    COLUMN DATE_TYPE UNIQUE ) #UNIQUE唯一约束
    
    --表级别
    CREATE TABLE TABLE_NAME (
    COLUMN DATE_TYPE ,
    CONSTRAINT CONSTRAINT_NAME UNIQUE(COLUMN_NAME)) ;#UNIQUE唯一约束
    
    --在修改表的时候添加唯一约束
    ALTER TABLE TABLE_NAME ADD CONSTRAINT CONSTRAINT_NAME unique (COLUMN_NAME);
    
    --禁用(启用)唯一约束
    SELECT * FROM USER_CONSTRAINTS; #找到对应表的约束名称 CONSTRAINT_NAME
    ALTER TABLE TABLE_NAME DISABLE|ENABLE CONSTRAINT CONSTRAINT_NAME; #禁用约束
    
    --删除唯一约束
    ALTER TABLE TABLE_NAME DROP CONTRAINT CONSTRAINT_NAME;
    
    ###检查约束
    
    --列级别
    CREATE TABLE TABLE_NAME (
    COLUMN DATE_TYPE CHECK(EXPRESSIONS)) #检查约束 (EXPRESSIONS) => COLUMN >0 表达式
    
    --表级别
    CREATE TABLE TABLE_NAME (
    COLUMN DATE_TYPE ,
    CONSTRAINT CONSTRAINT_NAME CHECK(EXPRESSIONS)) ;
    
    --在修改表的时候添加检查约束
    ALTER TABLE TABLE_NAME ADD CONSTRAINT CONSTRAINT_NAME CHACK(EXPRESSIONS);
    
    --禁用(启用)检查约束
    SELECT * FROM USER_CONSTRAINTS; #找到对应表的约束名称 CONSTRAINT_NAME
    ALTER TABLE TABLE_NAME DISABLE|ENABLE CONSTRAINT CONSTRAINT_NAME; #禁用约束
    
    --删除检查约束
    ALTER TABLE TABLE_NAME DROP CONTRAINT CONSTRAINT_NAME;
    

    查询

    ###字段命名
    COL COLUMN_NAME HEADING 别名;
    
    ###CASE WHEN 语句
    SELECT COLUMN_NAME ,CASE CLOUMN_NAME 
    WHEN 条件1 THEN 结果1 
    WHEN 条件2 THEN 结果2
    ELSE '其他' 
    END  AS 结果列名
    FROM TABLE_NAME 
    WHERE XXX  #第一种
    
    ###第二种方式
    SELECT age ,CASE WHEN 0<age<18 THEN '未成年人' 
    WHEN AGE>18 THEN '成年人' 
    END AS REMARK
    FROM PERSON
    WHERE XXX #第二种方式,(字段>10)可以填写条件
    
    

    序列

    ###创建队列
    CREATE SEQUENCE seqTest
    INCREMENT BY 1 -- 每次加几个
    START WITH 1 -- 从1开始计数
    NOMAXvalue -- 不设置最大值
    NOCYCLE -- 一直累加,不循环
    CACHE 10; --设置缓存cache个序列,如果系统down掉了或者其它情况将会导致序列不连续,也可以设置
    
    
    --队列测试
    CREATE SEQUENCE seqTest
    INCREMENT BY 1 -- 每次加几个
    START WITH 1 -- 从1开始计数
    NOMAXvalue -- 不设置最大值
    NOCYCLE -- 一直累加,不循环
    NOCACHE --设置缓存cache个序列,如果系统down掉了或者其它情况将会导致序列不连续,也可以设置为---------NOCACHE
    
    --下一个值
    select seqTest.nextval from dual;
    --当前的值
    select seqTest.currval from dual;
    
    --设置Shenqingdh队列
    CREATE SEQUENCE seqShenqingdh
    INCREMENT BY 1 -- 每次加几个
    START WITH 100000001 -- 从100000001开始计数
    NOMAXvalue -- 不设置最大值
    NOCYCLE -- 一直累加,不循环
    CACHE 10 --设置缓存cache个序列,如果系统down掉了或者其它情况将会导致序列不连续,也可以设置为---------NOCACHE
    
    --查询 (第一次要先查nextVal 值,否则直接查currval 值会报错)
    select seqShenqingdh.currval from dual
    select seqShenqingdh.nextVal from dual
    
    
    --得到Sequence值 
    --定义好sequence后,你就可以用currVal,nextVal取得值。
    -- CurrVal:返回 sequence的当前值 
    -- NextVal:增加sequence的值,然后返回 增加后sequence值 
    --SELECT [定义Sequence名称].CurrVal FROM DUAL; 
    --如得到上边创建Sequence值的语句为:
    select seqShenqingdh.nextVal from dual
    
    --删除序列
    DROP SEQUENCE LAB.TEST_ITEM_NO;
    --查询序列名,用户
    SELECT t.* from dba_SEQUENCES t where t.sequence_name like '%TEST%';
    
    注:
      1、如果想要改变start的值,必须 drop  sequence 再重建一个序列
      2、如果想要改变minvalue的值,必须删除序列后再重新建立序列化。不可以修改序列化的minvalue。
    

    视图

    ###创建视图
    create [or replace ] view view_name 
    [column1,column2,column3...] --和查询字句的返回列数匹配
    as 
    select xxx from xxx
    [WITH CHECK OPTION]
    [with read only];
    
    ###实例 scott 用户,得有创建视图的权限
    connect /as system/manager
    grant create view to scott,xxx;
    
    --创建只读视图
    --查询目前每个岗位姓名,平均工资(保留两位小数)、工资总和、最高工资和最低工资。分组,然后连接查名字
    CREATE OR REPLACE VIEW v_dept_sal AS
        SELECT
            d.dname ,avg_sal,
            sum_sal,
            max_sal,
            min_sal
        FROM
            (
                SELECT
                    deptno,
                    to_number(TRIM(to_char(AVG(sal), '99999999999999.99'))) avg_sal,
                    SUM(sal) sum_sal,
                    MAX(sal) max_sal,
                    MIN(sal) min_sal
                FROM
                    emp
                GROUP BY
                    deptno
            ) s
            LEFT JOIN dept                                                                                                                                               d ON s.deptno = d.deptno
    WITH READ ONLY;
    
    
    ###查询视图
    SELECT * FROM V_DEPT_SAL;
    
    ###修改基表中数据,发现视图中的数据也会同时更新
    UPDATE DEPT SET DNAME='SALES1' WHERE DEPTNO=30;
    
    ###查看快照
    --可以通过这种方法查出最近某个时间的快照
    select * from 表 as of timestamp to_timestamp('20151021 09:00:00','yyyymmdd hh24:mi:ss')
    where 字段名=''
    

    查询表空间占用

    
    SELECT DD.TABLESPACE_NAME,
           DD.AUTOEXTENSIBLE,
           DD.ONLINE_STATUS,
           DD.INCREMENT_BY * 8 / 1024 "next(M)",
           A.*
      FROM (SELECT D.FILE_ID AS FID,
                   MAX(D.BYTES) / 1024 / 1024 "total(M)",
                   NVL(SUM(F.BYTES), 0) / 1024 / 1024 "free(M)",
                   (1 - ((NVL(SUM(F.BYTES), 0) / 1024 / 1024) /
                   (MAX(D.BYTES) / 1024 / 1024))) * 100 "usage(%)",
                   D.FILE_NAME,
                   MAX(D.BYTES) - NVL(SUM(F.BYTES), 0) USED_BYTES,
                   ROUND(SQRT(MAX(F.BLOCKS) / SUM(F.BLOCKS)) *
                         (100 / SQRT(SQRT(COUNT(F.BLOCKS)))),
                         2) FRAG_IDX
              FROM DBA_FREE_SPACE F, DBA_DATA_FILES D
             WHERE F.TABLESPACE_NAME(+) = D.TABLESPACE_NAME
               AND F.FILE_ID(+) = D.FILE_ID
             GROUP BY D.FILE_NAME, D.FILE_ID) A
      LEFT JOIN DBA_DATA_FILES DD
        ON DD.FILE_ID = A.FID
    ORDER BY DD.TABLESPACE_NAME ASC, A.FILE_NAME ASC;
    
    

    数据库允许的最大连接数

    SELECT COUNT(*) FROM V$SESSION;
    SELECT VALUE FROM V$PARAMETER WHERE NAME = 'processes'; --数据库允许的最大连接数

    Session

    SELECT COUNT() FROM V$SESSION; --当前的session连接数
    SELECT COUNT(
    ) FROM V$PROCESS; --当前的数据库连接数

    查看SQL执行记录

    SELECT * FROM V$SESSION T WHERE T.MACHINE='AA6IYGQ8GYQUKZF';
    SELECT T.CPU_TIME,T.ELAPSED_TIME,t.* FROM V$SQL T WHERE T.ADDRESS='000000008DB81038';

  • 相关阅读:
    蓝桥杯之递归算法基本框架

    Dubbo是什么
    java
    java
    java
    java
    java
    负载均衡的理解
    设计模式学习
  • 原文地址:https://www.cnblogs.com/iullor/p/12286891.html
Copyright © 2011-2022 走看看