oracle12c使用笔记

本文详细介绍了数据库的四大语言:DCL用于连接和用户管理,DDL用于创建和管理数据库对象如表、约束等,DML涉及数据的增删改操作,DQL则关注查询语言,包括各种查询和性能优化技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. DCL(数据库控制语言)

(1)连接
--断开数据库连接
disconn

请求连接(输入用户密码后就能连接上数据库)
--conn

--启动数据库(数据库启动后才能做相关操作)
startup;

--只启动实例不挂载数据库
startup nomount;

--关闭数据库
shutdown;

在这里插入图片描述

(2)用户管理

根据安装数据库的类型不同,创建用户也有些许差异,执行下面语句,确认数据库的类型是否CDB
select name,cdb from v$database;

如果CDB的值为NO,表示创建的数据库类型是非容器数据库,创建用户不需要在用户名前加上C##,正常创建即可

--创建用户(创建用户必须要有创建用户的权限)
create user song identified by 123456;
或者
create user song identified by 123456 default tablespace users temporary tablespace temp;

在这里插入图片描述

如果CDB的值为YES,表示创建的数据库类型是容器数据库,创建用户需要在用户名前加上C##才行,不加C##会报错

--创建用户(创建用户必须要有创建用户的权限)
create user C##song identified by 123456;
或者
create user C##song identified by 123456 default tablespace users temporary tablespace temp;

在这里插入图片描述

修改用户密码
alter user c##song identified by 123456;

给用户授权
grant create user,drop user,alter user,create any view,connect,resource,dba,create session,create any sequence to  C##song;

撤销权限
revoke create user,drop user,alter user,create any view,connect,resource,dba,create session,create any sequence from  C##song;

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

在这里插入图片描述

2. DDL(数据库定义语言)

(1)表
--创建表
create table tb_student(
stu_num char(5) not null,
stu_name varchar2(50) not null,
stu_sex char(2) not null,
stu_age number(2),
stu_tel char(11)
);

--修改表名
alter table tb_student rename to tb_student2;

--删除表
drop table tb_student;

--增加列
alter table tb_student add stu_email varchar2(30);

--修改列
修改字段长度
alter table tb_student modify stu_email varchar2(50);
修改字段类型
alter table tb_student modify stu_email char(30);

--删除列
alter table tb_student drop column stu_email;

(2)约束
--创建表时添加主键约束
create table tb_student(
stu_num char(5) not null primary key,
stu_name varchar2(50) not null,
stu_sex char(2) not null,
stu_age number(2),
stu_tel char(11)
);
--或者是这样都可以
create table tb_student(
stu_num char(5) not null,
stu_name varchar2(50) not null,
stu_sex char(2) not null,
stu_age number(2),
stu_tel char(11),
primary key(stu_num)
);

--创建表以后再添加主键约束
alter table tb_student add constraints pk_stu_num primary key(stu_num);

--创建表时创建联合主键
create table tb_grade(
course_id char(3),
course_name varchar2(50),
stu_num char(5),
stu_name varchar2(50),
score number(3),
primary key(course_id,stu_num)
);
--或者是先创建表再创建联合主键
create table tb_grade(
course_id char(3),
course_name varchar2(50),
stu_num char(5),
stu_name varchar2(50),
score number(3)
);
alter table tb_grade add constraints pk_course_and_num primary key(course_id,stu_num);

--创建表时添加唯一约束
create table tb_student(
stu_num char(5) not null,
stu_name varchar2(50) not null,
stu_sex char(2) not null,
stu_age number(2),
stu_tel char(11),
constraint uq_stu_tel UNIQUE(stu_tel)
);

--创建表后添加唯一约束
alter table tb_student add constraints uq_stu_tel UNIQUE(stu_tel);

--删除唯一约束
alter table tb_student drop constraints uq_stu_tel;

--创建表后添加非空约束
alter table tb_student modify stu_name NOT NULL;

