详解Oracle 12c九项数据库对象管理操作
发布时间:2020-12-12 13:43:51 所属栏目:百科 来源:网络整理
导读:简介 1.用户管理 2.用户授权 3.事务管理 4.索引 5.视图以及物化视图 6.序列 7.导入导出数据 8.同义词 9.分区表 实验环境 系统环境:centos7.4 Oracle服务IP地址:192.168.100.99 光盘挂载目录:/mnt/sr0 安装相关目录:/opt 命令步骤 一、用户管理 1、登录Or
简介
实验环境系统环境:centos7.4 命令步骤一、用户管理1、登录Oracle数据库[[email?protected] ~]$ lsnrctl start #启动监听 [[email?protected] ~]$ sqlplus / as sysdba SQL> startup #启动数据库 ORACLE 例程已经启动。 Total System Global Area 1593835520 bytes Fixed Size 8793256 bytes Variable Size 1023411032 bytes Database Buffers 553648128 bytes Redo Buffers 7983104 bytes 数据库装载完毕。 数据库已经打开。 SQL> show con_name CON_NAME ------------------------------ CDB$ROOT #默认数据库容器,CDB模式下 2、创建表空间SQL> create tablespace supermarket #指定表空间名称 2 datafile ‘/opt/app/oracle/oradata/supermarket01.dbf‘ #指定数据文件路径 3 size 200M #指定表空间大小 4 autoextend on #设置表空间自动扩展 5 next 50M maxsize 20480M #每次扩展50M,最大扩展20480M 6 extent management local; #表空间的区管理为本地管理,为的是减少分配extent的时候产生的内部递归sql,提高数据库分配空间的效率. 表空间已创建。 3、创建用户SQL> conn #使用tom用户进行登录 请输入用户名: c##tom 输入口令: 已连接。 SQL> create user c##tom #创建用户"Tom" 2 identified by 123 #设置用户密码"123" 3 default tablespace supermarket #指定默认表空间"supermarket" 4 temporary tablespace temp #指定默认临时表空间"temp" 5 quota unlimited on supermarket #针对"supermarket"表空间不做磁盘配额限制 6 password expire; #设置用户每次登录,强行修改密码,此参数这里不做演示 表空间已创建。 4、更改用户密码SQL> alter user c##tom identified by 123123; #将用户"tom"密码更改为"123123" 用户已更改。 5、删除用户SQL> drop user c##tom cascade; 二、用户授权1、授予权限SQL> conn #使用系统dba身份用户登录 请输入用户名: sys 输入口令: 已连接。 SQL> grant connect,resource to c##tom; #connect为连接权限;resource为管理数据库权限 授权成功。 SQL> quit #退出数据库 2、登录数据库[[email?protected] ~]$ sqlplus c##tom/123123 as sysdba #连接数据库 SQL*Plus: Release 12.2.0.1.0 Production on 星期三 10月 10 18:56:43 2018 Copyright (c) 1982,2016,Oracle. All rights reserved. 连接到: Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production 3、撤销权限revoke connect,resource from c##tom; #通过sysdba身份登录对用户进行撤销,这里不做演示 三、事务管理1、创建表结构SQL> create table product 2 ( 3 id number(4) constraint pk_id primary key,4 name varchar2(10),5 price number(10,2),6 createtime date,7 description varchar2(50) 8 ); 表已创建。 2、添加数据SQL> insert into product values (1,‘Olay‘,555,to_date(‘2018-10-10‘,‘yyyy-mm-dd‘),‘good‘); 已创建 1 行。 3、提交事务SQL> commit; #注意,oracle默认是手动提交事务,对数据编辑完之后,必须使用commit进行提交 提交完成。 SQL> rollback; #注意,事务回滚使用此命令,这里不再做演示 4、查看数据SQL> select * from product; ID NAME PRICE CREATETIME ---------- ------------------------------ ---------- ------------ DESCRIPTION -------------------------------------------------------------------------------- 1 Olay 555 10-10月-18 good 5、设置自动提交SQL> set autocommit on; 6、添加数据SQL> insert into product values (2,‘Kodak‘,77777,to_date(‘2018-10-09‘,‘very good‘); 已创建 1 行。 提交完成。 #此时多出来一个提示,提交完成 四、索引1、B数索引SQL> create index index_product on product(price) ; #通常情况下,使用日期,年龄,分数,价格,具有区间属性的作为B数索引 索引已创建。 2、唯一索引SQL> create unique index uni_index_product on product(id); 索引已创建。 3、反向索引SQL> create index rev_index_product on product(createtime) reverse; 索引已创建。 4、位图索引SQL> create bitmap index bt_index_product on product(description); 索引已创建。 5、其他索引SQL> create index up_index_product on product(upper(name)); #大写函数索引 索引已创建。 6、查看索引…… SQL> select index_name,index_type,table_name,tablespace_name from user_indexes; INDEX_NAME -------------------------------------------------------------------------------- INDEX_TYPE -------------------------------------------------------------------------------- TABLE_NAME -------------------------------------------------------------------------------- TABLESPACE_NAME -------------------------------------------------------------------------------- WRI$_ADV_DEF_PARAMETERS_PK NORMAL WRI$_ADV_DEF_PARAMETERS SYSAUX 已选择 1647 行。 #目前行数太多,可以自己测试查看 7、重建索引SQL> alter index up_index_product rebuild; 索引已更改。 SQL> alter index up_index_product rebuild tablespace supermarket; 索引已更改。 8、合并索引碎片SQL> alter index up_index_product coalesce; 索引已更改。 9、删除索引SQL> drop index up_index_product; 索引已删除。 五、视图1、普通视图1).创建视图SQL> create view view_product as select * from product; 视图已创建。 2).查看视图SQL> select * from view_product; ID NAME PRICE CREATETIME ---------- ------------------------------ ---------- ------------ DESCRIPTION -------------------------------------------------------------------------------- 1 Olay 555 10-10月-18 good 2 Kodak 77777 09-10月-18 very good 3).删除视图SQL> drop view view_product; 视图已删除。 2、物化视图1).切换dba身份用户SQL> conn sys/123123 as sysdba 已连接。 SQL> show user; #查看当前登录用户 USER 为 "SYS" 2).授权SQL> grant create materialized view to c##tom; #授予创建物化视图权限 授权成功。 SQL> grant query rewrite to c##tom; #授予查询、重写权限 授权成功。 SQL> grant create any table to c##tom; #授予创建任何表权限 授权成功。 SQL> grant select any table to c##tom; #授予查询任何表权限 授权成功。 3).创建物化视图日志SQL> conn #连接tom用户 请输入用户名: c##tom 输入口令: 已连接。 SQL> create materialized view log on product with rowid; 实体化视图日志已创建。 4).创建物化视图SQL> create materialized view mtrlview_pro 2 build immediate #创建物化视图是否立即生成数据,immediate代表true 3 refresh fast #设置与基表进行同步更新,如果不添加此参数,相当于快照功能 4 on commit #开启提交功能 5 enable query rewrite #开启查询、重写功能 6 as select * from product; 实体化视图已创建 5).删除视图SQL> drop materialized view mtrlview_pro; 六、序列1、创建序列SQL> create sequence toy_seq 2 start with 3 #指定初始值 3 increment by 1 #指定增量 4 maxvalue 2000 #指定最大值 5 nocycle #指定工作模式为非循环 6 cache 30; #指定缓存区30个数值,空闲等待 序列已创建。 2、添加数据SQL> insert into product values (toy_seq.nextval,‘Sony‘,999999,‘ok‘); 已创建 1 行。 提交完成。 3、查看序列SQL> select toy_seq.currval from dual; CURRVAL ---------- 3 SQL> select sequence_name,increment_by,cache_size from user_sequences; SEQUENCE_NAME -------------------------------------------------------------------------------- INCREMENT_BY CACHE_SIZE ------------ ---------- TOY_SEQ 1 30 4、更改序列SQL> alter sequence toy_seq maxvalue 5000 cycle; 5、删除序列SQL> drop sequence toy_seq; 序列已删除。 七、导入导出测试数据[[email?protected] ~]$ sqlplus / as sysdba 1、导入数据1).创建用户SQL> create user c##scott identified by scott123 2 default tablespace users #注意此表空间为系统自带的表空间 3 temporary tablespace temp 4 quota unlimited on users; 用户已创建。 #导入数据时,sql语句绑定的是c##scott用户,所以必须创建 2).授予权限SQL> grant connect,resource,dba to c##scott; #授予连接、管理数据库权限以及dba权限 授权成功。 3).导入数据文件SQL> ho ls /home/oracle #oracle软件可以兼容Linux 使用ho命令跟上liunx命令查看家目录文件 database flash-player-npapi-26.0.0.131-release.x86_64.rpm test.sql SQL> conn c##scott/scott123 #连接"scott"用户 已连接。 SQL> @/home/oracle/test.sql #导入数据 SQL> select * from tab; #查看相关表信息 TNAME -------------------------------------------------------------------------------- TABTYPE CLUSTERID --------------------- ---------- BONUS TABLE DEPT TABLE EMP TABLE TNAME -------------------------------------------------------------------------------- TABTYPE CLUSTERID --------------------- ---------- SALGRADE TABLE 2、导出数据[[email?protected] ~]$ exp c##tom/123123 file=/home/oracle/pro.sql #指定用户进行导出数据 八、同义词1、私有同义词管理1).创建私有同义词SQL> show user; #查看当前用户 USER 为 "C##SCOTT" SQL> create synonym pr_dept for dept; #为"product"表设置了一个别名"pr_product" 同义词已创建。 2).调用私有同义词SQL> select * from pr_dept; #注意,此时定义的为私有同义词,只是对当前用户有效,切换另一个用户无法识别 DEPTNO DNAME ---------- ------------------------------------------ LOC --------------------------------------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO DEPTNO DNAME ---------- ------------------------------------------ LOC --------------------------------------- 40 OPERATIONS BOSTON #### 3).删除私有同义词 SQL> drop synonym pr_dept; 同义词已删除。 2、公有同义词管理1).授予用户权限SQL> conn system/123 as sysdba #管理员登录 已连接。 SQL> grant create public synonym to c##scott; 授权成功。 2).创建公有同义词SQL> conn c##scott/scott123 #连接普通用户 已连接。 SQL> create public synonym public_sy_dept for dept; 同义词已创建。 3).查看公有同义词SQL> select * from public_sy_dept; #注意,切换其他用户可以进行访问,创建的为公有同义词 DEPTNO DNAME ---------- ------------------------------------------ LOC --------------------------------------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO DEPTNO DNAME ---------- ------------------------------------------ LOC --------------------------------------- 40 OPERATIONS BOSTON 九、分区表1、建立若干表空间SQL> show user; #当前用户为系统管理员 USER 为 "SYS" SQL> create tablespace tmp01 #注意建立4个表空间,依次为tmp01、tmp02、tmp03、tmp04 2 datafile ‘/opt/app/oracle/oradata/tmp01.dbf‘ 3 size 100M; 表空间已创建。 2、创建数据表SQL> create table sales #创建表 2 ( 3 sales_id number(4),4 product_id varchar2(5),5 sales_date date 6 ) 7 partition by range (sales_date) #指定时间字段进行分区 8 ( 9 partition p1 values less than (to_date(‘2018-04-03‘,‘yyyy-mm-dd‘)) tablespace tmp01,#p1指定名称;less than小于指定的时间;tablespace指定表空间 10 partition p2 values less than (to_date(‘2018-05-03‘,‘yyyy-mm-dd‘)) tablespace tmp02,11 partition p3 values less than (to_date(‘2018-06-03‘,‘yyyy-mm-dd‘)) tablespace tmp03,12 partition p4 values less than (maxvalue) tablespace tmp04 13 ); 表已创建。 3、插入测试数据SQL> insert into sales values (1,‘ttt1‘,to_date(‘2018-05-23‘,‘yyyy-mm-dd‘)); 已创建 1 行。 4、查询分区SQL> select * from sales partition(P3); #按照时间分散存储,已经存储到p3中 SALES_ID PRODUCT_ID SALES_DATE ---------- --------------- ------------ 1 ttt1 23-5月 -18 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |