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

    创建表空间

    1.创建默认表空间WLP_DAT

    CREATE TABLESPACE "MYSPACE" DATAFILE
    'D:oracleoradataorcldata/WLP_DAT.dbf' SIZE 32M REUSE AUTOEXTEND ON NEXT 32M
    LOGGING EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO;

    2.创建临时表空间WLP_TEMP(用于缓存,可以不建)

    ALTER TABLESPACE "TEMP" ADD TEMPFILE
    'D:oracleoradataorcldata/WLP_TEMP.dbf' SIZE 32m REUSE autoextend on next 32m;

    创建用户并授权

    复制代码
     1 CREATE USER "WLPING" PROFILE "DEFAULT" 
     2 IDENTIFIED BY "123456"
     3 DEFAULT TABLESPACE "MYSPACE"  //默认指定表空间
     4 TEMPORARY TABLESPACE "TEMP"  //指定缓存表空间
     5 ACCOUNT UNLOCK;   //用户非锁定
     6 
     7 GRANT EXECUTE ON dbms_comparison TO "WLPING";
     8 GRANT UNLIMITED TABLESPACE TO "XIR_MD";
     9 GRANT "CONNECT" TO "XIR_MD";
    10 GRANT "RESOURCE" TO "XIR_MD";
    11 
    12 -- GRANT DBA TO XIR_MD;
    复制代码

    PROFILE:Oracle系统中的profile可以用来对用户所能使用的数据库资源进行限制,使用Create Profile命令创建一个Profile,用它来实现对数据库资源的限制使用,如果把该profile分配给用户,则该用户所能使用的数据库资源都在该profile的限制之内。具体管理内容有:CPU的时间、I/O的使用、IDLE TIME(空闲时间)、CONNECT TIME(连接时间)、并发会话数量、口令机制等。

    用户管理

    oracle内部有两个建好的用户:system和sys。用户可直接登录到system用户以创建其他用户,因为system具有创建其他用户的权限。 在安装oracle时,用户或系统管理员首先可以为自己建立一个用户。

    ※ 使用sys as sysdba 可以获得数据库最高权限

    一、创建用户

    语法[创建用户]: create user 用户名 identified by 口令[即密码];

    例子: create user test identified by test;

    语法[更改用户]: alter user 用户名 identified by 口令[改变的口令];

    例子: alter user test identified by 123456;

    二、删除用户

    语法:drop user 用户名;

    例子:drop user test;

    若用户拥有对象,则不能直接删除,否则将返回一个错误值。指定关键字cascade,可删除用户所有的对象,然后再删除用户。

    语法: drop user 用户名 cascade;

    例子: drop user test cascade;

    三、授权角色

    oracle为兼容以前版本,提供三种标准角色(role):connect/resource和dba.

    (1)讲解三种标准角色:

    1》. connect role(连接角色)

    --临时用户,特指不需要建表的用户,通常只赋予他们connect role. 

    --connect是使用oracle简单权限,这种权限只对其他用户的表有访问权限,包括select/insert/update和delete等。

    --拥有connect role 的用户还能够创建表、视图、序列(sequence)、簇(cluster)、同义词(synonym)、回话(session)和其他  数据的链(link)

    2》. resource role(资源角色)

    --更可靠和正式的数据库用户可以授予resource role。

    --resource提供给用户另外的权限以创建他们自己的表、序列、过程(procedure)、触发器(trigger)、索引(index)和簇(cluster)。

    3》. dba role(数据库管理员角色)

    --dba role拥有所有的系统权限

    --包括无限制的空间限额和给其他用户授予各种权限的能力。system由dba用户拥有

    (2)授权命令

    语法: grant connect, resource to 用户名;

    例子: grant connect, resource to test;

    (3)撤销权限

    语法: revoke connect, resource from 用户名;

    列子: revoke connect, resource from test;

    角色管理

    四、创建/授权/删除角色

    除了前面讲到的三种系统角色----connect、resource和dba,用户还可以在oracle创建自己的role。用户创建的role可以由表或系统权限或两者的组合构成。为了创建role,用户必须具有create role系统权限。

    1》创建角色

    语法: create role 角色名;

    例子: create role testRole;

    2》授权角色

    语法: grant select on class to 角色名;

    列子: grant select on class to testRole;

    注:现在,拥有testRole角色的所有用户都具有对class表的select查询权限

    3》删除角色

    语法: drop role 角色名;

    例子: drop role testRole;

    注:与testRole角色相关的权限将从数据库全部删除

    表操作

    一、创建表

    复制代码
     1 CREATE TABLE MY_TABLE (
     2 ID NUMBER(10) PRIMARY KEY,
     3 NAME VARCHAR2(50) NOT NULL,
     4 BIRTHDAY DATE
     5 );
     6 // 表名注释
     7 COMMENT ON TABLE my_table IS '个人信息表';
     8 // 字段名注释
     9 COMMENT ON COLUMN MY_TABLE.ID IS 'ID';
    10 COMMENT ON COLUMN MY_TABLE.NAME IS '姓名';
    复制代码

    组合主键约束:CONSTRAINT PK_MY_TABLE PRIMARY KEY (column1,column2)

    二、修改约束

    禁用约束 disable constraint 约束名字;

    删除约束 drop constraint 约束名字;

    新增约束 alter table <表名 > add constraint  <主键名>

    约束介绍

    1.主键约束:
    要对一个列加主键约束的话,这列就必须要满足的条件就是分空
    因为主键约束:就是对一个列进行了约束,约束为(非空、不重复)
    以下是代码   要对一个列加主键,列名为id,表名为emp

    格式为:
    alter table 表格名称 add constraint 约束名称 增加的约束类型 (列名)
    例子:
    alter table emp add constraint ppp primary key (id)
    ————————————————————————————————
    2.check约束:
    就是给一列的数据进行了限制
    比方说,年龄列的数据都要大于20的
    表名(emp) 列名(age)
    格式:
    alter table 表名称 add constraint 约束名称 增加的约束类型 (列名)
    例子:
    alter table emp add constraint xxx check(age>20)
    ______________________________________________________________________
    3.unique约束:
    这样的约束就是给列的数据追加的不重复的约束类型
    格式:
    alter table 表名 add constraint 约束名称 约束类型(列名)
    比方说可以给ename列加个unique,让ename列的数据不重复
    例子:
    alter table emp add constraint qwe unique(ename)
    ————————————————————————————————
    4.默认约束:
    意思很简单就是让此列的数据默认为一定的数据
    格式:
    alter table 表名称 add constraint 约束名称 约束类型 默认值) for 列名
    比方说:emp表中的gongzi列默认为10000
    alter table emp add constraint jfsd default 10000 for gongzi
    ————————————————————————————————
    5.外键约束:
    这个有点难理解了,外键其实就是引用
    因为主键实现了实体的完整性,
    外键实现了引用的完整性,
    应用完整性规定,所引用的数据必须存在!
    其实就是个引用,
    比方说一个表名称叫dept 里面有2列数据 一列是ID一列是ENAME
    id:表示产品的编号
    ename:表示产品的名称
    另外一个表格名称是emp 里面有2列数据,一列是ID 一列是DID
    id:表示用户号
    did:表示购买的产品号
    要让emp表中的did列去引用dept表中的id
    可以用下面的方法
    格式:
    alter table 表名 add constraint 约束名称 约束类型 (列名) references 被引用的表名称(列名)

    例子:

    alter table emp add constraint jfkdsj foreign key (did) references dept (id)

    三、操作表

     rename 表名 to 表名  //修改表名
     
     truncate table 表名  //删除表中的所有数据,速度比delete快很多,截断表
     
     drop table 表名  //删除表

    四、修改字段

    复制代码
     alter table 表名 modify (字段 字段类型);  -- 修改字段数据类型
     
     alter table 表名 rename column 列名 to 列名 --修改字段名
     
     alter table 表名 add 列名 字段类型; --增加字段
     
     alter table 表名 drop column 字段名;  -- 删除字段
    复制代码

    五、修改数据

     insert into 表名(值1,值2) values(值1,值2);   // 插入数据
     
     update 表名 set 字段=值 [修改条件]   //修改数据
     
     delete from table  where 条件  //删除数据

    六、查询

    复制代码
     /* 获取表:*/
     
     select table_name from user_tables; //当前用户的表
     
     select table_name from all_tables; //所有用户的表
     
     select table_name from dba_tables; //所有表,包括系统表(需要dba权限)
     
     select table_name from dba_tables where owner='WLPING';  //某个用户的表,包括所有的系统表(需要dba权限)
    复制代码

    /*查询系统时间*/

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

    导入导出

    总结:EXP和IMP是客户端工具程序,它们既可以在客户端使用,也可以在服务端使用。
    EXPDP和IMPDP是服务端的工具程序,他们只能在ORACLE服务端使用,不能在客户端使用。
    IMP只适用于EXP导出的文件,不适用于EXPDP导出文件;IMPDP只适用于EXPDP导出的文件,而不适用于EXP导出文件。
    EXP不能导出分区表,而EXPDP可以

    一、导入dmp文件

    imp

    1)imp 用户名/密码@服务器IP:端口/服务名  file=dmp文件路径;

    imp username/password@127.0.0.1:1521/orcl file=D:oracleadminorcldpdumpa.dmp;

    2)将exp_export.dmp 中的表table1,table2导入

    imp system/manager@hostname:1521/ora11g file=exp_export.dmp tables=table1,table2  

    impdp

    1)导到指定用户下

    impdp scott/tiger DIRECTORY=DUMP_DIR DUMPFILE=expdp_export.dmp SCHEMAS=scott;  

    2)改变表的owner

    impdp system/manager DIRECTORY=DUMP_DIR DUMPFILE=expdp_export.dmp TABLES=scott.dept REMAP_SCHEMA=scott:system;  

    3)导入表空间

    impdp system/manager DIRECTORY=DUMP_DIR DUMPFILE=expdp_export.dmp TABLESPACES=example;  

    3)导入整个库文件

    impdb system/manager DIRECTORY=DUMP_DIR DUMPFILE=expdp_export.dmp full=y; 

    二、导出dmp文件

    ※ 导入导出指定日志输出文件 log=exp_export.log  

    ※ 在导出命令后面加上 compress=y  可以对导出文件进行压缩

    1.导出整个数据库实例下的所有数据
    2.导出指定用户的所有表
    3.导出指定表

    exp

    1)将数据库ORACLE完全导出

    exp sysuser/password@127.0.0.1:1521/ORCL file=D:d:daochu.dmp full=y;

    2)将数据库中WLP用户与,WLPING用户的表导出

    exp username/password@127.0.0.1:1521/ORCL file=d:daochu.dmp   owner=(WLP,WLPING);

    3)将数据库中的表table1、table2导出

    exp sysuser/password@127.0.0.1:1521/ORCL file= d:data
    ewsmgnt.dmp tables=(table1,table2);

    4)将数据库中的表table1中的字段filed1以"00"打头的数据导出

    exp system/manager@loaclhost:1521/orcl file=d:daochu.dmp tables=(table1) query=" where filed1 like '00%'" log=exp_export.log;

    expdp

    创建逻辑目录(默认为oracle用户空间下的dpdump目录)

    create directory DUMP_DIR as '/oracle/DUMP_DIR';  

    在服务器上创建该目录,因为Oracle并不会自动创建,如果目录不存在导出会报错

    • mkdir -p /oracle/DUMP_DIR 

    给用户授予在该目睹读取的权限

    • grant read,write on directory DUMP_DIR to scott; 

    1)导整个数据库

    expdp system/manager DIRECTORY=DUMP_DIR DUMPFILE=expdp_export.dmp FULL=y;

    2)按用户导

    expdp scott/tiger@localhost:1521/ora11g schemas=scott dumpfile=expdp_export.dmp DIRECTORY=DUMP_DIR;

    3)并行进程parallel

     

    expdp scott/tiger@localhost:1521/ora11g directory=DUMP_DIR dumpfile=expdp_export.dmp parallel=40 job_name=expdp40;

    4)按表名导

    expdp scott/tiger@localhost:1521/ora11g TABLES=emp,dept dumpfile=expdp_export.dmp DIRECTORY=DUMP_DIR;

    5)按查询条件导

    expdp scott/tiger@localhost:1521/ora11g directory=DUMP_DIR dumpfile=expdp_export.dmp tables=emp query='WHERE deptno=20';

    6)按表空间导

    expdp system/manager DIRECTORY=DUMP_DIR DUMPFILE=expdp_export.dmp TABLESPACES=temp,example;

    序列

     新建序列

      CREATE SEQUENCE 序列名

      [INCREMENT BY n]    //步长 默认1  非零

      [START WITH n]      //开始值

      [{MAXVALUE/ MINVALUE n| NOMAXVALUE}]  //最大值/最小值

      [{CYCLE|NOCYCLE}]    //到达最大值是否循环,不循环时直接报错

      [{CACHE n| NOCACHE}];  //默认20,当有大量请求时使用缓存,预先生成多个序列提供使用,断开连接后会丢失未使用的序列值,导致序号不连续。

     实例:

    复制代码
    1 create sequence seq_my_define
    2 minvalue 1
    3 nomaxvalue
    4 start with 1
    5 increment by 1
    6 nocycle
    7 nocache;
    复制代码

    查询序列当前值

    select  seq_my_define.currval from dual;

    查询下一增长值(提醒,这里虽然是查询,但序列值会改变,相当于++i):

    select  seq_my_define.nextval from dual;

    触发器

    主键自增:oracle没有主键自增选项,需要自己使用触发器实现

    1 CREATE OR REPLACE TRIGGER tr_my_define
    2 BEFORE INSERT ON MY_WMPS_DEFINE FOR EACH ROW
    3 begin
    4     select seq_my_define.nextval into:new.id from dual;
    5 end;

    变量使用:

    例子:将序列S_BOND_POOL_TREE的当前值与数据库ID最大值统一

    变量可以在定义时赋值,也可以后面再赋值。

    通过select语句将查询结果赋值给变量:select 字段名 into 变量名 from 表

    execute immediate 'str'; //可以使用变量拼接字符串得到语句来执行

    复制代码
     1 DECLARE
     2   n NUMBER :=0;
     3 BEGIN
     4   select (num - S_BOND_POOL_TREE.nextval) into n
     5   from(
     6     select max(to_number( node_id)) as num from  XIR_TRD_J.TREE_NODE_INFO
     7   );
     8   IF n = 0 then return;
     9   ELSE
    10     execute immediate 'alter sequence S_BOND_POOL_TREE increment by '|| n;
    11     select S_BOND_POOL_TREE.nextval into n from dual; 
    12     execute immediate 'alter sequence S_BOND_POOL_TREE increment by 1';
    13   END IF;
    14 END;
  • 相关阅读:
    Maven
    Mybatis
    WinDbg的安装、配置和功能(转发)
    gRPC —— gRPC 基础: C#(待续)
    gRPC —— 通讯协议
    gRPC —— 安全认证
    gRPC —— 概念
    gRPC —— 概览
    grpc和protocol buffer介绍&实例(转载)
    protocol buffers ——git 源码
  • 原文地址:https://www.cnblogs.com/guokezhiren/p/9086985.html
Copyright © 2011-2022 走看看