--取消非空约束
alter table tb_student modify stu_name  NULL;
(3)索引
create index 索引名 on 表名(字段名)

--创建普通索引
create index index_stu_num on tb_student(stu_num); 

--创建唯一索引
注意:一般主键会自带唯一索引
create unique index index_stu_num on tb_student(stu_num); 

--创建联合索引
create index index_stu_num_tel on tb_student(stu_num,stu_tel);

--删除索引
drop index 索引名
drop index dex_stu_num;
(4)序列
序列主要是用于自增主键的,相当于MySQL里面的auto_increment(可以这样理解)
create sequence 序列名

--创建序列,默认无参数
create sequence  mySequence;

--创建序列并定义起始值、步长、最大值、缓存(这里起始值为1,步长为1,最大值为10000,具体根据场景需要设置)
create sequence 序列名 start with 起始值 increment by 步长  minvalue 最小值 maxvalue 最大值 cache 缓存值  cycle 循环

create sequence mySequence start with 1 increment by 1;
create sequence mySequence start with 1 increment by 1 maxvalue 10000000;

--删除序列
drop sequence mySequence;
(5)视图
视图是一个虚表,它需要依赖表存在(不能独立存在),修改视图中的数据,它的基表的数据也会发生同样变化,修改基表的数据,视图的数据也会发生变化(除非数据不在视图中)
--创建简单视图
create view view_student as select stu_num,stu_name,stu_age from tb_student;

--覆盖原有视图(没有视图就创建,已有视图就覆盖)
create or replace view view_student as select stu_num,stu_name,stu_age from tb_student;

--创建只读视图
create or replace view view_student as select stu_num,stu_name,stu_age from tb_student with read only;

--创建复杂视图(语句中可能包含函数,分组,一个或多个表)
create or replace view emp_dep as select d.DEPARTMENT_ID as PARTMENT_ID,avg(e.SALARY) as salary_avg from EMPLOYEES e,DEPARTMENTS d where e.DEPARTMENT_ID = d.DEPARTMENT_ID group by d.DEPARTMENT_ID;

--查询视图中数据
select stu_num,stu_name,stu_age from view_student;

--更新视图中数据
update view_student set stu_name='张三' where stu_num = '00001';

--删除视图中数据
delete from view_student where stu_num = '00001';

--删除试图
drop view view_student;

注意:当视图定义中包含组函数、group by 子句、distinct、rownum其中之一时,不能使用delete

3. DML(数据库操作语言)

--向表中添加数据,这种方式可以指定插入哪些字段
insert into tb_student(stu_num,stu_name,stu_sex,stu_age,stu_tel) values('00001','张三','01'25,'13612345678');

--或者是,这种方式需要全字段插入
insert into tb_student values('00002','Lily','02'24,'13812345678');

--查询另一张表的结果插入到目标表中,两张表字段名称与类型匹配即可
insert into tb_student select * from tb_student2;

--在创建表时直接从其他表中导入,当然*也可以指定字段
create table tb_student3 as select * from tb_student;

--修改表中数据
update tb_student set stu_tel='13687654321' where stu_num='00001';

--删除数据
delete from tb_student where stu_num='00001';

--清空表数据
delete from tb_student2;     //删除后可以恢复数据
truncate table tb_student3;   //删除后不可以恢复数据

4. DQL(数据库查询语言)

(1)业务查询
--简单查询
查询所有列
select * from tb_student;
查询指定列
select stu_num,stu_name from tb_student;

--过滤查询
单个条件查询
select stu_num,stu_name from tb_student where stu_num = '00005';
多个条件查询
select stu_num,stu_name from tb_student where stu_num = '00005' and stu_name = '张三';
select stu_num,stu_name from tb_student where stu_num = '00005' or stu_name = '张三';

--分组查询
只分组不过滤
select stu_sex,count(*) from tb_student2 group by stu_sex;
先过滤再分组
select stu_sex,count(*) from tb_student2 where stu_age > 10 group by stu_sex;
先分组后过滤
select stu_sex,count(*) as count1 from tb_student2 group by stu_sex having stu_sex='01';

