zoukankan      html  css  js  c++  java
  • Oracle初识

    Oracle表空间

    基本概念

    • ORACLE数据库被划分成称作为表空间的逻辑区域——形成ORACLE数据库的逻辑结构
    • 一个ORACLE数据库能够有一个或多个表空间,而一个表空间则对应着一个或多个物理的数据库文件
    • 表空间是ORACLE数据库恢复的最小单位,容纳着许多数据库实体,如表、视图、索引、聚簇、回退段和临时段
    • 每个ORACLE数据库均有SYSTEM表空间,这是数据库创建时自动创建的

    SYSTEM表空间

    • system表空间必须总要保持联机,因为其包含着数据库运行所要求的基本信息
    • 关于整个数据库的数据字典、联机求助机制、所有回退段、临时段和自举段、所有的用户数据库实体、其它ORACLE软件产品要求的表)
    • 一个小型应用的ORACLE数据库通常仅包括SYSTEM表空间,然而一个稍大型应用的ORACLE数据库采用多个表空间会对数据库的使用带来更大的方便
    便于理解,把oracle数据库看作一个实在房间,表空间可以看作这个房间的空间,是可以自由分配
    在这空间里面可以堆放多个箱子(箱子可以看作数据库文件),箱子里面再装物件(物件看作表)
    用户指定表空间也就是你希望把属于这个用户的表放在那个房间(表空间)里面。
    表空间是一个虚拟的概念可以无限大,但是需要由数据文件作为载体。

    Segment(段)

    段是指占用数据文件空间的通称,或数据库对象使用的空间的集合;段可以有表段、索引段、回滚段、临时段和高速缓存段等。

    Extent(区间)

    • 分配给对象(如表)的任何连续块叫区间;
    • 区间也叫扩展,因为当它用完已经分配的区间后,再有新的记录插入就必须在分配新的区间(即扩展一些块)
    • 一旦区间分配给某个对象(表、索引及簇),则该区间就不能再分配给其它的对象.
    查看表空间:
    select * from v$tablespace;

    表空间的好处

    • 用户数据与数据字典数据分离,减少竞争
    • 应用程序之间的数据分离,防止某个TableSpace脱机后对多个程序造成影响
    • 不同磁盘驱动器上存储数据,减少I/O竞争
    • 回滚段数据与用户数据分离,防止单磁盘故障造成数据永久丢失
    • 可以控制单个TableSpace脱机,提供更高的整体可用性
    • 为特定类型数据库使用保留TableSpace,可优化TableSpace的使用
    • 可以备份单独的TableSpace

    创建表空间

    官方地址:https://docs.oracle.com/en/database/oracle/oracle-database/19/admin/managing-tablespaces.html

    要创建新的表空间,首先要具有创建表空间系统权限,使用以下SQL语句

    create tablespace

    或者

    create temporary tablespace

    在创建表空间之前,必须创建一个数据库以包含它

    • 任何数据库中的主表空间都是系统表空间,它包含数据库服务器功能的基本信息,例如数据字典和系统回滚段
    • 系统表空间是在数据库创建时创建的第一个表空间
    • 它作为任何其他表空间进行管理,但需要更高的权限级别,并且在某些方面受到限制

    不能重命名或删除系统表空间,也不能使其脱机

    SYSAUS

    SYSAUX表空间作为系统表空间的辅助表空间,在创建数据库时也总是创建的

    • 它包含了各种Oracle产品和特性使用的模式,因此这些产品不需要自己的表空间
    • 至于系统表空间,SYSAUX表空间的管理需要更高的安全级别,您不能重命名或删除它

    创建表空间的步骤因操作系统而异

    第一步始终是使用操作系统创建一个目录结构,在该目录结构中分配数据文件

    在大多数操作系统中,当您创建新表空间或通过添加数据文件来更改现有表空间时,可以指定数据文件的大小和完全指定的文件名

    无论是创建新表空间还是修改现有表空间,数据库都会自动分配和格式化指定的数据文件

    UNDO表空间

    create undospace

    专门设计为包含撤消记录。这些记录是由数据库生成的记录,用于回滚或撤消对数据库的更改,以恢复、读取一致性或按回滚语句的要求

    创建和管理撤消表空间是管理撤消的主要内容

    使用

    alter tablespace

    alter database

    语句来更改表空间,前提是必须具有ALTER表空间或相应地更改数据库系统权限

    cmd plsql

    登录

    Sqlplus user/pwd [as sysdba]
    • user,用户名
    • pwd,密码

    as sysdba 对应下图的列表选项

    • show user                                  显示当前用户
    • conn 用户名/密码 [as sysdba]   用户切换
    • select * from tab                        查看用户下所有表
    • desc table                                  查看表结构
    • show all                                     查看所有68个系统变量值
    • show error                            显示错误
    • set heading off                           禁止输出列标题,默认值为ON
    • set feedback off                         禁止显示最后一行的计数反馈信息,默认值为"对6个或更多的记录,回送ON"
    • set timing on                              默认为OFF,设置查询耗时,可用来估计SQL语句的执行时间,测试性能
    • set sqlprompt "SQL> "               设置默认提示符,默认值就是"SQL> "
    • set linesize 1000                        设置屏幕显示行宽,默认100
    • set autocommit ON                    设置是否自动提交,默认为OFF
    • set pause on                              默认为OFF,设置暂停,会使屏幕显示停止,等待按下ENTER键,再显示下一页
    • set arraysize 1                           默认为15
    • set long 1000                             默认为80
    • prompt "test"                              用来向屏幕发送消息,当前指令输出 test
    • define test = "1122"                    用户自定义变量
    • undefine  test                             清除自定义变量

    accept

    accept varibale [datatype] [format format] [prompt text] [hide]

    定义变量,定制用户提示

    • vairbale 指定变量名,如果不存在则新建
    • datatype 制定变脸的数据类型 char munber date 默认为char
    • format 指定变量的格式
    • prompt text 用户输入数据之前的提示性文本
    • hide 用于隐藏用户为变量输入的值

    替换变量

    • &   如果某个变量前面有&符号,执行该sql语句时,系统会提示用户为该变量提供一个具体的值
    • && 如果需要重新使用一个变量并且不希望重新提示输入该值,那么可以使用&&替换便令
    SQL> select ename ,sal ,job,hiredate from scott.emp where sal >&salnew;
    输入 salnew 的值:  4900
    原值    1: select ename ,sal ,job,hiredate from scott.emp where sal >&salnew
    新值    1: select ename ,sal ,job,hiredate from scott.emp where sal >4900
    
    ENAME                       SAL JOB                HIREDATE
    -------------------- ---------- ------------------ --------------
    KING                       5000 PRESIDENT          17-11月-81
    ————————————————

    show命令

    • show all 查看所有系统变量的值
    • show errors 查看错误信息
    • show parameters 显示初始化参数的值
    • show release 查看数据库版本
    • show SGA 查看SGA的大小(要有权限)
    • show sqlcode 显示数据库操作之后的状态代码
    • show user 显示当前连接的用户

    save命令

    save filename [create] [append] [replace]

    在SQL*PLUS中可以执行一条或若干条sql命令,它们被存放在缓冲区中,且缓冲区中只能存放最近刚执行的sql或pl/sql ,(后进的覆盖之前的)

    如果要保存以往执行过的语句,要使用save

    get命令

    get filename

    get命令就是用来读取的,将保存后的文件读取到缓冲区中进行显示

    edit命令

    edit filename

    使用edit命令可以将缓冲区的内容复制到一个文件中 ,默认文件afiedt.buf ,当然也可以制定一个已经命了名存在的文件

    @命令

    @ filename

    用于执行存放在脚本文件中的命令:与start命令作用相同。

    spool命令

    spool filename [create] or [append] or [replace] out

    将输出结果以及语句都保存在文本文件中

    [create] or [append] or [replace] 三选一

    out 启动该功能

    Oracle用户、权限和角色

    用户管理

    创建用户(指定密码)

    create user itcast identified by password;

    由于scott普通用户没有权限创建用户,因此先登录管理员用户

    在cmd窗口中登陆上管理员用户

    SQL> conn / as sysdba

    修改密码

    alter user itcast identified by password2;

    锁定与解锁用户

    alter user itcast account lock;
    alter user itcast account unlock;

    删除用户

    drop user xx;

    权限

    授予权限

    grant 权限1,权限2,… to 用户;

    收回权限

    revoke 权限1,权限2,… from 用户;

    设置用户的空间配额

    alter user itcast quota unlimited on users;
    • quota       容量
    • unlimited 无限制
    • on users  在users这个表空间上没有限制

    create session

    • oracle中create session系统权限,是创建会话的权限。
    • create session 允许使用这个用户在服务器上创建session
    • 通俗的说,就是允许这个用户登录。
    • oracle中应该很多角色应该都包含这个系统权限。

    查询管理员拥有的权限

    select * from session_privs;

    角色

    创建角色

    create role role1;

    给角色授予权限

    grant create session, create table, create view to role1;

    给角色收回权限

    revoke create session from role1;

    删除角色

    drop role role1;

    Oracle建表

    • Oracle表是Oracle数据库的核心,是存储数据的逻辑基础
    • Oracle表是一个二维的数据结构,有列字段和对应列的数据构成一个数据存储的结构
    • 可以简单看成行和列的二维表,列代表着Oracle字段(column),行代表着一行数据(即一条数据记录)
    数据类型 类型解释

    VARCHAR2(length)

    字符串类型:存储可变的长度的字符串,length:是字符串的最大长度,默认不填的时候是1,最大长度不超过4000。

    CHAR(length)

    字符串类型:存储固定长度的字符串,length:字符串的固定长度大小,默认是1,最大长度不超过2000。

    NUMBER(a,b)

    数值类型:存储数值类型,可以存整数,也可以存浮点型。a代表数值的最大位数:包含小数位和小数点,b代表小数的位数。例子:

    number(6,2),输入123.12345,实际存入:123.12 。

    number(4,2),输入12312.345,实际春如:提示不能存入,超过存储的指定的精度。

    DATA

    时间类型:存储的是日期和时间,包括年、月、日、时、分、秒。例子:

    内置函数sysdate获取的就是DATA类型

    TIMESTAMP

    时间类型:存储的不仅是日期和时间,还包含了时区。例子:

    内置函数systimestamp获取的就是timestamp类型

    CLOB

    大字段类型:存储的是大的文本,比如:非结构化的txt文本,字段大于4000长度的字符串。

    BLOB

    二进制类型:存储的是二进制对象,比如图片、视频、声音等转换过来的二进制对象

    建表示例

    -- Create table
    create table STUDENT.stuinfo
    (
      stuid      varchar2(11) not null,--学号:'S'+班号(7位数)+学生序号(3位数)(1)
      stuname    varchar2(50) not null,--学生姓名
      sex        char(1) not null,--性别
      age        number(2) not null,--年龄
      classno    varchar2(7) not null,--班号:'C'+年级(4位数)+班级序号(2位数)
      stuaddress varchar2(100) default '地址未录入',--地址 (2)
      grade      char(4) not null,--年级
      enroldate  date,--入学时间
      idnumber   varchar2(18) default '身份证未采集' not null--身份证
    )
    tablespace USERS --(3)
      storage
      (
        initial 64K
        minextents 1
        maxextents unlimited
      );
    -- Add comments to the table 
    comment on table STUDENT.stuinfo --(4)
      is '学生信息表';
    -- Add comments to the columns 
    comment on column STUDENT.stuinfo.stuid -- (5)
      is '学号';
    comment on column STUDENT.stuinfo.stuname
      is '学生姓名';
    comment on column STUDENT.stuinfo.sex
      is '学生性别';
    comment on column STUDENT.stuinfo.age
      is '学生年龄';
    comment on column STUDENT.stuinfo.classno
      is '学生班级号';
    comment on column STUDENT.stuinfo.stuaddress
      is '学生住址';
    comment on column STUDENT.stuinfo.grade
      is '年级';
    comment on column STUDENT.stuinfo.enroldate
      is '入学时间';
    comment on column STUDENT.stuinfo.idnumber
      is '身份证号';

    约束有六种:https://www.cnblogs.com/YC-L/p/14597958.html

    添加约束

    -- Create/Recreate primary, unique and foreign key constraints 
    alter table STUDENT.STUINFO
      add constraint pk_stuinfo_stuid primary key (STUID);
      --把stuid当做主键,主键字段的数据必须是唯一性的(学号是唯一的)
       
    -- Create/Recreate check constraints 
    alter table STUDENT.STUINFO
      add constraint ch_stuinfo_age
      check (age>0 and age<=50);--给字段年龄age添加约束,学生的年龄只能0-50岁之内的
       
    alter table STUDENT.STUINFO
      add constraint ch_stuinfo_sex
      check (sex='1' or sex='2');
       
    alter table STUDENT.STUINFO
      add constraint ch_stuinfo_GRADE
      check (grade>='1900' and grade<='2999');
    论读书
    睁开眼,书在面前
    闭上眼,书在心里
  • 相关阅读:
    Redis到底该如何利用?
    AutoMapper搬运工之自定义类型转换
    AutoMapper搬运工之初探AutoMapper
    【ELK】docker-compose搭建ELK单机环境
    [flowable工作流引擎]基本概念及术语
    shell遍历文件夹读取文件夹下的文件
    vector类的简单实现
    string类的实现
    接口安全认证
    C# lock private VS private static
  • 原文地址:https://www.cnblogs.com/YC-L/p/14593631.html
Copyright © 2011-2022 走看看