【Oracle】082基础知识

【Oracle】082基础知识【Oracle】基础知识_oraclecurrent_date

1.interval使用

Oracle提供了两种日期时间数据类型:DATE和TIMESTAMP用于存储时间点数据。另外,它提供INTERVAL数据类型用于存储一段时间。

INTERVAL YEAR TO MONTH – 间隔使用年份和月份。

INTERVAL DAY TO SECOND – 使用包括小数秒在内的天,小时,分钟和秒存储间隔。

INTERVAL ‘year[-month]’ leading (precision) TO trailing

INTERVAL '120-3' YEAR(3) TO MONTH

间隔120年,3个月; 由于前导字段的值大于默认精度(2位),因此必须指定前导字段精度YEAR(3)。

INTERVAL '105' YEAR(3)

间隔105年0个月。

INTERVAL '500' MONTH(3)

间隔500个月。

2.default role,set role

可以给某个用户分配一些角色,比如role r1,r2,r3,r4,而其中可以将某些角色比如r1设置为default role,其他的不设置成default role,这样,当该用户登录时,自动具有default role中所包含的权限,其他的角色所具有的权限要通过set role 角色来获得。

(1)sys用户作为sysdba登录,创建4个角色:
create role r1;
create role r2 identified by r2;
create role r3 identified by r3;
create role r4 identified by r4;

(2)sys用户赋予这四个角色对应的权限:
grant create session to r1;
grant select on hr.test to r2; (这里hr.test是我新创建的一个表,里面有ID和name两列)
grant update(name) on hr.test to r3;
grant insert on hr.test to r3;
 grant delete on hr.test to r4;

  (3)sys用户创建一个用户u3
create user u3 identified by u3;
 
(4)将角色r1,r2,r3,r4赋予用户u3
grant r1,r2,r3,r4 to u3;
 在修改用户u3的默认角色前,r1,r2,r3,r4 角色均为u3的 default role,以u3用户登录,查询、增删改hr.test,都没有问题。

 (5)现在sys用户修改用户u3的default role,仅将r1作为u3的默认角色:
alter user u3 default role r1;  --此时将覆盖原来的设置,u3 的default role =r1,仅仅有登录权限。
 
(6)用户u3 log off ,然后再log on,进去后发现,
查询、增删改hr.test都不能进行。
 
(7) 用户自己打开role权限
set role r2 identified by r2;
这时执行 select * from hr.test,发现没有问题。增删改不行。
将对应的角色打开:
set role r3 identified by r3;
此时修改和插入记录没有问题,但是select * from hr.test 确发现不行了。证明此时用户所属的角色仅仅是默认角色r1,和刚刚打开的角色r3,而r2被set role r3 identified by r3;覆盖掉了。
 那要同时有r2,r3,r4的权限怎么办呢?
set role r2 identified by r2,r3 identified by r3,r4 identified by r4。此时就同时对hr.test可以进行查询,增删改了。

 不过set role 的效果是临时的,只是当前session有效,其他的session无效,当结束当前session后再登录,又只有default role 的权限了。

3.Enterprise Manager (EM)

Enterprise Manager 中基于Web 的Database Control 可充当管理Oracle 数据库的主要工具。

在这里插入图片描述
仅在数据库open的状态下才能被使用

在安装数据库实例的过程中,每个数据库实例都会对应一组数据库服务,比如我安装了两个数据库实例orcl和ruledb,则对应的的服务分别是OracleDBConsoleorcl、OracleJobSchedulerORCL和OracleServiceORCL以及OracleDBConsoleruledb、OracleJobSchedulerRULEDB和OracleServiceRULEDB,其中OracleDBConsoleorcl就是Oracle企业管理控制台服务,OracleServiceORCL是Oracle数据库服务,要想使用Oracle企业管理控制台,则必须启用OracleDBConsoleorcl服务,要想连接数据库,必须启用OracleServiceORCL服务,这里把这两个服务都启动

4.|| 代表的含义

在oracle中 此符号|| 代表“+”,即拼接“||”左右两边的的字符串
在这里插入图片描述

5.q’

在转义特殊字符的时候通常使用的就是单引号。但这种转义方式很不直观。在oracle中使用q’ 来对特殊字符进行转义。q’转义符通常后面使用! [] {} () <>等转义符号,也可以使用\ ,也可以用字母、数字、=、+、-、*、&、$、%、#等,不可以使用空格,如下所示:
在这里插入图片描述

6.Oracle段(segment) 区(extent) 块(block)

Data blocks ,Extents,Segment 这就是他们之间的逻辑结构。 先看Data blocks(也叫逻辑块,oracle块,页)吧,oracle存储数据都是在这些数据块中,一个数据块是磁盘上数据库物理空间一系列物理字节的组成。 比Data blocks更高一层的逻辑数据块空间是extent,一个extent是由一系列临近的存储信息的数据块组成。 最高一层的逻辑结构是segment,一个segment是同一表空间extents的一个集合。每一个segment有不同的数据结构。如每一个表的数据就存储在自己的data segment,每一个索引存储在自己的索引段,如果表或者索引是是分区存储的,那么每一个分区都存储在他们各自的segment中。一个segment和他所有的extent都是在一个表空间中,并且一个segment可以跨越几个数据文件。

data block是oracle数据库中分配和私用的最小存储单元。但这仅仅对数据库来说,在物理层次,操作系统层次,所有的数据仍旧是按字节存储的。每一个操作系统都有自己的块尺寸(block size),在oracle数据库中,数据块的大小都有参数db_block_size在创建数据库的时候来确定,他的数值应该是操作系统块尺寸的整数倍。
在这里插入图片描述

7.行链接、行迁移

在这里插入图片描述

8.表空间

database数据库–tablespaces表空间–segments段–exents区–blocks块

(1).表空间管理方式

段的管理方式和区的管理方式是建立在表空间时确定的,后续不可更改

段管理方式有auto、manual两种,区管理方式有本地管理和字典管理(已淘汰)两种

如果system表空间时数据字典管理,其他表空间可以是数据字典管理也可以是本地管理(默认)

(只有system表空间为字典方式管理,其他表空间才有机会被设置为字典管理;若system表空间是本地管理,其他表空间一定是本地管理)

字典管理可以转换成本地管理,但是对于系统表空间,要执行一些附加步骤(步骤如下)

execute dbms_space_admin.tablespace_migragte_to_local('tablespace');
(2).大文件与小文件

小文件:一个表空间里面可以有多个数据文件,便于扩充

大文件:只能建立一个数据文件,需要使用标准快(8k的block,datafile maxsize可以是32T)

rman备份放在不同的通道。

简化管理:一个表空间对应一个数据文件

向大文件表空间增加一个数据文件

SQL> alter tablespace big_tbs add datafile '/u01/app/oracle/oradata/SINGLE04/bigtbs02.dbf' size 100m;
alter tablespace big_tbs add datafile '/u01/app/oracle/oradata/SINGLE04/bigtbs02.dbf' size 100m
*
ERROR at line 1:
ORA-32771: cannot add file to bigfile tablespace

9.current_date与sysdate区别

在oracle中current_date与sysdate都是显示当前系统时间, 其结果基本相同,但是有三点区别:
1.current_date返回的是当前会话时间,而sysdate返回的是服务器时间.
2.current_date有时比sysdate快一秒,这可能是四舍五入的结果.
3.如果修改当前会话的时区,比如将中国的时区为东八区,修改为东九区,则current_date显示的时间为东九区时间, 根据东加西减的原则,current_date应该比sysdate快一小时.

alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';

20:01:26 SQL> select current_date,sysdate from dual;

CURRENT_DATE        SYSDATE

------------------- -------------------

2009-03-10 20:01:37 2009-03-10 20:01:37

10.savepoint 检查点

1)检查点在事务提交前回退到任意已创建检查点的事务。

2)检查点在事务提交后就不存在了

11.CASCADE

级联删除(DELETE CASCADE)是指当主表(parent table)中的一条记录被删除,子表中关联的记录也相应的自动删除。

备注:外键字段在该表中为主键的表,即为主表;外键字段在该表中为普通字段的表,即为从表。

CREATE TABLE table_name

(

column1 datatype null/not null,

column2 datatype null/not null,

...

CONSTRAINT fk_column

FOREIGN KEY (column1,column2,...column_n)

REFERENCES parent_table (column1, column2,... column_n)

ON DELETE CASECADE

);

12.invisible列

一个列是否可见的属性可以由用户来控制。除非在选择列表中显式指定,否则看不到Invisible columns。表的任何一般访问(such as a SELECT * FROM table or a DESCRIBE)都不显示invisible columns.。

例如,以下操作不显示输出中的不可见列:
• SELECT * FROM statements in SQL
• DESCRIBE commands in SQL*Plus
• %ROWTYPE attribute declarations in PL/SQL
• Describes in Oracle Call Interface (OCI)

这个特性有什么用?

  • 一个是安全方面
  • 一次性数据库发布先发上去。但是应用功能还没开发完成,没关系,等下次开发好了,只要做一个字段可见的打开就好了

13.unused列

在oracle中 unused的作用主要是隐藏列

对于隐藏的列我们可以通过如下方式进行查看。对于隐藏的列是不可以进行恢复操作的,只能查看和删除。
在这里插入图片描述
它的应用不仅仅是隐藏列,对于大数据表的处理通常在做删除列的时候由于数据量非常大,所以在删除的时候无法直接删除而采用先隐藏的方式,然后在空闲的时候再删除。通过下图方式可以删除隐藏列
在这里插入图片描述
1.可以添加索引
2.通过alter table set unused…可以指定多个列
3.执行set unused指令后,该列的约束都会被移除

14.Read-only模式

Oracle11g推出了一个新的特性,可以将table置于read only状态,处于该状态的table的不能执行DML操作和某些DDL操作。

可以执行

  • 创建索引
  • 删除unused列
  • 删除该表

15.ASSM

PCTREE默认10%
insert操作插入前会选择合适的空间大小块

16.段类型

Oracle数据库中有多少类型的段,除了常见的TABLE、INDEX之外还有哪些?下面通过dba_segments视图来探讨Oracle的段类型。
在这里插入图片描述
在这里插入图片描述

17.Oracle 函数

单行函数:single row funcation

指一行数据输入,返回一个值的函数,常见的有

字符函数(如:substr)

日期函数(如:months_between)

数字函数(如:MOD)

转换函数(如:to_char)

通用函数(如:NVL)

多行函数 :muti row function

指多行数据输入,返回一个值的函数

常见的有sum 、 max等

(1).常见单行函数用法
  • CONCAT:连接
  • MOD:取余
  • to_date:据库格式匹配与字符串转换成date类型
  • substr 方法参数(‘被截取的字符串’,‘从哪一位开始截取’,‘截取的位数’);
  • nvl相当于mysql中的ifnull
  • CEIL(n)函数:取大于等于数值n的最小整数
  • FLOOR(n)函数:取小于等于数值n的最大整数
  • trunc(数值1,n):将列或表达式所表示的数值截取到小数点后的第n位;trunc(日期,‘截止日期单位’)
(2).TRUNC

1.TRUNC(for dates)
其具体的语法格式如下:
TRUNC(date[,fmt])

TRUNC(TO_DATE('24-Nov-1999 08:00 pm','dd-mon-yyyy hh:mi am')='24-Nov-1999 12:00:00 am'
TRUNC(TO_DATE('24-Nov-1999 08:37 pm','dd-mon-yyyy hh:mi am','hh')='24-Nov-1999 08:00:00 am'

2.TRUNC(number[,decimals])

其中:
number待做截取处理的数值
decimals指明需保留小数点后面的位数。可选项,忽略它则截去所有的小数部分

下面是该函数的使用情况:
TRUNC(89.985,2)=89.98
TRUNC(89.985)=89
TRUNC(89.985,-1)=80

(3).instr()函数

1)instr()函数的格式 (俗称:字符查找函数)
INSTR( string, substring [, start_position [, th_appearance ] ] )

参数:
string – 要搜索的字符串。字符串可以是CHAR,VARCHAR2,NCHAR,NVARCHAR2,CLOB或NCLOB等类型。
substring – 要在字符串(string)中搜索的子字符串。 子字符串可以是CHAR,VARCHAR2,NCHAR,NVARCHAR2,CLOB或NCLOB等类型。
start_position – 可选的。 在搜索将开始的字符串中的位置。 如果省略,则默认为1。字符串中的第一个位置为1.如果start_position为负数,INSTR函数会从字符串末尾开始计算start_position字符数,然后搜索字符串的开头。
nth_appearance – 可选的。 子串的第n个出现。 如果省略,则默认为1。

(4).nullif

NULLIF ( expression1 , expression2 )
如果两个指定的表达式相等,则返回空值。
如果两个表达式不相等,NULLIF 返回第一个 expression1 的值。

null不可以作为第一个表达式,可以为第二个表达式

(5).coalesce

取出第一个不为空的列的数据

coalesce函数里面的数据类型,必须全部都跟第一列的数据类型一致。

(6).nvl()与nvl2()
  • 函数nvl(expression1,expression2)根据参数1是否为null返回参数1或参数2的值;若expression1值为null,则该函数返回expression2、若expression1值不为null,则该函数返回expression1;
    参数expression1和expression2可以是字符型、数字型或日期型,但参数expression1与expression2的类型必须一致。

  • 函数nvl2(expression1,expression2,expression3)根据参数1是否为null返回参数2或参数3的值.若expression1值不为null,则该函数返回expression2值;
    expression1的类型不需要与expression2和expression3的类型保持一致;
    expression2与expression3的类型尽量保持一致,若不一致,当expression1为null时,则expression3会自动转换为expression2的类型,若两个数据类型之间无法转换,则会报错。

18.data dictionary

数据字典(Data Dictionary):包含关于数据库结构所有信息的表的集合.

Oracle数据字典中,对象名称多数以”USER.”,“ALL.”,”DBA.”为前缀.
“USER.”视图中记录通常记录执行查询的帐户所拥有的对象的信息,
“ALL.”视图中记录包括”USER”记录和授权至PUBLIC或用户的对象的信息,
“DBA.”视图包含所有数据库对象,而不管其所有者。

19.v$tablespace

区别:
v$tablespace (v$视图) :是动态性能视图,存在于controlfile中,数据库在mount状态下可以查询
dba_tablespace (dba_数据字典) :是静态视图,存在于数据库中,只能在open时查询

相同点:
都是表示空间信息的

20.Trace files

跟踪文件包含了大量而详细的诊断和调试信息。跟踪文件分为以下三类:

  • 警报日志文件
    警报日志的名称:alert_<ORACLE_SID>.log。报警日志主要保存以下信息:
    (1)数据库的启动、停止;
    (2)记录所有的非默认值的初始化参数;
    (3)记录日志的切换情况;
    (4)记录检查点的完成情况;
    (5)记录数据库工作时遭遇的错误信息。

  • 后台进程跟踪文件
    DBWR、LGWR、SMON 等后台进程创建的后台跟踪文件。后台进程跟踪文件也保存在BACKGROUND_DUMP_DEST参数指定的目录中,文件名格式为:<ORACLE_SID>_进程名_进程号.trc

[oracle@rac1 trace]$ ll *pmon*
-rw-r----- 1 oracle asmadmin 987 Aug  6 04:12 orcl1_pmon_10408.trc
-rw-r----- 1 oracle asmadmin  69 Aug  6 04:12 orcl1_pmon_10408.trm
-rw-r----- 1 oracle asmadmin 989 Aug  6 00:26 orcl1_pmon_119087.trc
-rw-r----- 1 oracle asmadmin  70 Aug  6 00:26 orcl1_pmon_119087.trm
-rw-r----- 1 oracle asmadmin 982 Aug  6 03:50 orcl1_pmon_119403.trc
  • 用户进程跟踪文件
    由连接到 Oracle 的用户进程生成的用户跟踪文件。这些文件仅在用户会话期间遇到错误时产生。用户可以通过执行Oracle 跟踪事件来生成该类文件。用户跟踪文件保存在 SER_DUMP_DEST 参数指定的目录中,文件命名格式为:<ORACLE_SID>_ora_服务进程的spid.trc。

21.两个日期间的天数

select floor(sysdate – to_date(‘20020405’,‘yyyymmdd’)) from dual;

22.dual表

Dual简单的说就是一个空表,Oracle提供的最小的工作表,只有一行一列,具有某些特殊功用。常用来通过select语句计算常数表达式。

Oracle的SELECT语法的限制为 SELECT * | [column1 [AS alias1], column2 [AS alias2]] FROM table
所以没有表名就没有办法查询,而时间日期并不存放在任何表中,于是这个dual虚拟表的概念就被引入了。

dual是Oracle中的一个实际存在的表,任何用户均可读取,常用在没有目标表的Select语句块中。

23、内连接、等值、非等值连接、外连接

(1).等值连接-内连接

等值连接也被称为简单连接(simple joins)或内连接(inner joins)。是通过等号来判断连接条件中的数据值是相匹配。

(2).非等值连接

一个非等值连接是一种不使用相等(=)作为连接条件的查询。如!=、>、<、>=、<=、BETWEEN AND等都是非等值链接的条件判断。

(3).自连接

join ,inner join
1 –自连接 :只返回两张表连接列的匹配项。
2 –以下三种查询结果一样。
3 select * from student s inner join class c on s.classid=c.id;
4 select * from student s join class c on s.classid=c.id;
5 select * from student s,class c where s.classid=c.id;

(4).外连接

LEFT | RIGHT | FULL JOIN
外连接是指查询出符合连接条件的数据同时还包含孤儿数据。左外链接包含左表的孤儿数据,右外连接包含右表的孤儿数据,全外连接包含两个表中的孤儿数据。
孤儿数据是指被连接的列的值为空的数据

(5).SQL99 中的自然连接(NATURAL JOIN)

NATURAL JOIN子句基于两个表之间有相同名字的所有列。
它从两个表中选择在所有的匹配列中有相等值的行。
如果有相同名字的列的数据类型不同,返回一个错误。

(6).笛卡儿乘积:cross join

除了cross join不可以加on外,其它join连接都必须加上on关键字,后都可加where条件。

1 –笛卡儿乘积连接 :即不加任何条件,达到 M*N 的结果集。
2 –以下两种查询结果一样。
3 select * from student s cross join class c;
4 select * from student,class;

注意:如果cross join加上where s.classid=c.id条件,会产生跟自连接一样的结果:

1 –加上条件,产生跟自连接一样的结果。
2 select * from student s cross join class c where s.classid=c.id;

(7).using

oracle 中 using关键字使用规则:
1.查询必须是等值连接。
2.等值连接中的列必须具有相同的名称和数据类型。
3.不能用于自然连接

使用using关键字简化连接时,需要注意以下几点:
1.使用 table1表和 table2表中的字段列进行连接时,在using子句和select子句中,都不能为字段列指定表名或表别 名。

2.如果在连接查询时使用了两个表中相同的多个列,那么久可以在using子句中指定多个列名,形式如下:

select... from table1 inner join table2  using(column1,column2)

24.time

date类型存储数据的格式为年月日时分秒,可以精确到秒
timestamp类型存储数据的格式为年月日时分秒,可以精确到纳秒(9位)

(1).timestamp

timestamp with time zone 表达的是 针对 标准时区(格林尼治时间)的差。

timestamp with local time zone 表达的是 ,根据你当前所处时区,变化你和格林尼治时间的差。如果过去相对标准时区 -8 ,那么移动到+10 时区的时候,需要加:10-(-8)=18 ,
在这里插入图片描述

【示例】select current_timestamp from dual;

返回:14-11月-08 12.37.34.609000 上午 +08:00
(2).DBTIMEZONE、SESSIONTIMEZONE

DBTIMEZONE:是数据库服务器所在的时区。
SESSIONTIMEZONE :是你的会话的时区。
例如:数据库服务器是放在英国(+00:00时区),而你在中国(+08:00)访问数据库,则SESSIONTIMEZONE 就是+08:00,DBTIMEZONE就是+00:00

(3).current_timestamp、current_date

current_timestamp :以timestamp with time zone数据类型返回当前会话时区中的当前日期,与时区设置有关,返回的秒是系统的,返回的日期和时间是根据时区转换过的。

current_date:CURRENT_TIMESTAMP准确到秒的四舍五入。
在这里插入图片描述

(4).sysdate、systimestamp

sysdate返回的是是服务器时间。

systimestamp也是当前系统的时间戳。

在这里插入图片描述

(5).TIMESTAMP WITH TIME ZONE

可以发现,如果客户端和数据库中的时区是一致的,那么TIMESTAMP和TIMESTAMP WITH LOCAL TIME ZONE存储的数据是完全一样的。

TIMESTAMP WITH TIME ZONE则略有不同,它保存的是0时区的时间,和所处的时区信息。

修改时区会导致系统TIMESTAMP时间发生变化,但是对于TIMESTAMP WITH LOCAL TIME ZONE类型,总是将系统的时间转化到数据库服务器上时区的时间进行存储。

TIMESTAMP WITH TIME ZONE保存的是当前时间转化到0时区的对应的时间,并通过最后两位来保存时区信息。

 CREATE TABLE TEST_TIMESTAMP(TIME1 TIMESTAMP(9), TIME2 TIMESTAMP(6) WITH LOCAL TIME ZONE, TIME3 TIMESTAMP(4) WITH TIME ZONE);
 
修改客户端主机的时区,由东8区(+8区)改为0时区。
SELECT * FROM TEST_TIMESTAMP;
11-1-05 11.08.15.027000000 下午
11-1-05 11.08.15.027000 下午
11-1-05 11.08.15.0270 下午 +08:00
(6).localtimestamp

返回会话中的日期和时间

【示例】select localtimestamp from dual;

返回:14-11-08 12.35.37.453000 上午

25.shrink

shrink命令用于收缩表,降低高水位线,减少表所使用的块的个数.

特性:
1)可在线收缩表,基本不影响DML
2)收缩表的同时自动维护索引
3)不需要额外的磁盘空间

shrink同时全减少高水位线以上和以下未使用的空间.数据库会压缩段(表),将水位线降低到合适的位置,然后释放回收的空间.

shrink命令需要开启row movement,因为在收缩表时,行的位置可能改变.
shrinK命令只能用在自动管理的段空间(automatic segment space mangement)的表空间上.

以下段不支持shrink命令:
1)IOT mapping 表(?)
2)rowid创建的物化视图的基表
3)表上的函数索引
4)securefile lobs
5)压缩表

shrink命令有两种执行方式:
1)直接执行alter table shirnk space;
2)先执行alter table shirnk space compact; 再执行alter table shirnk space.
alter table shirnk space 会直接整理块碎片压缩表并重置高水位线.
compact的作用是整理块碎片并压缩表,然后把压缩后的信息写在磁盘上,再次执行alter table shirnk space时, 重置高水位线并释放回收的空间.这样做的好处是避免大量锁定对大事务产生影响.
在执行shrink命令时加上cascade,会同时收缩表相关的对象,如索引.

26.sqlldr

Oracle数据库中,我们通常在不同数据库的表间记录进行复制或迁移时会用以下几种方法:
(1)A表的记录导出为一条条分隔开的insert语句,然后执行插入到B表中。这种方法在记录多时是个噩梦,需要三五百条的分批提交,否则客户端会死掉,而且导入过程很慢。
(2)建立数据库间的dblink,然后用create table B as select * from A@dblink where …或 insert from A@dblink where …
(3)exp A表,再imp到B表,exp时可加查询条件
(4)程序实现select from A …, 然后insert into B …,也要分批提交
(5)再就是Sql Loader(sqlldr)来导入数据,效果比起逐条insert来很明显。

sqlldr的使用,有两种方法:
(1)只使用一个控制文件,在这个控制文件中包含数据。
(2)使用一个控制文件(作为模板)和一个数据文件

27.symonym

同义词就是给表、视图等对象取得别名,用于简化对其的访问

分为2种:
私有同义词:用户自己创建自己使用的
公共同义词:dba创建,给其它用户使用的

28.PL/SQL

PL/SQL 是一种块结构的语言:
它把一组SQL语句放到一个模块中执行,使其更具模块化程序的特点;

--PL/SQL块基本结构:
DECLARE
       -- DECLARE 可选,声明部分: 
       --在此声明PL/SQL用到的变量,常量,类型,游标 以及局部的存储过程和函数;
BEGIN
       -- BEGIN~end 必须项,执行部分:
       -- 在此编写执行的过程 及 SQL语句,即程序的主要部分;
       EXCEPTION
                -- EXCEPTION 可选,指定出现错误时需要执行的操作
END;
       -- end: 表示Pl/sql块的结束,别忘了分号结尾;
       

-- 上面是PL/SQL块的基本结构, BEGIN~END; 是必须的 声明部分和异常处理部分并不是必须的..
-- 是PL/SQL中的单行注释 /**/ 多行注释;

28.Drop table

执行Drop table后
1.数据会被删除
2.事务先提交
3.视图、同义词保留但是不能用
4.索引删除
5.约束删除
6.进入recycle bin

29.external table

外部表,是指不存在于数据库中的表

1.外部数据表都是只读的,因此在外部表不能够执行DML操作
2.也不能创建索引。
3.能被分区?
4.外部表可以加载和卸载数据泵格式的数据,只需把organization external里的参数type设置为oracle_datapump

create table all_objects_unload
organization external
       (
       type oracle_datapump
      default directory testdir
      location('allobjects.dat')
      )
as
select * from all_objects

30.expdb

1)导出用户
expdp test/test@test schemas=test directory=DUMP_DIR dumpfile=expdp_1.dmp ;
2)导出表
expdp test/test@test tables=users dumpfile=users.dmp directory=DUMP_DIR3;
3)按查询条件导
expdp scott/tiger@orcl directory=dump_dir dumpfile=expdp.dmp tables=empquery=‘where deptno=20’;
4)按表空间导
expdp system/manager@orcl directory=dump_dir dumpfile=tablespace.dmptablespaces=temp,example;
5)导整个数据库
expdp test/test@test directory=DUMP_DIR3 dumpfile=full.dmp full=y;

31.undo、redo

redo的原因是:每次commit时,将数据的修改立即写到online redo中,但是并不一定同时将该数据的修改写到数据文件中。因为该数据已经提交,但是只存在联机日志文件中,所以在恢复时需要将数据从联机日志文件中找出来,重新应用一下,使已经更改数据在数据文件中也改过来!

undo的原因是:在oracle正常运行时,为了提高效率,假如用户还没有commit,但是空闲内存不多时,会由DBWR进程将脏块写入到数据文件中,以便腾出宝贵的内存供其它进程使用。这就是需要UNDO的原因。因为还没有发出commit语句,但是oracle的dbwr进程已经将没有提交的数据写到数据文件中去了。

undo 也是也是datafile, 可能dirty buffer 没有写回到磁盘里面去。

(1).undo_retention

undo数据分为三种:

活动的undo:未提交事务的undo数据,这些undo数据永远不能覆盖,用于回滚rollback事务。

过期的undo(expired):已提交事务的undo数据,这些undo数据可以覆盖。

未过期的undo(unexpired):事务已提交,但事务提交前,有些查询正在进行,它要读取的是提交前的数据,这部分数据就是未过期数据。如果这部分undo数据被覆盖了,就会发生ora-01555错误。

一个解决方法是,指定undo表空间参数UNDO_TABLESPACE,并将undo空间管理方法设置成自动扩展:UNDO_MANAGEMENT=AUTO。

这种方法可能产生的结果是:

因为undo表空间装了太多未过期(unexpired)的undo数据,新的transaction无法向其中写入undo数据,这时transaction就会发生ORA-30036错误。

Undo_Retention是Oracle提供出的用于控制Undo过期数据保留的“调节Tune”参数。注意:这里不是控制参数。Oracle中的控制参数起到强制作用,比如目录空间位置,归档文件存储等。但是另一部分参数起到的是目标调节的作用,比如检查点间隔控制,SGA_TARGET。

事实上,Undo_retention是一个“目标期望值”。用户设置出这个值之后,Oracle内部会尽量保证将Undo数据保留超过undo_retention设置的时间。在这个过程中,Oracle会涉及到比如尝试拓展Undo表空间数据文件、Undo Segment管理等内容。但是,如果“现实比较残酷”,比如说Undo使用紧张、没有额外的方法,那么这个时间段也是不能保证的。

(2).undo segment

undo segment可以扩展

undo segment最少有3个区

undo segment可以存储在system表空间中

(3).特点

1.undo用来保证读取一致性
2.用于闪回操作
3. redo用来闪回操作
4.undo 生成redo

32.pmon

PMON的工作内容如下:

1,监控后台进程运行状况
2,如果某些进程异常中断,PMON去释放会话资源以及占用的锁LOCK
3,更新事务表的标志以及清除事务XID的标记
4,清除异常中断会话在BUFFER CACHE占用的缓存
5,PMON也负责定期把数据库实例注册到监听器中

33.temporary table

(1).global temporary table

所有的操作都在一个事务里,事务提交后,此表清空,特别适合做插入删除频率特别高的临时表操作,比如插入完数据就开始查询,查询完就删掉等,用完就扔!
这个表是实实在在的表,这个表结构任何一个SESSION都能看到。但是每个SESSION的数据都是隔离的。定义保留在数据字典,数据保存在临时表空间里。

临时表分事务级临时表和会话级临时表。
1.事务级临时表只对当前事务有效,通过语句:ON COMMIT DELETE ROWS 指定。 (默认值)
2.会话级临时表对当前会话有效,通过语句:ON COMMIT PRESERVE ROWS语句指定。

全局临时表特点:
1.定义多个索引
2.定义视图是被引用
3.可以定义触发器
4.不能分区,不能集簇化,不能iot化
5.不能指定外键约束
6.drop临时表之前必须先truncate

(2).Private Temporary Tables

私有临时表是数据库的临时对象,私有临时表在事务或者会话结束后被自动drop掉。私有临时表定义在内存中,只能被创建他的会话看见该表的定义和数据。

私有临时表存储在临时表空间中,元数据存储在内存中。

创建私有临时表是DDL,会触发事务提交

私有临时表类别:
1.事务私有临时表(on commit drop definition)
在事务结束后drop掉私有事务临时表。
语法:create private temporary table ORA$PTT_tab1(a number) on commit drop definition;

2.会话私有临时表(on commit preserve definition):
当会话结束时,drop掉私有会话临时表
语法:CREATE PRIVATE TEMPORARY TABLE ORA$PTT_tab2(id number) ON COMMIT PRESERVE DEFINITION;

34.数据字典

1.数据字典在数据库被创建时创建。
2.被数据库服务器自动更新和维护
oracle的数据字典就是oracle存放有关数据库信息的地方。用途就是用来描述数据的。
数据库数据字典是一组表和视图结构。它们存放在SYSTEM表空间中,owned by sys 用户

按照前缀不同可以分为四类:
1、以user开头的数据字典:
包含当前用户所拥有的相关对象信息。–能够查到对象的所有者是当前用户的所有对象
user_tables;
user_views;
user_sequences;
user_constraints;
2、以all开头的数据字典:
包含当前用户有权限访问的所有对象的信息。–能够查到所有当前用户有权限访问的对象
3、以dba开头的数据字典:
包含数据库所有相关对象的信息。–只能是有dba权限的用户查询,能查到数据库中所有对象
4、以V$开头的是动态服务性能视图:
select table_name from dba_tables (sys system)

数据字典内容包括:
1,数据库中所有模式对象的信息,如表、视图、簇、及索引等。
当前用户的对象信息存放在user_objects
2,分配多少空间,当前使用了多少空间等。
3,列的缺省值。
4,约束信息的完整性。
5,Oracle用户的名字。
6,用户及角色被授予的权限。
7,用户访问或使用的审计信息。
8,其它产生的数据库信息。

(1).dynamic performance view动态性能视图

1.动态性能视图属于数据字典,它们的所有者为SYS
2.当数据库处于不同状态时,可以访问的动态性能视图有所不同。启动例程时,ORACLE会自动建立动态性能视图;停止例程时,ORACLE会自动删除动态性能视图。:
(1).NOMOUNT
启动例程时,ORACLE会打开参数文件,分配SGA并启动后台进程。因此例程处于NOMOUNT状态时,只能访问从SGA中获取信息的动态性能视图。
(2).MOUNT
装载数据库时,ORACLE根据初始化参数control_file 打开所有控制文件。当例程处于MOUNT状态时,不仅可以访问从SGA中获取信息的动态性能视图,还可以访问从控制文件中获取信息的动态性能视图。
(3).OPEN
数据库打开时,ORACLE按照控制文件所记载的信息打开所有数据文件和重做日志。除了可以访问SGA和控制文件中获取信息的动态性能视图外,还可以访问与ORACLE性能相关的动态性能视图(V$FILESTAT V$SESSION_WAIT V$WAITSTAT)

注意的是,只有处于OPEN状态时,才能访问数据字典视图。

35.nomount,mount以及open状态

oracle启动分为三步:
startup nomount ; –启动oracle例程.
alter database mount ; –读取控制文件
alter database open ; –打开数据库

36.Express Mode

Oracle Database 12C中的SQL*Loader 新增加了Express Mode,借助这个特性,可以在最小化配置的情况下加载数据(比如无需要创建Control file)

◆ 创建测试表

SYS% cdb1> conn study/study@pdb1

Connected.

STUDY% pdb1> create table test

( region      char(3),

region_name varchar2(12),

bill_month  number(6),

fee         number(10,2)

);

Table created.

STUDY% pdb1>

◆ 准备测试数据

STUDY% pdb1> host cat test.dat

530,HZ,200501,100.01

530,HZ,200502,800.23

531,JN,200501,5000.81

531,JN,200502,5360.00

532,QD,200501,20670.32

532,QD,200502,22000.08

533,ZB,200501,3050.56

533,ZB,200502,3108.14

STUDY% pdb1>

◆用SQL*Loader Express Mode快速加载数据

STUDY% pdb1> host sqlldr study/study@pdb1 TABLE=test --是不是很简单

特点:
1.可并行加载数据
2.不需要datafile

37.view

在这里插入图片描述

创建视图

create [or replace] [force] view [属主.]<view_name>
(col1, col2, ..., colN) -- 可省略
as
  select 语句
[with check option]
[with read only];
with check option

1. 对于 insert,有 with check option 时,要保证 insert 后,数据能被视图查询出来(符合 where 条件) 
2. 对于 update,有 with check option 时,要保证 update 后,数据能被视图查询出来(符合 where 条件)
3. 对于 delete,有无 with check option 都一样
4. 对于没有 where 子句的视图,使用 with check option 是多余的 

TRUNCATE TABLE stu_info; -- 清除历史数据
INSERT INTO stu_info (id, NAME, sex) VALUES (1, '瑶瑶', '女');
INSERT INTO stu_info (id, NAME, sex) VALUES (2, '倩倩', '女');
INSERT INTO stu_info (id, NAME, sex) VALUES (3, '优优', '男');
COMMIT;

CREATE OR REPLACE VIEW vw_stu_info AS (
 SELECT si.id,
        si.name,
        si.sex
   FROM stu_info SI
  WHERE si.id <= 5
) WITH CHECK OPTION;
/

-- id = 6 > 5, 不符合视图中的 where 条件会报错!!!
INSERT INTO vw_stu_info (id, NAME, sex) VALUES (6, '测试66', '男');

特点:
1.不能创建索引
2.增删改查操作不需要单独赋予权限
3.不只是能通过表来定义

38.DBMS_PRIVILEGE_CAPTURE

在12c中,oracle引入了DBMS_PRIVILEGE_CAPTURE包,可以使用该包来记录授予给用户的系统和对象权限,然后基于这些信息你就可以判断这些权限在一段时间之内是否被用到。这样,你就可以收回那些未被使用的权限,从而对用户的权限分配进行更精确的控制,使其符合权限最小化原则,以便提升系统的安全性。
在这里插入图片描述

39.virtual column(虚拟列)

1.虚拟列特点
(1)可以为虚拟列创建索引(oracle为其创建function index)
(2)可以搜集虚拟列的统计信息statistics,为CBO提供一定的采样分析。
(3)可以在where 后面使用虚拟列作为选择条件
(4)只在一处定义,不存储多余数据,查询是动态生成,不可update
(5)不能通过虚拟列创建虚拟列
(6)可以显示指定字段类型

2.语法


   HR@bear> create table inv(
    inv_id   number,
    inv_count  number,
    inv_status  generated always as 
      case  when  inv_count <= 100 then 'GETTING LOW'
            when  inv_count > 100  then 'OKAY'
      end)
    );

其中 inv_status 为虚拟列

我们插入一条数据,然后再查询,可以看到虚拟列的值会根据定义动态生成。

HR@bear> insert into inv (inv_id, inv_count) values (1, 100);
 
1 row created.
 
HR@bear> select * from inv;
 
    INV_ID  INV_COUNT INV_STATUS
---------- ---------- -----------
         1        100 GETTING LOW

40.Scalar subquery

在Oracle-SQL中,当一个子查询介于select和from之间时,这种子查询就叫做标量子查询,一个范例如下:

select a.name, a.sex, 

(select b.salary from salary b where b.deptno = a.deptno) salary

from user a; 

41.OMF

当指定了下⾯的参数之后,在创建相关对象的可以不指定路径,由ORACLE⾃动帮你创建。
1)DB_CREATE_FILE_DEST:定义数据⽂件的默认存储位置
2)DB_CREATE_ONLINE_LOG_DEST_n:定义Redo或者control files的存储位置
3)DB_RECOVERY_FILE_DEST:定义RMAN备份的存储位置

OMF适⽤于以下的数据库对象:
1)Tablespace
2)Redo log files
3)Control files
4)Archived files
5)Block change tracking files
6)Flashback logs
7)RMAN backups

42.shutdown transactional

特点:
1.在执行shutdown transactional命令之后,不允许有新的用户连接到数据库。
2.在执行shutdown transactional命令之后,所有连接到数据库的用户执行的DDL语句都无效。
3.在执行shutdowntransactional命令之后,不允许启动新的事务。
4.在执行shutdown transactional命令之后,在完成所有事务后,任何一个仍连接到实例的客户都将被解除连接。

43.locally managed tablespace

地管理(locally managed)的表空间使用在每个数据文件中存储的位图(bitmpa)来管理区(extents)

本地管理表空间提供以下好处:
1)快速的并发的空间操作。空间分配和取消分配修改本地管理的资源(存储在文件头部中的位图)。
2)增强的性能
3)允许可读的备数据库,因为本地管理的临时表空间不会道理任何undo或redo
4)简化空间分配,因为当指定AUTOALLOCATE子语句时,数据库自动选择合适的区大小。
5)减少了用户对数据字典的依赖,因为必要的信息存储在文件头部和位图块中。
6)对于本地管理的表空间,合并空闲的区是不必要的。

本地化管理的表空间的创建过程 语法 CREATE TABLESPACE 表空间名字 DATAFILE 数据文件详细信息 [EXTENT MANAGEMENT { LOCAL {AUTOALLOCATE | UNIFORM [SIZE INTETER [K|M] ] } } ]关键字EXTENT MANAGEMENT LOCAL 指定这是一个本地化管理的表空间 对于系统表空间 只能在创建数据库的时候指定EXTENT MANGEMENT LOCAL 因为它是数据库创建时建立的第一个表空间

44.五种网络服务

oracle提供了五种网络服务解析:
1、Oracle Internet Directory
2、External Naming
3、host naming
4、Oracle Easy Connect
5、local naming

(1).Oracle Internet Directory

Oracle Internet Directory:管理许多Oracle服务器的复杂网络时有优势,管理员可以在一个比较集中位置配置和管理Net Service Names。

(2).External Naming

External Naming:使用非Oracle工具管理和解析Oracle服务名称

(3). host naming

host naming:主机命名方法(客户端为windows xp,服务器端为linux+oracle 9i)

1、配置客户端的sqlnet.ora
SQLNET.AUTHENTICATION_SERVICES= (NTS)
NAMES.DIRECTORY_PATH= (TNSNAMES, HOSTNAME)

2、配置服务器端的listener.ora
LISTENER =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = linuxoracle)(PORT = 1521)) #注意HOST配置为主机名
)

 
SID_LIST_LISTENER =

(SID_LIST =

(SID_DESC =

(GLOBAL_DBNAME = linuxoracle) #注意GLOBAL_DBNAME为主机名

(ORACLE_HOME = /u01/app/oracle/product/9.2.0)

(SID_NAME = dg1)

)

(SID_DESC =

(GLOBAL_DBNAME = linuxoracle)

(ORACLE_HOME = /u01/app/oracle/product/9.2.0)

(SID_NAME = OEMREP)

)

)

3、链接:

 C:Documents and Settings ew>sqlplus system/lijie123@linuxoracle

注:

1、如果没有正确配置GLOBAL_DBNAME,sqlplus连接时,会报如下错误:

 ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务

2、ORA-12154: TNS: 无法解析指定的连接标识符。可能是客户端hosts或dns问题,打开hosts

# 102.54.94.97 rhino.acme.com # source server

# 38.25.63.10 x.acme.com # x client host

127.0.0.1 localhost

修该为:

...............................................................

# 102.54.94.97 rhino.acme.com # source server

# 38.25.63.10 x.acme.com # x client host

127.0.0.1 localhost

192.168.1.61 linuxoracle

(4).Oracle Easy Connect
1、使用oracle easy connect naming必须满足以下要求
Oracle 10g以上版本支持;
客户端及服务器端必须支持TCP/IP,并启用;
不允许高级连接描述符特性,如:连接池、外部过程调用;

2、配置oracle easy connect naming
在sqlnet.ora增加下面这行:
NAMES.DIRECTORY_PATH=(EZCONNECT,TNSNAMES) #注意增加了EZCONNECT
 
3、oracle easy connect naming方法示例
eg:
connect scott/tiger@hostname:port/servicesname
connect scott/tiger@//hostname/servicesname

解释:

语法构件 描述

// 任选:通过URL连接时使用

hostname 必选: 主机名或IP

port 任选:端口号

servicesname 必选:oracle服务的名称

(5). 本地命名法,也叫tnsnames.ora方法
客户端tnsnames.ora中添加如下内容:

TEST =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.61)(PORT = 1521))

)

(CONNECT_DATA =

(SERVICE_NAME = dg1)

)

45.Alert log

告警日志文件是一类特殊的跟踪文件(trace file)。

告警日志文件命名一般为alert_<SID>.log,其中SID为ORACLE数据库实例名称。

数据库告警日志是按时间顺序记录message和错误信息。

Alert log contents:
1:所有的内部错误(ORA-600)信息,块损坏错误(ORA-1578)信息,以及死锁错误(ORA-60)信息等。

2:管理操作,例如CREATE、ALTER、DROP语句等,以及数据库启动、关闭以及日志归档的一些信息。

    2.1 涉及物理结构的所有操作:例如创建、删除、重命名数据文件与联机重做日志文件的ALTER DATABASE命令.
    此外还涉及重新分配数据文件大小以及将数据文件联机与脱机的操作。 

    2.2 表空间操作,例如DROP与CREATE命令,此外还包括为了进行用户管理的备份而将表空间置入和取出热备份模式的操作 

3:与共享服务器或调度进程相关功能的消息和错误信息。

4:物化视图的自动刷新过程中出现的错误。

5:动态参数的修改信息。

46.非标准块表空间

1.创建非标准块表空间

show parameter db_block_size;

在这里插入图片描述
2.创建数据块大小为2k的表空间

SQL> create tablespace test2k 
datafile '/opt/oracle/app/oradata/orcl/test2k01.dbf' size 10m blocksize 2k;
*
ERROR at line 1:
ORA-29339: tablespace block size 2048 does not match configured block sizes

修改动态参数db_2k_cache_size=3m

alter system set db_2k_cache_size=3m;

创建数据块大小为2k的表空间

SQL> create tablespace test2k 
datafile '/opt/oracle/app/oradata/orcl/test2k01.dbf' 
size 10m blocksize 2k;

Tablespace created.

47.deferred_segment_creation

EFERRED_SEGMENT_CREATION 参数的作用是:创建表的时候延迟创建这个表相关的segment(包括lobs,indexes),直到第一次插入数据的时候才创建segment.

48.user authentication

(1).REMOTE_LOGIN_PASSWORDFILE

关于Oracle数据库REMOTE_LOGIN_PASSWORDFILE参数的设置
Oracle的实用程序orapwd命令可以用来创建口令文件,该命令的参数有3个:

C:/>orapwd
Usage: orapwd file=<fname> password=<password> entries=<users> force=<y/n>
  where
    file - name of password file (mand),
    password - password for SYS (mand),
    entries - maximum number of distinct DBA and     force - whether to overwrit
OPERs (opt),
  There are no spaces around the equal-to (=) character.

File参数:口令文件名称

Password参数:sys用户的口令

Entries参数:为其他特许的Oracle用户帐户保留的条目数量

在参数文件中设置初始化参数:remote_login_passwordfile
EXCLUSIVE值:该参数说明只有一个数据库可以使用这个口令文件。在这种模式下,口令文件可以包含用于多个特许的Oracle账户的口令。这是推荐的操作模式,特别是在运行RMAN时。如果希望将RMAN与来自于远程客户端的数据库连接,则必须使用该参数设置。

另外还可以设置的值有:
NONE参数:这是默认值。在这种情况下,Oracle会忽略口令文件,并且sysdba访问只给予本地特许的登录。
SHARED参数:该参数说明多个数据库可以使用相同的口令文件。这种模式只能保存SYS用户帐户的口令。

(2).password file

密码文件的位置与名称为:$ORACLE_HOME/dbs/orapw<ORACLE_SID>

[oracle@rac1 dbs]$ pwd
/u01/app/oracle/product/11.2.0/db_1/dbs
[oracle@rac1 dbs]$ ll
total 16
-rw-rw---- 1 oracle asmadmin 1544 Jul 31 17:11 hc_orcl1.dat
-rw-r--r-- 1 oracle oinstall 2851 May 15 2009 init.ora
-rw-r----- 1 oracle oinstall 35 Apr 21 17:24 initorcl1.ora
-rw-r----- 1 oracle oinstall 1536 Jul 30 21:53 orapworcl1 ## 密码文件
SQL> select * from v$pwfile_users;

USERNAME		       SYSDB SYSOP SYSAS
------------------------------ ----- ----- -----
SYS			       TRUE  TRUE  FALSE

-- 把 sysdba 权限授予普通用户 scott
SQL> grant sysdba to scott;
Grant succeeded.

/* remote_login_passwordfile= NONE | EXCLUSIVE | SHARED 说明:该参数有三个取值,含义如下: (1)NONE: 不使用密码文件,使用操作系统验证 (2)EXCLUSIVE(默认值): 密码文件验证。以独占模式使用密码文件,此时在数据库中可以执行对于 sysdba 用户的增加,修改,删除操作 (3)SHARED: 密码文件验证。密码文件可以被一台服务器上的多个数据库或者 RAC 集群数据库共享;shared 下的密码文件不可被修改,这意味着无法授权 sysdba 权限给非 sys 用户,也不允许修改 sysdba 权限用户的密码,包括 sys 用户的密码。 Oracle 建议首先将需要 sysdba 权限的用户在 exclusive 模式下设置好,然后再将 REMOTE_LOGIN_PASSWORDFILE 修改为 shared。 */

4.Oracle寻找口令文件的顺序:orapw$ORACLE_SID --> orapw --> Failure

#### 总结:

SQL> select * from v$pwfile_users;
USERNAME		       SYSDB SYSOP SYSAS
------------------------------ ----- ----- -----
SYS			       TRUE  TRUE  FALSE
SCOTT			   TRUE  FALSE FALSE

49.resumable space allocation(可恢复空间分配)

从9i开始,Oracle提供了一种避免因为space Error而导致事务异常的操作: resumable spaceallocation

1.当我们执行一个事务操作,如果使用了resumable space allocation,那么如果遇到space空间不够的情况,事务不会中断,而是生成一条alert log 发送给DBA,当DBA 解决这个问题之后,事务自动恢复运行。
2.设置resumable_timeout 之后,在指定的timeout 时间内会自动恢复,如果超过这个时间没有解决问题,事务操作还是会被中断。

50.Enterprise Manager cloud control

1.和my oracle support融合
2.提供oracle中间件管理
3.提供oracle引擎系统管理

51.order by

1.大小写敏感
2.可以使用alias name
3.复合查询不指定order by 默认使用第一个select的第一个字段作为默认排序输出。

52.index

1.unused索引没有段
2.函数索引。

SQL>drop index ind_sunwg;
SQL>create index ind_sunwg on sunwg(upper(id));
SQL>analyze table sunwg compute statistics for table for all indexes for all indexed columns;

53.dedicated server(专用服务器)

如果安装oracle时保持默认安装 那么是 dedicated 模式,官方dedicated架构
在这里插入图片描述
1.一个专有服务进程独享进程,不可复用
2.可以通过listener创建也可以不通过listener创建

54.check约束

1.建表时:
create table tbl_name(
column_name1 char(5) primary key,
column_name2 number(2),
constraint ck_name CHECK(column_name1=‘A’ or column_name1=‘B’),
constraint ck_name2 CHECK(column_name2 between 6 and 20)
)
右侧value必须是一个实际值,不能是其他列

55.替代变量 && &

在使用&&替代变量的时候,当第一次执行语句的时候会提示要输入替代变量的值,当两次执行语句的时候,就不会提示要输入替代变量的值了。因为这个替代变量的值 已经写入到session里面了

(1).set verify on/off

当在sqlplus中运行的sql语句中有替代变量(以&或&&打头)的时候,
set verify(或ver) on/off可以设置是否显示替代变量被替代前后的语句。

SQL> set ver on;
SQL> select * from dual where 1=&var;
Enter value for var: 1
old 1: select * from dual where 1=&var
new 1: select * from dual where 1=1

SQL> set ver off;
SQL> select * from dual where 1=&var;
Enter value for var: 1

& 不会写入session,每次执行都需要重新输入

56.三种模式(Template)

一般事务处理(General Purpose or Transportion Processing):许多并发用户执行许多需要快速访问数据的事务。可用性、速度、并发性和可恢复性是关键问题。

定制数据库(Custom Database):此模板允许用户在定义数据库时具有最大的灵活性,用户可以更改正在创建的数据库的任何设置。

数据仓库(Data Warehouse):用户执行大量的复杂查询,处理大量数据。响应时间、准确性和可用性是关键问题。这些查询(SELECT语句)范围从几个记录到许多不同的表中以千计的记录进行查询。

57.sequence

create sequence seq_test
   increment by 1
   start with 1
   noMaxValue 
   noCycle 
   cache 10; 

minValue: 指定序列最小值。 maxValue: 指定序列最大值。 increment by: 指定序列增长步长,可以为正(升序)、负整数(降序),但不能为0。 start with:指定序列起始数,默认为序列最小值。 noMaxValue:无最大值(实际为10^27或-1),默认。 noMinValue:无最小值(实际为1或-10^26),默认。 cycle:指定序列达到最大值或最小值后继续从头开始生成。 noCycle:不循环生成,默认。 cache:指定数据库内存中预分配的序列值个数,以便快速获取,最小cache值为2。如果系统关闭或者其它情况将会导致序列不连续,也可以设置为nocache。 noCache:不指定缓存数,默认缓存20。 order:指定order条件保证序列按请求顺序生成。 noOrder:不保证序列按请求顺序生成。

删除sequence:

drop sequence seq_test;  
drop sequence seq_test2; 

查看sequence值:

--查看sequence当前值
select seq_test.currval from dual; 
--查看sequence下一个值,sequence发生变化
select seq_test.nextval from dual;

58.dispatchers in a shared server configuration

共享服务环境中,一个客户端请求的步骤:
1、 客户端发送一个请求到调度器
2、 调度器将请求放入到请求队列中
3、 共享服务进程从请求队列中取出请求进行处理
4、 共享服务进程将处理后的结果放到调度器的响应队列中
5、 调度器从响应队列中取出结果返回给客户端

调度器执行过程:
1.从所有共享服务器连接将入站请求写入公共请求队列
2.使用共享服务器连接接收来自进程的入站请求
3.将共享服务器会话响应发送回到适当连接上的请求者

59.Database Configuration Assistant (DBCA)

1.配置数据库Vault(保险库)在ORACLE_HOME中
2.配置Label Security
3.注册新的库通过Enterprise Manager Management server
4.为新库配置增量备份

60.参数设置

(1).remote_login_passwordfile

语法:REMOTE_LOGIN_PASSWORDFILE = { shared | exclusive | none }

默认值:exclusive

通过alter system修改

此为基本参数

RAC中各实例需设定相同的值

shared

密码文件可供同一台机器上的不同数据库共享使用

密码文件可供RAC中的各实例共享使用

由于是共享的,所以该模式下密码文件不能修改

密码文件可包含sys用户和非sys用户

exclusive

密码文件只能被一个数据库使用

可修改密码文件

密码文件可包含sys用户和非sys用户

none

忽略密码文件,因此sysdba/sysoper权限必须采用操作系统认证

注意:如果参数设成shared及exclusive而没有密码文件存在,则相当于none

61.ADR(动态诊断库)

如果没有设置diagnostic_dest 初始化参数,ADR base 将会按照下面的方式设置:

1、如果设置了环境变量ORACLE_BASE ,diagnostic_dest 就设置成ORACLE_BASE指定的值。

2、如果没有设置ORACLE_BASE ,diagnostic_dest 会设置成ORACLE_HOME/log。

通过查询动态性能视图 V$diag_info 查看当前数据库实例所有重要的 ADR位置。

SQL> select * from V$diag_info;

62.sys和system用户

1.数据库的启动需要以SYSDBA/SYSOPER身份登录。

2.如果在同一主机上使用IPC连接到数据库使用操作系统授权,登录任何一个用户都可以拥有as sysdba和as sysoper。

3.sys和system用户的区别

SYS用户具有DBA权限,并具有SYS模式。只能通过SYSDBA登录数据库,是Oracle数据库中权限最高的帐号。sys用户具有“SYSDBA”和“SYSOPER”权限,登陆em时也只能用这两个身份,不能用normal。而system登录em时只能用normal模式登录。sys拥有数据字典(dictionary),或者说dictionary属于sys schema。

system用户具有DBA权限,但是没有SYSDBA权限。平常一般用该帐号管理数据库。登录em时只能使用normal登录。

63.spfile、pfile

scope参数说明:
静态参数 必须指定scope
动态参数issys_modifiable为IMMEDIATE不加scope默认的是 both
动态参数issys_modifiable为DEFERRED的必须加上scope=spfile或者加上derferred

参数类型 spfile memory both deferred
静态参数(issys_modifiable为false) 可以,重启服务器生效 不可以 不可以 不可以
动态参数(issys_modifiable为immediate) 可以,重启服务器生效 可以,立即生效,重启服务失效 可以,立即生效,重启服务器仍然有效果 可以
动态参数(issys_modifiable为deferred) 可以,重启服务器生效 不可以 不可以 可以,新建会话有效

64.错误:snapshot too old

假设你的emp表很大,你在18:00运行

select * from emp;

这个语句的输出结果应该只取决于18:00的时候emp表的数据状态,但事实上,由于emp表很大,你这个语句可能要运行10分钟,然后才看到输出结果

在18:01,有人在emp表上做了一个update,update直接做到表上了,怎样使你18:00运行的select还能看到之前的数据呢?oracle用的是查询前映的办法,即把update之前的数据放到回滚段里保存,使你的select在查询到那个block的时候,会跳转去找前映,这样可以使你的select能正确运行下去。

但可能发生这种情况,就是做update的人commit了,于是前映就有可能在被你的select访问到之前被覆盖,假如真的发生了这种情况,snapshot too old的错误就出现了 ————————

65.标量子查询

当一个子查询介于select和from之间时,这种子查询就叫做标量子查询

select a.name, a.sex, 

(select b.salary from salary b where b.deptno = a.deptno) salary

from user a; 

标量子查询类似一个天然的嵌套循环,而且驱动表固定为主表。由于嵌套循环的被驱动表的连接列(b.deptno = a.deptno)必须包含在索引中,所以标量子查询中的表连接也必须包含在索引中。

66.Database Vault

Oracle Database Vault 能够在 Oracle Database 18c 中实施功能强大的安全控制。这些独特的安全控制限制了数据库特权用户对应用数据的访问,减少了内部和外部威胁的风险,并解决了常见的合规性要求。

今天的文章【Oracle】082基础知识分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/67183.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注