--排序查询
升序(默认是升序排列)
select stu_num,stu_name,stu_age,stu_tel from tb_student2 order by stu_age;
降序排列
select stu_num,stu_name,stu_age,stu_tel from tb_student2 order by stu_age desc;

--单个字段去重查询
select distinct stu_num from tb_student2;

--整个表的数据去重查询,如果stu_num字段只有普通索引,可以利用stu_num字段去重,当然*可以是指定的字段
select * from tb_student group by stu_num;
select stu_num,stu_name,stu_sex,stu_age,stu_tel from tb_student group by stu_num;

联表查询
内连接

左外连接

右外连接

全外连接

(2)系统查询
--查询当前用户有哪些表
select * from all_tables where owner='C##JAMY';

--查看表结构
desc tb_student2;

--查看所有用户
select * from all_users;

--查看所有DBA用户
select * from dba_users;

--查看当前用户
select * from user_users;

--设置当前用户密码永不过期
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;

--查看用户或角色系统权限(直接赋值给用户或角色的系统权限):
select * from dba_sys_privs;

--查看当前用户所拥有的权限
select * from user_sys_privs; 

--只能查看登陆用户拥有的角色所包含的权限
select * from role_sys_privs;

--查看dba用户对象权限
select * from dba_tab_privs;

--查看所有用户对象权限
select * from all_tab_privs;

--查看当前用户对象权限
select * from user_tab_privs;

--查看用户或角色所拥有的角色
select * from dba_role_privs;

--查看当前用户或角色所拥有的角色
select * from user_role_privs;

--查看哪些用户有sysdba或sysoper系统权限(查询时需要相应权限)
select * from V$PWFILE_USERS;

--查询当前会话数
select count(*) from v$session;

--查询指定用户会话数
select count(*) from v$session where username='C##JAMY';

--查询所有会话
select * from v$session;

--查询指定用户的会话
select * from v$session where username='C##JAMY';

--查看被锁的表       
select * from v$locked_object a, dba_objects b where b.object_id = a.object_id;

-- 查询oracle的最大连接数:
select * from v$parameter where name='processes';

--当前的连接数
select count(*) from v$process; 

--数据库允许的最大连接数
select value from v$parameter where name = 'processes' ;

--日志文件位置
select * from V$diag_Info;
(3)分页查询
方式一(效率低):
select temp.LAST_NAME,temp.EMPLOYEE_ID,temp.SALARY 
from (select rownum row_id,LAST_NAME,EMPLOYEE_ID,SALARY 
      from (select LAST_NAME,EMPLOYEE_ID,SALARY,rownum 
			from EMPLOYEES order by SALARY desc)) temp 
where temp.row_id > 0 and temp.row_id <10;

方式二(效率高):
select temp.LAST_NAME,temp.EMPLOYEE_ID,temp.SALARY 
from (select rownum row_id,LAST_NAME,EMPLOYEE_ID,SALARY 
      from (select LAST_NAME,EMPLOYEE_ID,SALARY,rownum 
			from EMPLOYEES order by SALARY desc) where rownum < 10) temp 
where temp.row_id > 0;
(4)查看表锁的原因
select l.session_id sid,
       s.serial#,
       l.locked_mode,
       l.oracle_username,
       s.user#,
       l.os_user_name,
       s.machine,
       s.terminal,
       a.sql_text,
       a.action from v$sqlarea a, v$session s, v$locked_object l
       where l.session_id = s.sid and s.prev_sql_addr = a.address
       order by sid,s.serial#;
(5)查询低效的SQL
SELECT EXECUTIONS, DISK_READS, BUFFER_GETS,
   ROUND ((BUFFER_GETS-DISK_READS)/BUFFER_GETS, 2) Hit_radio,
   ROUND (DISK_READS/EXECUTIONS, 2) Reads_per_run,
   SQL_TEXT
