oracle 学习笔记
2021学年Oracle深度学习笔记ORACLE审计
27.Oracle深度学习笔记——ORACLE审计审计(Audit)用于监视用户所执行的数据库操作,并且Oracle会将审计跟踪结果存放到OS文件(默认位置为$ ORACLE_BASE/admin/$ORACLE_SID/adump/)或数据库(存储在system 表空间中的SYS.AUD$表中不管是否打开数据库的审计功能,用管理员权限连接Instance;启动数据库;关闭数据库都会被记录。
1.相关参数:audit_sys_operations12C默认TRUE当设置为true时,所有sys用户(包括以sysdba,sysoper身份登录的用户)的操作都会被记录,audit trail不会写在aud$表中,这个很好理解,如果数据库还未启动aud$不可用,那么像conn /as sysdba这样的连接信息,只能记录在其它地方。
如果是windows平台,audti trail会记录在windows的事件管理中,如果是linux/unix平台则会记录在audit_file_dest参数指定的文件中。
audit_trail12C默认DBDB:将audit trail 记录在数据库的审计相关表中,如aud$,审计的结果只有连接信息;DB,Extended:这样审计结果里面除了连接信息还包含了当时执行的具体语句;OS:将audit trail 记录在操作系统文件中,文件名由audit_file_dest参数指定;None:不做审计;2.审计级别开启审计功能后,可在三个级别对数据库进行审计:Statement(语句)、Privilege(权限)、object(对象)。
Statement按语句审计,如audit table 会审计数据库中所有的create table,drop table,truncate table语句Privilege按权限来审计,当用户使用了该权限则被审计,如执行grant select any table to a,当执行了audit select any table语句后,当用户 a 访问了用户b的表时(如select * fromb.t)会用到select any table权限,故会被审计。
oracle 笔记
oracle 笔记Oracle是一种关系数据库管理系统,由Oracle Corporation开发。
以下是关于Oracle的一些笔记:1. 数据库架构:Oracle数据库有两个主要的架构:逻辑架构和物理架构。
逻辑架构包括了数据库对象(表、索引、视图等)以及用户和角色的定义。
物理架构指的是数据在磁盘上的存储方式。
2. 数据库对象:Oracle数据库中的主要对象包括表、索引、视图、触发器、存储过程等。
表是最基本的对象,用于存储数据。
索引用于加快表的查询速度。
视图是一种虚拟表,通过查询一个或多个表返回结果。
触发器是一种在表上定义的操作,当满足某些条件时触发。
存储过程是一段可重复使用的程序代码,用于完成特定的任务。
3. SQL语言:Oracle数据库使用SQL(Structured Query Language)进行数据库操作。
SQL语言包括数据查询语句(SELECT)、数据操作语句(INSERT、UPDATE、DELETE)以及数据定义语句(CREATE、ALTER、DROP)等。
4. 数据库管理:Oracle提供了一套完整的数据库管理工具,包括创建数据库、备份和恢复数据库、监控数据库性能等。
其中,Oracle Enterprise Manager是一个图形化界面的管理工具,可以通过它来管理和监控整个数据库系统。
5. 数据完整性:Oracle数据库通过约束条件来确保数据的完整性。
主键、外键、唯一约束、非空约束等都可以用于限制数据的输入。
此外,还可以使用触发器和存储过程来定义自定义的数据完整性规则。
6. 事务管理:Oracle数据库使用ACID(原子性、一致性、隔离性、持久性)模型来管理事务。
事务是一系列数据库操作的逻辑执行单元,要么全部执行成功,要么全部回滚。
这些只是Oracle数据库的一些基本概念和特点,还有很多其他的内容,如高可用性、性能优化、安全性等。
如果想要深入了解Oracle数据库,可以参考相关的文档和教程。
Oracle学习笔记
Oracle的四个主要用户1.超级管理员sys/change_on_install2.普通管理员system/manager3.普通用户scott/tiger4.大数据用户sh/sh简单查询1.查询表结构 DESC 表名2.简单查询SELECT [DISTINCT] *|[字段 [别名]] [,字段 [别名]] …FROM 表名 [别名](1)查询时也可以使用四则运算,如:SELECT (字段*x)+y FROM 表名(2)可以使用“||”连接字段与字符串,如:select '工作与工资:' || job || sal 工作工资 from emp执行结果:3.限定查询SELECT [DISTINCT] *|[字段 [别名]] [,字段 [别名]] …FROM 表名 [别名][WHERE 条件(s)](1)Where字句后可以增加多个条件,最常见的条件就是最基本关系运算:>、<、>=、<=、!=(<>)、BE TWEEN…AND、LIKE、IN(指定范围)、IS NULL(为空)、AND(且)、OR(或)、NOT(非)。
(2)多个条件可以使用AND与OR连接。
例如:select * from emp where sal>1300 and sal<4000(3)范围判断BE TWEEN…AND:BETWEEN 最小值 AND 最大值(大于等于最小值,小于等于最大值),BE TWEEN…AND 对数字、日期都可以使用!!!例如:select * from emp where sal between 1300 and 4000例如:select * from emp where hiredate between '01-1月-1981' and '31-12月-1981'(4)判断为空IS (NOT) NULL例如:select * from emp where comm is null例如:select * from emp where comm is not null例如:select * from emp where not comm is null(5)指定范围的判断(NOT) IN例如:select * from emp where empno in(7369,7566,7799)例如:select * from emp where empno not in(7369,7566,7799)注意:如果NOT IN 范围里出现了NULL则查询不到任何结果!!!(6)模糊查询LIKE,‘_’匹配一个字符。
Oracle数据库学习笔记_CREATETABLE和INSERTINTO的高级用法
Oracle数据库学习笔记 _CREATETABLE和 INSERTINTO的高级用 法
1、新建表 create table ACCT_LOAN (
data_date INTEGER not null, --整数,也可以约束数字最大位数,不可为空 acct_num VARCHAR2(35) not null, --可变长度的字符串(包含数字。字母及特殊字符) curr_cd CHAR(3), --固定长度为3的字符串(可包含数字,字母及特殊字符) drawdown_dt DATE, --日期 loan_amt decimal(8,2) --小数,小数最大长度为8位,小数位固定为2位 ) 2、建备份表 create table 备份表名 as select * from 表名; 3、将两张相同结构的表合并在一起 insert into 表1 select * from 表2 where ...; commit; 4、更新表:merge into merge into 表1 using 表2 on (表1.字段=表2.字段) when matched then update set ... when not matched then insert values(表2.xx, 表2.xx,...); commit; 5、给变量赋值 select into 变量名 from
【Oracle学习笔记】定时任务(dbms_job)
【Oracle学习笔记】定时任务(dbms_job)⼀、概述Oralce中的任务有2种:Job和Dbms_job,两者的区别有:1. jobs是oracle数据库的对象, dbms_jobs只是jobs对象的⼀个实例,就像对于tables, emp和dept都是表的实例。
2.创建⽅式也有差异,Job是通过调⽤dbms_scheduler.create_job包创建的,Dbms_job则是通过调⽤dbms_job.submit包创建的。
3.两种任务的查询视图都分为dba和普通⽤户的,Job对应的查询视图是dba_scheduler_jobs和user_scheduler_jobs,dbms_jobs对应的查询视图为dba_jobs和user_jobs。
这⾥主要是介绍Dbms_job。
⼆、使⽤1、创建job:1BEGIN2 DBMS_JOB.SUBMIT(3 JOB OUT BINARY_INTERGER,--输出变量,是此任务在任务队列中的编号,也可以⾃定义,⼀般不传4 WHAT IN VARCHAR2,--执⾏的任务的名称及其输⼊参数5 NEXT_DATE IN DATE DEFAULT SYSDATE,--任务执⾏的时间6 INTERVAL IN VARCHAR2DEFAULT NULL,--任务执⾏的时间间隔7 NO_PARSE IN BOOLEAN DEFAULT FALSE,--⽤于指定是否需要解析与作业相关的过程8 INSTANCE IN BINARY_INTEGER DEFAULT ANY_INSTANCE,--⽤于指定哪个例程可以运⾏作业9 FORCE IN BOOLEAN DEFAULT FALSE--⽤于指定是否强制运⾏与作业相关的例程10 );11END新⼿可以使⽤窗⼝创建:2、删除job: dbms_job.remove(jobno); -- jobno任务号3、修改要执⾏的操作: job:dbms_job.what(jobno, what); --指定任务号以及存储过程4、修改下次执⾏时间:dbms_job.next_date(jobno, next_date); --指定任务号的时间5、修改间隔时间:dbms_job.interval(jobno, interval); --指定任务号的间隔时间6、改变与作业相关的所有信息,包括作业操作,作业运⾏⽇期以及运⾏时间间隔等.1 dbms_job.change(2 job in binary_integer,3 what in varchar2,4 next_date in date,5 interval in varchar2,6 instance in binary_integer default null,7 force in boolean default false8 );例⼦:dbms_job.change(2,null,null,'sysdate+2');6、启动job: dbms_job.run(jobno); --指定任务号启动7、停⽌job: dbms.broken(jobno, broken, nextdate); –broken为boolean值 N代表启动,Y代表没启动(STOP)三、Interval 说明间隔/interval是指上⼀次执⾏结束到下⼀次开始执⾏的时间间隔,当interval设置为null时,该job执⾏结束后,就被从队列中删除。
韩顺平oracle学习笔记
韩顺平oracle学习笔记第0讲:如何学习oracle一、如何学习oracleOracle目前最流行的数据库之一,功能强大,性能卓越。
学习oracle需要具备一定基础:1.学习过一门编程语言(如:java ,c)2.最好学习过一门别的数据库(sql server,mysql , access)教程推荐:oracle使用教程,深入浅出oracle记住:欲速则不达,做任何事情要遵循他的规律,循序渐进,信心很重要成为一个oracle高手过程:理解小知识点->做小练习->把小的只是点连成线->做oracle项目->形成只是面->深刻理解Oracle基础部分:oracle基础使用; oracle用户管理; oracle表管理Oracle高级部分:oracle表的查询; oracle的函数; oracle数据库管理;oracle 的权角色; pl/sql 编程;索引,约束和事物。
期望目标:1 学会安装、启动、卸载oracle2 使用sql *plus工具3 掌握oracle用户管理4 学会在oracle中编写简单的select语句第1讲:基础语法内容介绍:1.为什么学习oracle2.介绍oracle及其公司的背景3.学会安装、启动、卸载oracle4.oracle开发工具5.Sql*plus的常用命令6.oracle用户管理一、主流数据库包括:●微软:sql server 和 access●瑞典:mysql AB公司●IBM公司:DB2●美国sybase公司:sybase●IBM公司:infromix●美国oracle公司:oracle(目前最流行的之一)二、oracle安装,启动及卸载1.系统要求:操作系统最好为windows2000内存最好在256M以上硬盘空间需要2G以上2.oracle安装会自动的生成sys和system两个用户说明:○1Sys用户是超级用户,具有最高权限,具有sysdba角色,create database 的权限,默认密码是manager○2System 用户是管理操作员,权限也很大,具有sysoper角色,没有create database权限,默认密码是 change_on_install○3一般讲,对数据库维护,使用system用户登录就可以了3.启动oracle右键单击我的电脑->服务和应用程序:服务->启动OracleServiceMYORA1(MYORA1是安装oracle时起的名字各有不同)和OracleOracleHome90TNSLlistener4.卸载oracle1、先关掉oralce,net stop OracleServiceORCL(ORCL是我的实例名字,换成你的),或者去我的电脑服务中关闭2、开始->程序->Oracle - oracle的版本号,我的是10ghome->Oracle Installation Products->Universal Installer 卸载oracle3、进注册表,regedit,删除选择HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE下所有的key。
Oracle数据库学习笔记
Oracle数据库学习笔记Oracle数据库基础 orcale属于关系型数据库,适⽤于各类⼤,中,⼩,微机环境,是⼀种⾼效率、可靠性好的、适应⾼吞吐量的数据库⽅案。
学习,实验完全免费,商⽤需要⽀付相应费⽤。
Oracle 数据库包括数据库实例,和数据库,⼆者脱离谁都没有存在的价值。
实例是⽤来操作数据库的对象,数据库是⽤来存储数据使⽤的。
Oracle主要组件包含实例组件,数据库组件。
SGA(System Global Area)是Oracle Instance的基本组成部分,PGA(Process Global Area)是为每个连接到Oracle database的⽤户进程保留的内存。
每个实例只有⼀个SGA,所有的进程都能访SGA。
PGA是程序全局区,每个⼀个进程都⼀个PGA,PGA是私有的,只有对应进程才能访问对应的PGA。
数据库中包含:参数⽂件,⼝令⽂件,数据库⽂件,控制⽂件,⽇志⽂件以及归档⽇志⽂件。
Oracle实例进场包含⽤户进程,服务器进程和后台进程。
SGA:系统全局区 系统全局区包含共享池,数据缓冲区,⽇志缓冲区。
“共享池”:是对SQL,PL/SQL程序进⾏语法分析,编译,执⾏的内存区;由库缓存和数据字典缓存组成;其⼤⼩直接影响数据库性能。
“数据缓冲区”:临时存储从数据库读⼊的数据,所有⽤户共享,数据缓存区的⽬的是加快数据读写。
“⽇志缓冲区”:⽇志记录数据库所有修改信息,其先产⽣于⽇志缓冲区,当达到⼀定数量时,由后台进程将⽇志数据写到⽇志⽂件中。
PGA:程序全局区 PGA包含单个服务器进程所需要的数据和控制信息,在⽤户进程连接到数据库并创建⼀个会话时⾃动分配的,保存每个与数据库连接的⽤户进程所需要的信息。
PGA为⾮共享区,只能单个进程使⽤,当⼀个⽤户会话结束,PGA释放。
后台进程 后台进程中包含PMON(进程监视器(Process Monitor)),SMON(系统监视器(System Monitor)),DBWR(数据库书写器(Database Write)),LGWR(⽇志书写器(Log Write)),CKPT(检查点(Checkpoint)),以及其他。
学习王二暖oracle笔记(25-31)
学习oracle笔记一、临时表空间 (3)1.目标 (3)2.临时表空间的作用 (3)3.临时表空间组 (3)4.临时表空间的操作 (3)二、UNDO表空间(undo撤销,redo重做) (5)1.目标 (5)2.UNDO管理方式的改变 (5)3.Undo表空间概念 (5)4.Undo相关的重要的参数 (6)5.Undo表空间的操作 (7)6.Oracle11G undo表空间的新特性 (8)三、逻辑备份与恢复 (8)1.目标 (8)2.备份与恢复简介 (8)3.故障类型 (9)4.传统的导出与导入实用程序 (9)5.导出 (11)6.导入 (12)7.导出导入三种方式 (14)8.可传输表空间 (14)9.oracle11G的数据泵 (15)10.Expdp重要的参数 (15)11.inmdp的重要参数 (19)四、数据装载 (20)1.目标 (20)2.数据的装载 (20)3.SQL*LOADER (21)4.外部表 (23)五、闪回flashback (25)1.目标 (25)2.9I的闪回查询 (25)3.10G中的闪回版本查询 (26)4.10G的闪回事务查询 (27)5.10G的闪回表 (27)6.闪回删除 (28)7.10G的闪回数据库 (29)六、物化视图 (30)1.目标 (30)2.问题的提出 (30)3.物化视图的简介 (31)4.物化视图的作用 (32)5.创建物化视图时需要的权限 (33)6.创建物化视图时的选项 (33)7.基于主键的物化视图 (34)8.基于rowid的物化视图 (36)七、使用物化视图和exp实现生产库的逻辑备份的例子 (37)1.问题的提出 (37)2.问题的解决 (37)一、临时表空间1.目标2.临时表空间的作用临时表空间在硬盘上3.临时表空间组4.临时表空间的操作查看表空间:Select * from v$tablespace;Select * from dba_tablespaces;查看数据文件:Select * from dba_data_files;查看临时数据文件:Select * from dba_temp_files;Select * from v$tempfile;查看默认的临时表空间:Select * from database_propertieswhere property_name=’DEFAULT_TEMP_TABLESPACE’;创建临时表空间,不属于组:Create temporary tablespace temp2 tempfile’F:\data\orcl\tem2a.dbf’ size 10M autoextend on;创建临时表空间,属于组:Create temporary tablespace temp3tempfile’F:\data\orcl\tem3a.dbf’size 10M autoextend ontablespace group temp_grp;查看临时表空间组:Select * from dba_tablespace_groups;把temp2加入到temp_grp组内:Alter tablespace temp2 tablespace group temp_grp;把temp2移出temp_grp组:Alter tablespace temp2 tablespace group ’’;给temp2表空间添加一个临时文件:Alter tablespacetemp2 addtempfile’F:\data\orcl\tem2b.dbf’size 10m autoextend on;修改系统默认的临时表空间为另一个临时表空间:Alter database default temporary tablespace temp2;修改系统默认的临时表空间为一个临时表空间组:Alter database default temporary tablespacetemp_grp;二、UNDO表空间(undo撤销,redo重做)1.目标2.UNDO管理方式的改变3.Undo表空间概念4.Undo相关的重要的参数查看undo相关信息:Show parameter undo;5.Undo表空间的操作增加一个undo表空间:Create undo tablespace undotbs2 datafile’F:\DATA\ORCL\undotbs201.dbf’ size 10m autoextend on;给undotbs2表空间增加一个undo数据文件:Alter tablespace undotbs2 add datafile’F:\DATA\ORCL\undotbs202.dbf’ size 10m;查看系统默认undo表空间:Show parameter undo;切换undo表空间:Alter system set undo_tablespace=undotbs2;启用rententiongarentee:Alter tablespace undotbs1 retention guarantee;查看表空间是否启用了rententiongarentee:Select * from dba_tablespaces;取消启用rententiongarentee:Alter tablespace undotbs1 retention no guarantee;查看undo表空间使用情况:Select * from v$undostat;Select to_char(begin_time,’yyyymmdd hh24:mi:ss’),to_char(end_time,’yyyymmdd hh24:mi:ss’),undoblks,txncount from v$undostat;6.Oracle11G undo表空间的新特性三、逻辑备份与恢复1.目标2.备份与恢复简介3.故障类型语句故障:不需要人工处理。
Oracle_Plsql个人学习笔记总结
备注:以下是个人学习笔记总结,其实是本人容易忘记,工作中碰到的一些知识点,记录下来整理成笔记了,序号之间并不是按照某种类型划分的,都是随意的标记一下,希望对大家有所帮助。
昵称:阿杜笑傲江湖(其实就是个名字而已,并不江湖…)name:杜立鸿(不要冒充,万一哪天中奖了呢?)sex:爷们---------------------------废话不多说,GO,GO,Go……1.允许修改分区建(有时候分区键更新不了,需要以下这样处理,当然了分区键本来是不允许更新的,都得根据实际情况)alter table t1 enable row movement;2. 获取某一时间最近的时间sqlselect *from t_datetime twhere t.f_time - to_date('2018-09-06 10:10:00','yyyy-mm-ddhh24:mi:ss') =(select min(t.f_time - to_date('2018-09-06 10:10:00','yyyy-mm-ddhh24:mi:ss'))from t_datetime t);3. 1.创建一个object类型的数据库类型对象。
表示学生实体类型。
(注意:此类型必须定义为数据库对象级别的类型,而不能定义成包、函数级别的类型。
否则,函数外部代码是无法识别该类型的)。
CREATE OR REPLACE TYPE student_obj_type AS OBJECT(stu_no NUMBER, --学号stu_name VARCHAR2(255), --姓名stu_sex VARCHAR2(2),--性别score NUMBER--成绩);4.创建一个嵌套表类型的数据库类型对象。
表示学生实体集合类型。
该类型也将用作函数中定义的返回类型。
(注意:此类型必须定义为数据库对象级别的类型,而不能定义成包、函数级别的类型。
oracle 笔记
关于Oracle的学习笔记,可能包括以下几个重要部分:数据库创建和管理:创建用户和表空间。
以超级管理员的身份登录,创建表空间,创建用户,给用户授权,使用新用户进行查询测试。
数据定义语言(DDL)用于建立、修改、删除数据库对象,包括创建语句(CREATE)、修改语句(ALTER)、删除语句(DROP)。
例如,使用CREATE TABLE创建表,使用ALTER TABLE修改表,使用DROP TABLE删除表等。
数据库查询:数据查询语言(DQL)用于查询所需要的数据。
排序查询结果。
例如,使用SELECT语句查询员工信息,并按升序排序。
排序可使用NULLS FIRST和NULLS LAST来选择空的信息的位置。
字符串拼接。
通过“||”实现字符串的拼接。
例如,查询所有员工姓名并在后面加一个“a”。
当字符串拼接遇到空的时候,空会自动变成一个空字符串。
数据库数据操作:数据操作语言(DML)用于改变数据库数据,包括INSERT、UPDATE、DELETE三条语句。
使用DISTINCT去重。
例如,SELECT DISTINCT name, id FROM A,作用于多列。
数据库高级特性:使用PARTITION BY在保留全部数据的基础上,只对其中某些字段做分组排序。
虚拟表DUAL是一个虚表,虚拟表,是用来构成SELECT的语法规则,Oracle保证DUAL里面永远只有一条记录。
数据库控制和管理:数据控制语言(DCL)用于数据库的控制和管理。
事务控制语言(TCL)用于数据库事务的控制。
以上内容只是Oracle学习笔记的一部分,实际上Oracle数据库系统的学习还包括很多其他的内容,如索引管理、视图、存储过程、触发器等高级数据库对象的管理和使用,以及数据库性能优化、安全性管理等内容。
Oracle基础必学知识点
Oracle基础必学知识点1. 数据库概念:Oracle是一种关系型数据库管理系统(RDBMS),用于存储和管理大量结构化数据。
它支持SQL语言,可以通过SQL语句进行数据查询、插入、更新和删除操作。
2. 数据库对象:Oracle数据库由多个对象组成,包括表、视图、索引、序列、存储过程等。
这些对象用于存储和处理数据,可以通过SQL语句进行操作。
3. 数据类型:Oracle支持多种数据类型,包括数字、字符、日期、大对象(LOB)等。
不同的数据类型用于存储不同类型的数据,可以根据需求选择合适的数据类型。
4. 表操作:在Oracle中,表用于存储数据。
可以使用CREATE TABLE语句创建表,使用INSERT语句插入数据,使用SELECT语句查询数据,使用UPDATE语句更新数据,使用DELETE语句删除数据。
5. 索引:索引是一种用于提高查询性能的数据结构。
在Oracle中,可以使用CREATE INDEX语句创建索引,通过索引可以快速定位到需要查询的数据,提高查询效率。
6. 数据约束:数据约束是用于保证数据的完整性和有效性的规则。
在Oracle中,可以使用约束来限制数据的取值范围、保证数据的唯一性等。
常见的约束类型包括主键约束、外键约束、唯一约束、非空约束等。
7. 视图:视图是一种虚拟表,它是从一个或多个表中获取数据的查询结果。
在Oracle中,可以使用CREATE VIEW语句创建视图,通过视图可以简化复杂的查询操作,提高数据的安全性。
8. 存储过程:存储过程是一组预先编译的SQL语句,存储在数据库中,并可以通过调用来执行。
在Oracle中,可以使用CREATE PROCEDURE语句创建存储过程,通过存储过程可以实现复杂的数据处理逻辑。
9. 事务控制:事务是一组逻辑操作,要么全部执行成功,要么全部回滚。
在Oracle中,可以使用BEGIN/END语句或者显式的事务语句(如COMMIT和ROLLBACK)来控制事务的提交或回滚。
oracle课堂笔记
9.数据库的备份和恢复
exp命令可以把数据从远程数据库服务器导出到本地的dmp文件
imp命令可以把dmp文件从本地导入到远处的数据库服务器中
10.表的创建
语法:
create table 表名(列名 数据类型 [default 默认值],列名2 数据类型,...);
修改表结构:
SERIALIZABLE:串行化。不允许任何并发事务问题。最严格的事务隔离性。
Oracle只支持READ COMMITTED和SERIALIZABLE。
默认为READ COMMITTED
设置一个事务的隔离级别
set transaction isolation level serializable
自动隐式提交事务:
执行一个DDL语句、执行一个DCL语句、从SQL*Plus正常退出(exit,quit)
自动隐式回滚事务:
强行退出SQL*Plus、客户端到服务器的连接异常中断MMIT;
回滚事务:ROLLBACK [TO 回滚点];
ALTER TABLE 表名
ADD [CONSTRAINT 约束名] 约束类型(要约束的列名);
ALTER TABLE 表名
ADD [CONSTRAINT 约束名]
FOREIGN KEY (要添加外键的列名)
REFERENCES 主表名(主表的某一列名);
设置事务回滚点:SAVEPOINT 回滚点;
5.事务的隔离级别
SQL标准定义了四种隔离级别:
READ UNCOMMITTED: 读未提交数据。脏读、不可重复读、幻读都可能发生。它的事务隔离性最低。
READ COMMITTED:读已提交数据。不允许脏读。
Oracle学习笔记(十)分区索引失效的思考
Oracle学习笔记(⼗)分区索引失效的思考此处只说索引失效的场景(只会影响全局索引):结论:全局索引truncate 分区和交换分区都会导致索引失效果局部索引truncate分区不会导致索引失效。
drop table part_tab_trunc purge;create table part_tab_trunc (id int,col2 int,col3 int,contents varchar2(4000))partition by range (id)(partition p1 values less than (10000),partition p2 values less than (20000),partition p3 values less than (maxvalue));insert into part_tab_trunc select rownum ,rownum+1,rownum+2, rpad('*',400,'*') from dual connect by rownum <=50000;commit;create index idx_part_trunc_col2 on part_tab_trunc(col2) local;create index idx_part_trunc_col3 on part_tab_trunc(col3) ;---分区truncate前select index_name, partition_name, statusfrom user_ind_partitionswhere index_name = 'IDX_PART_TRUNC_COL2';INDEX_NAME PARTITION_NAME STATUS------------------------------ ------------------------------ --------IDX_PART_TRUNC_COL2 P1 USABLEIDX_PART_TRUNC_COL2 P2 USABLEIDX_PART_TRUNC_COL2 P3 USABLEselect index_name, statusfrom user_indexeswhere index_name = 'IDX_PART_TRUNC_COL3';INDEX_NAME STATUS------------------------------ --------IDX_PART_TRUNC_COL3 VALIDalter table part_tab_trunc truncate partition p1 ;---分区truncate后select index_name, partition_name, statusfrom user_ind_partitionswhere index_name = 'IDX_PART_TRUNC_COL2';INDEX_NAME PARTITION_NAME STATUS------------------------------ ------------------------------ --------IDX_PART_TRUNC_COL2 P1 USABLEIDX_PART_TRUNC_COL2 P2 USABLEIDX_PART_TRUNC_COL2 P3 USABLEselect index_name, statusfrom user_indexeswhere index_name = 'IDX_PART_TRUNC_COL3';INDEX_NAME STATUS------------------------------ --------IDX_PART_TRUNC_COL3 UNUSABLE此处只说索引失效的场景(也是只影响全局索引):--试验1(未加Update GLOBAL indexes关键字)drop table part_tab_drop purge;create table part_tab_drop (id int,col2 int ,col3 int,contents varchar2(4000))partition by range (id)(partition p1 values less than (10000),partition p2 values less than (20000),partition p3 values less than (maxvalue));insert into part_tab_drop select rownum ,rownum+1,rownum+2,rpad('*',400,'*') from dual connect by rownum <=50000;commit;create index idx_part_drop_col2 on part_tab_drop(col2) local;create index idx_part_drop_col3 on part_tab_drop(col3) ;--未drop分区之前select index_name,status from user_indexes where index_name='IDX_PART_DROP_COL3';INDEX_NAME STATUS------------------------------ --------IDX_PART_DROP_COL3 VALIDalter table part_tab_drop drop partition p1 ;--已drop分区之后select index_name,status from user_indexes where index_name='IDX_PART_DROP_COL3';INDEX_NAME STATUS------------------------------ --------IDX_PART_DROP_COL3 UNUSABLE--试验2(加Update GLOBAL indexes关键字)drop table part_tab_drop purge;create table part_tab_drop (id int,col2 int ,col3 int,contents varchar2(4000))partition by range (id)(partition p1 values less than (10000),partition p2 values less than (20000),partition p3 values less than (maxvalue));insert into part_tab_drop select rownum ,rownum+1,rownum+2,rpad('*',400,'*') from dual connect by rownum <=50000;commit;create index idx_part_drop_col2 on part_tab_drop(col2) local;create index idx_part_drop_col3 on part_tab_drop(col3) ;--未drop分区之前INDEX_NAME STATUS------------------------------ --------IDX_PART_DROP_COL3 VALIDalter table part_tab_drop drop partition p1 Update GLOBAL indexes;--已drop分区之后select index_name,status from user_indexes where index_name='IDX_PART_DROP_COL3';INDEX_NAME STATUS------------------------------ --------IDX_PART_DROP_COL3 VALID--此处只说索引失效的场景:--分区表SPLIT的时候,如果MAX区中已经有记录了,这个时候SPLIT就会导致有记录的新增分区的局部索引失效! drop table part_tab_split purge;create table part_tab_split (id int,col2 int ,col3 int ,contents varchar2(4000))partition by range (id)(partition p1 values less than (10000),partition p2 values less than (20000),partition p_max values less than (maxvalue));insert into part_tab_split select rownum ,rownum+1,rownum+2,rpad('*',400,'*') from dual connect by rownum <=90000;commit;create index idx_part_split_col2 on part_tab_split (col2) local;create index idx_part_split_col3 on part_tab_split (col3) ;---分区split前select index_name, partition_name, statusfrom user_ind_partitionswhere index_name = 'IDX_PART_SPLIT_COL2';INDEX_NAME PARTITION_NAME STATUS------------------------------ ------------------------------ -------IDX_PART_SPLIT_COL2 P1 USABLEIDX_PART_SPLIT_COL2 P2 USABLEIDX_PART_SPLIT_COL2 P_MAX USABLEselect index_name, statusfrom user_indexeswhere index_name = 'IDX_PART_SPLIT_COL3';INDEX_NAME STATUS------------------------------ --------IDX_PART_SPLIT_COL3 VALIDalter table part_tab_split SPLIT PARTITION P_MAX at (30000) into (PARTITION p3,PARTITION P_MAX);alter table part_tab_split SPLIT PARTITION P_MAX at (40000) into (PARTITION p4,PARTITION P_MAX);alter table part_tab_split SPLIT PARTITION P_MAX at (50000) into (PARTITION p5,PARTITION P_MAX);alter table part_tab_split SPLIT PARTITION P_MAX at (60000) into (PARTITION p6,PARTITION P_MAX);alter table part_tab_split SPLIT PARTITION P_MAX at (70000) into (PARTITION p7,PARTITION P_MAX);---分区split后select index_name, partition_name, statusfrom user_ind_partitionswhere index_name = 'IDX_PART_SPLIT_COL2';INDEX_NAME PARTITION_NAME STATUS------------------------------ ------------------------------ --------IDX_PART_SPLIT_COL2 P1 USABLEIDX_PART_SPLIT_COL2 P2 USABLEIDX_PART_SPLIT_COL2 P3 UNUSABLEIDX_PART_SPLIT_COL2 P4 UNUSABLEIDX_PART_SPLIT_COL2 P5 UNUSABLEIDX_PART_SPLIT_COL2 P6 UNUSABLEIDX_PART_SPLIT_COL2 P7 UNUSABLEIDX_PART_SPLIT_COL2 P_MAX UNUSABLEselect index_name, statusfrom user_indexeswhere index_name = 'IDX_PART_SPLIT_COL3';INDEX_NAME STATUS------------------------------ --------IDX_PART_SPLIT_COL3 UNUSABLE--结论是:split会导致全局索引失效,也会导致局部索引失效。
Oracle数据库学习笔记_oracle之addconstraint方法添加约束
Oracle数据库学习笔记_oracle之addconstraint⽅法添加约束add constraint ⽅法在已经存在的列名添加约束,语法格式如下:alter table 表名 add constraint 约束名称约束类型(列名)具体⽤法如下:1.主键约束:列被约束为(⾮空、不重复)格式:alter table 表格名称 add constraint 约束名称 primary key (列名)例⼦:alter table emp add constraint ppp primary key (id);2.外键约束:列被约束为引⽤其他表的主键格式:alter table 表名 add constraint 约束名称 foreign key (列名) references 被引⽤的表名称(列名)例⼦:alter table emp add constraint jfkdsj foreign key (did) references dept (id);3.unique约束:列被约束为(不重复)格式:alter table 表名 add constraint 约束名称 unique(列名)例⼦:alter table emp add constraint qwe unique(ename);4.默认约束:让此列的数据默认为⼀定的数据格式:alter table 表名称 add constraint 约束名称 default 默认值 for 列名例⼦:alter table emp add constraint jfsd default 10000 for gongzi;5.check约束:列的数据范围被限制格式:alter table 表名称 add constraint 约束名称 check (列名)例⼦:alter table emp add constraint abcd check(age>20); --例如,年龄列的数据都要⼤于20的。
Oracle学习笔记系列(二)之数据库日期格式转换
Oracle学习笔记系列(⼆)之数据库⽇期格式转换Oracle数据库⽇期格式转换select sysdate from dual;select to_char(sysdate,'yyyy/mm/dd hh24:mi:ss') as mydate from dual;select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') as mydate from dual;select to_number(to_char(sysdate,'yyyymmddhh24miss')) as mydate from dual;转换函数与date操作关系最⼤的就是两个转换函数:to_date(),to_char() to_date():作⽤将字符类型按⼀定格式转化为⽇期类型。
具体⽤法:to_date('2004-11-27','yyyy-mm-dd'),前者为字符串,后者为转换⽇期格式。
【注意,前后两者要以⼀对应】如;to_date('2004-11-27 13:34:43', 'yyyy-mm-dd hh24:mi:ss')多种⽇期格式:YYYY:四位表⽰的年份 YYY,YY,Y:年份的最后三位、两位或⼀位,缺省为当前世纪 MM:01~12的⽉份编号 MONTH:九个字符表⽰的⽉份,右边⽤空格填补 MON:三位字符的⽉份缩写 WW:⼀年中的星期 D 的第⼏个⼩时,取值为00~23 MI:⼀⼩时中的分钟 SS:⼀分钟中的秒 SSSS:从午夜开始过去的秒数to_char():将⽇期转按⼀定格式换成字符类型即把当前时间按yyyy-mm-dd hh24:mi:ss格式转换成字符类型在oracle中处理⽇期⼤全 TO_DATE格式 Day:dd number 12dy abbreviated friday spelled out fridayddspth sp 12⼩时格式下时间范围为: 1:00:00 - 12:59:59 ....⽇期和时间函数汇总1.⽇期和字符转换函数⽤法(to_date,to_char)select to_char(to_date(222,'J'),'Jsp') from dual; --Two Hundred Twenty-Two2.求某天是星期⼏select to_char(to_date('2018-01-09','yyyy-mm-dd'),'day') from dual; --星期⼆select to_char(to_date('2018-01-09','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE = American') from dual; --tuesday设置⽇期语⾔ALTER SESSION SET NLS_DATE_LANGUAGE='AMERICAN';也可以这样 TO_DATE ('2002-08-26', 'YYYY-mm-dd', 'NLS_DATE_LANGUAGE = American')3.两⽇期间的天数select floor(sysdate - to_date('19921123','yyyymmdd')) from dual; --91794. 时间为null的⽤法select p.claimno, p.endcasedate from prplclaim pUNIONselect '1', TO_DATE(null) from dual;注意要⽤TO_DATE(null)5.取⽇期范围a_date between to_date('20011201','yyyymmdd') and to_date('20011231','yyyymmdd')这样12⽉31号中午12点之后和12⽉1号的12点之前是不包含在这个范围之内的。
oracle 笔记
oracle 笔记Oracle是一种关系型数据库管理系统 (RDBMS),广泛应用于企业级应用程序中。
以下是一些关于Oracle的常见笔记:1. 安装Oracle:Oracle可以在Windows、Linux和Solaris等操作系统上安装。
安装过程中需要指定数据库的相关信息,如数据库名称、端口号和管理员密码等。
2. 数据库实例:Oracle数据库由一个或多个数据库实例组成。
每个数据库实例包含一个或多个数据文件和日志文件。
数据库实例由SGA (System Global Area)和后台进程组成。
3. 数据库对象:Oracle支持多种数据库对象,如表、视图、索引、序列和触发器等。
这些对象可以存储和管理数据。
4. SQL语言:Oracle使用结构化查询语言 (SQL) 进行数据库操作。
SQL语句可以用于创建、修改和查询数据库中的数据。
5. 表空间:表空间是Oracle中逻辑存储空间的单位。
每个表空间包含一个或多个数据文件,用于存储表和索引数据。
6. 数据备份和恢复:Oracle提供了多种备份和恢复机制,如全备份、增量备份和归档日志等。
这些机制可以保护数据库免受数据损坏和丢失的影响。
7. 性能优化:Oracle提供了多种性能优化工具和技术,如索引、分区和查询优化器。
这些工具可以帮助提高数据库的性能和响应时间。
8. 数据库安全:Oracle提供了多种安全功能,如用户认证、访问控制和数据加密等。
这些功能可以保护数据库免受未经授权的访问和数据泄露的威胁。
9. 远程连接:Oracle支持远程连接,可以从远程计算机访问和管理数据库。
远程连接使用Oracle客户端软件进行配置和连接。
10. 高可用性:Oracle支持多种高可用性解决方案,如数据复制、故障转移和备份服务器等。
这些解决方案可以确保在数据库故障时继续提供服务。
Oracle 学习笔记
Oracle数据库→表空间→用户→表表空间:包含表、视图、索引段:包含数据段、索引段、回退段、临时段数据块:是Oracle中最小的逻辑存储单元创建表空间:create tablespace rootspacedatafile 'rootfile' size 1000mautoextend on创建用户:create user root用户名rootidentified by root 密码rootdefault tablespace rootspace 默认表空间rootspacetemporary tablespace temp 临时表空间tempCREATE USER usernameIDENTIFIED BY password[DEFAULT TABLESPACE tablespace][TEMPORARY TABLESPACE tablespace];授予用户username【用户名】权限:·grant connect to username; CONNECT角色允许用户连接至数据库,并创建数据库对象·grant resource to username; RESOURCE角色允许用户使用数据库中的存储空间·grant create sequence to username; 此系统权限允许用户在当前模式中创建序列,此权限包含在CONNECT角色中·grant select on test to username; 允许用户查询 TEST 表的记录·grant update on test to username; 允许用户更新 TEST 表中的记录·grant all on test to username; 允许用户插入、删除、更新和查询TEST 表中的记录·alter user username identified by newpassword;用于修改用户口令·drop user username cascade; 删除用户撤销用户权限:Revoke connect from username;设置显示行长度:Set linesize 12;伪列rownum:Select rownum,name from table;………………………………>Rownum name1 haha2 xxxx--创建表tb_stucreate table tb_stu(stu_id char(12) primary key,stu_name varchar(50) not null,sex varchar(5),birthday date)--查询表tb_stuselect * from tb_stu;--在表中插入tb_stu记录insert into tb_stu(stu_id,stu_name,sex,birthday) values('123456789012','李四','男',to_date('2009-9-9','yyyy-mm-dd'));--事务提交commit;--事务回滚rollback;--根据stu_name查询所有信息select * from tb_stu where stu_name='田七'--根据stu_id删除一条记录delete from tb_stu where stu_id=123456789015--根据stu_id修改一条记录update tb_stu set sex='女',stu_name='梁朝伟'where stu_id='123456789013';--to_date 修改存入数据库中日期的格式update tb_stu set birthday=to_date('2009-10-5','yyyy-mm-dd') wherestu_id='123456789014'--to_date 查询数据库中日期按指定格式输出select* from tb_stu where birthday between(to_date('2009-10-1','yyyy-mm-dd')) and (to_date('2009-12-1','yyyy-mm-dd'))--虚列 rownum 数据库中实际并不存在对符合条件的查询结果的编号select rownum,stu_id,stu_name,sex,birthday from tb_stu where sex='男';--在查询结果中进行查询select * from (select rownum rn,stu_id,stu_name,sex,birthday from tb_stu where sex='男') where rn<3;--创建表tb_employeecreate table tb_employee(em_id number primary key,em_name varchar(50) not null,sex varchar(2),birthday date,sal number(20,2))--向表tb_employee中插入数据insert into tb_employee values(1,'梁朝伟','男',sysdate,11000000);--按字段升序排列(默认的为升序)select * from tb_employee where sal>200order by sal asc--按字段升序排列select * from tb_employee where sal>200order by sal desc--取别名:将查询的字段按一个特定的字段名输出select em_name,((sal-2000)*0.2) 税收from tb_employee where sal>2000;--联合字段,将查询出的多个字段或者是字符串连接在一起,以一个字段输出,用“||”连接select em_name||'的应该缴税: '||((sal-2000)*0.2) as税收from tb_employee where sal>2000order by税收desc;--将em_name为“梁朝伟”的记录的birthday字段,按指定的日期格式进行修改update tb_employee set birthday=to_date('1969-1-1','yyyy-dd-mm') where em_name='梁朝伟';--查询birthday字段不为当前系统时间并且不为空的值--不等于的三种书写方式(!=,^=,<>)select * from tb_employee whereto_char(birthday,'yyyy')^=to_char(sysdate,'yyyy');-- or 连接的多条件“或”查询select * from tb_employee where birthday is null or em_id=1;--between 3 and 5 查询条件为:大于等于3同时小于等于5select * from tb_employee where em_id not between3and5;--查询条件为:大于其中任意一个(只要大于其中的某一个就为满足条件)select * from tb_employee where em_id > any(1,3,5);--查询条件为:小于其中所有的(只有比括号中所有的数字都小才为满足条件)select * from tb_employee where em_id < all(3,5);--下划线表示任意的以个字符select * from tb_employee where em_name like'周__';-- % 表示任意多个字符select * from tb_employee where birthday like'%';--快速创建和tb_stu相同的表结构的表tb_stu_temp1create table tb_stu_temp1as select * from tb_stu where1=2;--将表tb_stu按条件查询的结果插入表tb_stu_temp1中insert into tb_stu_temp1(select * from tb_stu);--查询所有的表select * from tab ;--根据表名查询表select * from tab where tname='tb_stu';如果2个表达式主键管理的:主表——子表先插入主表的数据,然后子表删除:先删从表数据,然后主表。
Oracle经典自学笔记
一.验证Oracle差不多安装完成了,首先得确认程序里有这些个选项,有四个选项:Oracle Installation Products、集成治理工具、配置和移植工具(治理员用得比较多)、应用程序开发。
Oracle也能够形成一种层次性的链接(Directory Manager),关于我们来讲用得最多是sqlplus,而OLE 是一种面向对象的技术,利用这种技术可开发可重复使用的软件组件(COM),他是微软提出的,在用VB开发时可能要用,关于我们来讲不须管。
当启动sqlplus时会提示输入用户名和口令,所谓的sqlplus 是Oracle的一个客户端。
Oracle大多数命令都用命令来实现,因此比较难使,就如同unix比windows难使。
口令你输入tiger,建议就用它,因为以后去企业里Oracle 9i确实是用的那个口令。
当你看到SQL>命令符时讲明差不多进入到了Oracle的命令行了。
图形版的sqlplus,命令行的sqlplus,还有一个确实是通过网页访问Oracle的服务,启动sqlplus,端口号是5560,URL 是http://127.0.0.1:5560/isqlplus。
isqlplus特不有用,比如讲你的机器上没有装上Oracle,就能够通过键入不人的IP,然后登陆到他的机器上来做实验,因此也能够安装特定的客户端软件实现。
讲实在的Oracle的那个客户端太难看了,同时要记好多好多的命令,因此专门有一类公司专门为Oracle开发客户端。
有一个比较闻名的客户端叫Toad,因此Oracle还有一个客户端PL/SQL Develplor,那个用的也特不多。
数据库治理时常用Toad (英文蛤蟆的意思),假如有声卡的话,你启动一次它就叫一次。
对我们来讲sqlplus足够使了。
以后有机会我使用一下PL/SQL Develplor,只是那个也不行使,因为你同时必须装上Oracle,还不如isqlplus好呢。
尚学堂马士兵Oracle学习笔记
02_unlock_user.avi 使用超级管理员登录到数据库上:sqlplus sys/bjsxt as sysdba � 当成 DBA 登录到服务 器上 连上之后 更改 user :alter user scott account unlock; 更改用户 解除锁定
03_table_structures.avi 第二章 SQL 语言 Sql 语言是在数据库地下进行操作的专门的语言,sql 语言本身是一种标准语言,它是一个 国际标准,它定义了套标准 SQL1922, SQL1999,SQL 在大多数数据库上通用,或许有轻微 的改变 包含四大语句: 1. 查询语句 查询语句只有一种就是 select 语句 2. DML 语句 DML 语句包含 Insert,Update,Delete 等常用语句
------
--------------------
------------------
----------
--------------
---------- ---------- 7369 SMITH CLERK 7902 17-12月-80 800 20
7499 ALLEN SALESMAN 7698 20-2月 -81 1600 300 30 7521 WARD SALESMAN 7698 22-2月 -81 1250 500 30 7566 JONES MANAGER 7839 02-4月 -81 2975 20 7654 MARTIN SALESMAN 7698 28-9月 -81 1250 1400 30 7698 BLAKE MANAGER 7839 01-5月 -81 2850 30 7782 CLARK MANAGER 7839 09-6月 -81 2450 10 7788 SCOTT ANALYST 7566 19-4月 -87 3000 20
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
修改表名:
alter table table_name rename table table_name to new_table_name;
修改列名:
alter table table_name rename column column_name to new_column_name;
---导出数据
exp userid=sscp2/sscp2 file=D:\sscp2.dmp log=D:\sscp2.log owner=SSCP2
---导入数据
imp userid=system/manager file=D:\sscp2.dmp log=d:\sscp2imp.log fromuser=SSCP2 touser=SSCP2
name:= :;
fetch cs into rec;
name:= rec.current_user;
insert into log values ('b',name,sysdate);
dbms_output.put_line(name);
close cs;
end event;
删除表空间时必须先删除上面的用户
drop drop user SSCP2 cascade;
drop tablespace sscp2
ቤተ መጻሕፍቲ ባይዱ
查询字段注释
select * from all_col_comments(user_col_comments--当前用户)
查询表的注释
select * from all_tab_comments(user_tab_comments)
得到当前连接的用户名和操作系统的时间格式
select
SYS_CONTEXT('USERENV','CURRENT_USER') current_user,
SYS_CONTEXT('USERENV','NLS_DATE_FORMAT') nls_date_format
minextents 1
maxextents unlimited
);
-- 增加注释
comment on table AA01
is '综合参数表';
-- Add comments to the columns
comment on column AA01.AAB034
-- 创建表
create table AA01
(
AAB034 VARCHAR2(8) default '00' not null,
AAE140 VARCHAR2(3) default '00' not null,
AAA001 VARCHAR2(10) not null,
is '经办机构名称';
oracle中将一个数据库内容复制到另一个数据库的步骤:
设原来的数据库为A,须同步的数据库为B
一。新建数据库B
二,在B中创建A中的所有表空间
三,在B中创建A中的所有用户
四,从A中导出数据(用上面的SQL语句)
五,将数据导入进B中(用上面的SQL语句)
AAE013 VARCHAR2(200)
)
tablespace SSCP2
pctfree 10
pctused 40
initrans 1
maxtrans 255
storage
(
initial 40K
一、常用SQL语句:
--创建表空间
CREATE TABLESPACE SSCP2 NOLOGGING DATAFILE 'E:\Oracle\oradata\sscp201.DBF' SIZE 10M AUTOEXTEND ON NEXT 500K MAXSIZE 1800M DEFAULT STORAGE ( INITIAL 16K NEXT 104K MINEXTENTS 1 MAXEXTENTS 5050000 PCTINCREASE 0 );
AAA002 VARCHAR2(50),
AAA003 VARCHAR2(10) not null,
AAA004 VARCHAR2(50),
AAA005 NUMBER(12,4) not null,
AAE030 DATE not null,
AAE031 DATE,
--创建用户
drop user SSCP2 cascade;
create user SSCP2 identified by VALUES '2CC87B525FA7F50F'
default tablespace SSCP2
temporary tablespace temp;
grant dba,connect,resource to SSCP2;
from dual
建立触发器及游标的使用:
create or replace trigger event
before insert on salary
--referencing old as old_value new
for each row
获取数据库名和实例名:
select ,i.INSTANCE_NAME from v$database d,v$instance i
增加新列:
alter table table_name add column_name type
修改列:
alter table table_name modify column_name newtype
declare
name varchar2(8);
cursor cs is select SYS_CONTEXT('USERENV','CURRENT_USER') current_user from dual;
rec cs%rowtype;
begin
open cs;