FROM   V$SQLAREA
WHERE  EXECUTIONS>0
AND     BUFFER_GETS > 0 
AND (BUFFER_GETS-DISK_READS)/BUFFER_GETS < 0.8 
ORDER BY 4 DESC;
(6)查看表空间大小及使用情况
SELECT a.tablespace_name "表空间名", 
total "表空间大小", 
free "表空间剩余大小", 
(total - free) "表空间使用大小", 
total / (1024 * 1024 * 1024) "表空间大小(G)", 
free / (1024 * 1024 * 1024) "表空间剩余大小(G)", 
(total - free) / (1024 * 1024 * 1024) "表空间使用大小(G)", 
round((total - free) / total, 4) * 100 "使用率 %" 
FROM (SELECT tablespace_name, SUM(bytes) free 
FROM dba_free_space 
GROUP BY tablespace_name) a, 
(SELECT tablespace_name, SUM(bytes) total 
FROM dba_data_files 
GROUP BY tablespace_name) b 
WHERE a.tablespace_name = b.tablespace_name;
(7)查看各用户的各种资源占用,可以运行下面的SQL
select se.SID, ses.username, ses.osuser, n.NAME, se.VALUE
  from v$statname n, v$sesstat se, v$session ses
  where n.statistic# = se.statistic# and
        se.sid = ses.sid and
        ses.username is not null and
        n.name in ('CPU used by this session',
                   'db block gets',
                   'consistent gets',
                   'physical reads',
                   'free buffer requested',
                   'table scans (long tables)',
                   'table scan rows gotten',
                   'sorts (memory)',
                   'sorts (disk)',
                   'sorts (rows)', 
                   'session uga memory max' ,
                   'session pga memory max')
  order by sid, n.statistic#;
(8)列出使用频率最高的5个查询:
select sql_text,executions
from (select sql_text,executions,
   rank() over
    (order by executions desc) exec_rank
   from v$sql)
where exec_rank <=5;
(9)消耗磁盘读取最多的sql top5:
select disk_reads,sql_text
from (select sql_text,disk_reads,
   dense_rank() over
     (order by disk_reads desc) disk_reads_rank
   from v$sql)
where disk_reads_rank <=5;
(10)找出需要大量缓冲读取(逻辑读)操作的查询:
select buffer_gets,sql_text
from (select sql_text,buffer_gets,
   dense_rank() over
     (order by buffer_gets desc) buffer_gets_rank
   from v$sql)
where buffer_gets_rank<=5;
(一)客户端组件和服务器端组件 2 (二)Oracle Database 的体系架构 2 1. 什么是数据库?什么是实例? 3 2. 存储结构 3 数据文件(data file) 4 联机日志文件(online redo log file) 4 控制文件(control file) 5 归档模式:冷备份,离线备份,热备份,联机备份 6 Spfile:二进制,9i 之后 Pfile:文本,9i 之前 6 可以将 spfile 转换为 pfile 6 注意:scope 的取值有三个:memory、spfile、both 7 一个表空间(tablespace)由一组段组成 8 Tablespaces(表空间) 8 system sysaux temp undo 8 Segments (段) 8 extents (区) 8 Data Block (数据块) 8 3. 进程结构 9 日志写进程(LGWR) 检查点进程(CKPT) 9 归档进程(ARCn) 恢复器进程(RECO) 9 2日志写进程(LGWR) 10 3检查点进程(CKPT) 10 6归档进程(ARCn) 10 7恢复器进程(RECO) 11 4. 内存结构 11 1共享池:shared pool 12 3重做日志缓冲区:log buffer 12 (三)自动内存管理和自动共享内存管理 13 (四)管理方案对象 13 (五)数据字典 15 (一)安装 Oracle Linux 7.3 64 位操作系统 17 (二)安装 Oracle Database 12cR2 19 (三)使用 DBCA 创建 Oracle 数据库 21 (四)验证 Oracle Database 12cR2 环境 25 (五)使用 oracle-database-server-12cR2-preinstall 包 25 三、管理数据库实例 27 (一)管理工具 27 (二)初始化参数 27 (三)数据库启动的过程 29 (四)数据库的关闭 29 四、配置 Oracle 的网络环境 31 (一)连接建立的过程 31 (二)使用 lsnrctl 命令 31 (三)如何配置监听器 33 (四)注册数据库的服务 34 (五)建立连接的方法 36 (六)共享服务器模式 38 (七)分布式数据库基础 40 五、管理用户和权限 42 (一)用户 42 (二)权限 46 (三)角色 51 (四)概要文件:Profile 54 六、管理数据库存储结构 57 (一)存储结构 57 (二)数据块的结构 57 (三)表空间和数据文件 57 (四)什么是自动存储管理 58 七、数据的并发处理 60 (一)锁定的机制 60 (三)锁的队列 60 (四)死锁 62 (五)手动加锁 64 (方式一)lock 语句 64 八、管理还原数据 65 (一)什么是还原数据? 65 (二)还原数据的作用 66 (三)还原数据的工作原理 66 (四)还原数据与重做数据 67 (五)管理还原数据 67 (六)还原保留期和确保还原保留期 67 九、数据库审计 68 (一)什么是数据库审计 68 (二)审计的参数设置 69 (三)强制审计 69 (四)标准审计 69 (五)基于值的审计 71 (六)细粒度审计(FGA) 71 (七)DBA 审计 73 (八)12c 审计的新特性 73 十、移动数据 76 (一)移动数据的整体架构 76 (二)目录对象 76 (三)使用 SQL*Loader 77 (四)数据泵 78 (五)外部表 80 十一、性能管理基础 82 (一)性能监视 82 (二)性能监视 82 (三)管理内存组件 83 (四)使用内存指导 83 (五)使用动态性能视图 84 (六)故障排除和优化视图 85 (七)无效和不可用对象 85 =======第二篇:备份与恢复======= 86 一、备份和恢复的基本概念 86 (一)衡量数据库可恢复性的两个指标 86 (二)数据库故障的类型 86 (三)配置数据库的可恢复性 88 (四)归档日志文件 88 (五)启用 ARCHIVELOG(归档)模式 89 (六)Oracle 数据库备份的解决方案 89 二、闪回 90 (一)什么是闪回 Flashback? 90 (五)闪回查询:Flashback Query 91 (六)闪回版本查询:Flashback Version Query 92 (七)闪回表:Flashback Table 93 (八)闪回数据库:Flashback Database 94 (九)闪回删除:Flashback Drop 95 (十)闪回事务查询:Flashback Transaction Query 96 (十一)闪回数据归档:Flashback Data Archive 98 三、用户管理的备份 101 (一)用户管理的备份简介 101 (二)第一个手工备份和恢复 102 (三)冷备份的脚本 103 (四)热备份的脚本:PLSQL 程序 103 四、用户管理的恢复 105 (一)归档模式下的完全 105 (二)非归档模式下的恢复 7 (三)不完全恢复 8 五、RMAN 备份与恢复基础 11 (一)备份与恢复基本术语 11 (二)RMAN 基本架构和命令 12 六、RMAN 的备份 13 (一)RMAN 脚本基础 13 (二)RMAN 的冷备份 13 (三)RMAN 的热备份 14 (四)增量备份 14 (五)镜像拷贝 14 (六)控制文件和归档文件的备份 15 七、RMAN 的恢复 15 (二)归档模式下的完全恢复 16 (二)非归档模式下的完全恢复 21 (三)RMAN 的不完全恢复 22 (四)RMAN 恢复的其他几个案例 23 八、RMAN 的高级设置 27 (一)RMAN 的参数设置 27 (二)什么是目录数据库? 28 (三)创建目录数据库 29
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

下雨天的太阳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值