oracle知识点杂记(持续更新)

本篇文章为平时学习所积累,会不断更新,读者可以从目录中寻找问题以探索答案。


1.SGA与PGA

SGA内存由所有后台和前台进程共享,PGA内存仅供分配到的会话的前台进程访问。SGA和PGA内存都可以实现自动管理。

2.确定数据库是单实例还是分布式系统的一部分

1.作为用户SYSTEM连接到数据库
2.确定实例是否是RAC(实时应用群集)数据库的一部分:
select parallel from v$instance;
如果是单实例数据库,那么将返回NO。
3.确定数据库是否通过备用数据库的保护来防止数据丢失:
select protection_level from v$database;
如果数据库的确未受到保护,那么将返回UNPROTECTED。
4.确定是否在数据库中配置了流:
select * from dba_streams_administrator;
如果尚未配置流,那么将不返回任何行。

3.哪些SGA结构是必须的,哪些是可选的?

数据库缓冲区缓存、日志缓冲区和共享池是必须的,而大池、JAVA池和流池是可选的。

4.实例内存的管理

1.可以动态调整数据库缓冲区缓存的大小,也可以对其进行自动管理。
2.日志缓冲区大小固定不变,在启动实例时被设置为固定值,无法对其进行自动管理。
3.共享池的大小是动态的,可以对其进行自动管理。
4.大池的一个主要用途是供共享的服务器进程使用。大池的大小可以动态调整,而且可以自动管理。
5.java池用作实例化java对象所需的堆空间。java池的大小可以动态调整,而且可以自动管理。

5.了解实例的内存结构

1.作为用户SYSTEM连接到数据库
2.显示可以动态重设大小的SGA组件的当前、最大和最小的容量
select component,current_size,min_size,max_size from v$sga_dynamic_components;
3.确定已为程序全局区分配了多少内存
select name,value from v$pgastat where name in ('maximum PGA allocated','total PGA allocated');


6.数据库必须包含的3类文件

oracle数据库必须的文件是控制文件(controlfile)、联机重做日志文件(online redo log file)和数据文件(datafile)。通常所说的外部文件(还有一些是高级选项需要的)是初始化参数文件、口令文件、归档重做日志文件以及日志和跟踪文件。

7.联机重做日志文件

就每个数据库而言,要保证其正常运行,必须有至少两个联机重做日志文件组;要保证安全,每组至少要有两个成员。

8.数据文件

服务器进程对数据文件执行读操作,而DBWn对数据文件执行写操作。

9.哪个视图显示数据库中所有的表?

是DBA_TABLES,而不是ALL_TABLES


10.Data Pump

替换导出和导入的是10g版本中引入的Data Pump。Data Pump的功能和导出导入十分相似:它从一个数据库提取数据,将数据写出到文件,并将数据插入到另一个数据库(目标数据库可能属于不同版本,在不同平台上运行),但实现方法却背道而驰。Data Pump使用后台进程,而非服务器进程来读写数据,这使得处理速度大大加快。由客户端-服务器会话来启动、控制和监视Data Pump作业,但作业本身全部在实例中运行。虽然导出和导入操作仍然受到支持,但Data Pump是首选的实用程序。只有Data Pump才能读取由Data Pump生成的文件,与导出和导入不存在任何兼容性。
注意:Data Pump仅能读取由Data Pump生成的文件。但对于SQL*Loader而言,只要由任何第三方产品生成的文件的格式可以解析,SQL*Loader就可以读取相应文件。

11.实例、数据库和数据字典

oracle服务器由实例和数据库构成。二者是独立的,但是又联系在一起。实例是RAM和CPU中的内存结构和进程,其存在是暂时的,用户可以启动和停止实例。数据库是磁盘上的文件,一旦创建,将永久存在,直至删除为止。创建实例只不过就是构建内存结构并启动进程。创建数据库的任务由实例一次性完成。此后,实例可以多次打开和关闭数据库。如果离开了实例,数据库的存在将失去意义。
在数据库中,有一组称为“数据字典(data dictionary)”的表和其他段。数据字典描述数据库中的所有逻辑和物理结构,其中包括存储用户数据的所有段。
创建数据库的过程就是创建存储数据字典需要的最小限度的物理结构,然后在其中创建数据字典。
实例由实例参数文件(parameter file)定义。参数文件包含着定义如何在内存中内置实例的指令:内存结构的大小,后台进程的行为。构建实例后,实例将处于“不加在(no mount)”模式。在此模式中,实例是存在的,但没有连接到数据库。实际上,此时甚至并不存在数据库。
所有参数(通过参数文件指定,或隐式指定)都具有默认值,但DB_NAME参数例外。DB_NAME参数给出实例将连接到的数据库的名称。此名称也嵌套在控制文件中。CONTROL_FILES参数将控制文件的位置告知实例。此参数定义实例和数据库之间的连接。当实例读取控制文件时(通过读取CONTROL_FILES参数来查找),如果数据库名称不匹配,将不会加在数据库。加载模式(mount mode)表明实例已经成功的连接到控制文件。如果控制文件受损或不存在,那么将无法加载数据库。控制文件虽然小,但是起着至关重要的作用。
控制文件包含指向构成数据库其余部分的其他文件(联机重做日志文件和数据文件)的指针。加载数据库后,实例通过查找并打开其他文件从而打开数据库。所谓打开的数据库,即实例已打开了所有可用联机重做日志文件和数据文件的数据库。控制文件中包括数据文件和表空间的映射。这允许实例确定构建SYSTEM表空间的数据文件。在SYSTEM表空间中,它将找到数据字典。使用数据字典,实例可用将SQL代码中提到的对象的引用解析为引用所在的段,然后计算出这些对象的物理位置。
开始时与数据库一起创建的数据字典功能完备,但并无用处。它能够定义和管理用户数据,但不能供人使用,因为此时的结构过于晦涩难懂。要让用户或DBA能够真正使用数据库,必须基于数据字典创建一组视图,从而以人们能够理解的格式呈现数据字典。
通过运行oracle_home/rdbms/admin目录中的一组SQL脚本来创建数据字典本身。这一过程由create database命令调用。第一个是sql.bsq,此脚本将接着调用其他多个脚本。这些脚本发出一系列命令来创建构成数据字典的所有表和其他对象。
oracle_home/rdbms/admin目录中的其他脚本(前缀为“cat”)生成使数据库可以使用的视图和其他对象。例如catalog.sql和catproc.sql,应该始终在创建数据库后立即运行。还有其他很多将启动某些功能的可选“cat”脚本——其中的一些可在创建时运行,剩下的可能随后运行以便日后安装新功能。

12.DB_NAME参数

只有一个实例参数没有默认值,这个参数是DB_NAME。参数文件至少要包含这个参数,否则无法启动实例。DB_NAME的长度不超过8个字符,只能包含字母和数字,必须以字母开头。

13.SYSDBA与SYSOPER

SYSDBA和SYSOPER并非用户,而是可以授予用户的权限。默认方式下,在未将这些权限专门授予其他用户之前,只有SYS用户才拥有这些权限。

14.静态参数文件与动态参数文件

因为在实例启动时只被读取一次,所有Init文件被认为是“静态的”参数文件。因为Oracle在实例运行时会不断地读取和更新spfile文件,所以这种文件被称为是“动态的”参数文件。区分参数文件的类型十分重要,因为有一个参数不具有默认值:DB_NAME参数。

15.系统权限

系统权限大多数都应用于影响数据字典的操作,如创建表或用户,其他的影响数据库或实例,如创建表空间、调整实例参数值或建立会话。
如果从用户撤销权限,用户使用相应权限执行的任何操作(如创建表)将完好无缺。另外,如果用户被授予带有ADMIN OPTION的权限,那么即使对其做了撤销,他授予了权限的任何用户将保留权限。不保存系统权限授予的记录,故不存在撤销级联(这与撤销对象权限不同)

16.ANY权限

ANY权限针对数据库中的每个用户账户中的每个对象授权,是系统权限,而不是对象权限。

17.预先定义的角色

在Oracle数据库中,至少有50个预先定义的角色(角色的数量可能比这还多,取决于安装的选项)。每个DBA都必须熟悉的角色如下:
1.CONNECT 此角色的存在只是为了达到向后兼容的目的。在先前的版本中,它具有创建数据存储对象(如表)的系统权限。而在此版本中,它仅有CREATE SESSION权限。
2.RESOURCE 也是用于先后兼容,此角色可以创建数据对象(如表)和过程对象(如PL/SQL过程)。该角色还包括UNLIMITED TABLESPACE权限。
3.DBA 拥有大多数系统权限,以及多个对象权限和角色。任何被授予DBA权限的用户几乎可以管理数据库的所有方面(启动和关闭除外)。
4.SELECT_CATALOG_ROLE 拥有针对数据字典对象的2000多个对象权限,但没有系统权限或针对用户数据的权限。这对新管理员有用,这些人必须监视数据库并报告数据库情况,但看不到用户数据。
5.SCHEDULER_ADMIN 拥有用于管理调度服务的调度程序作业所需的系统权限。

18.配置文件

配置文件(profile)具有双重功能:实施口令策略并限制会话可以占用的资源。 始终要实施口令控制,而对于资源限制,则只有实例参数RESOURCE_LIMIT为TRUE时(默认为FALSE)才会实施。系统将自动使用配置文件,但默认的配置文件(默认方式下应用于所有用户,包括SYS和SYSTEM)作用很小。

19.约束

1.unique

对于具有UNIQUE约束的列,可以插入多个包含NULL的行。而对于包含PRIMARY KEY约束的列而言,则不存在这种可能性。

2.primary key

UNIQUE和PRIMARY KEY约束需要索引。如果不存在,就会自动予以创建。

3.foreign key

外键约束在子表上定义,但此时的父表上必须存在UNIQUE或PRIMARY KEY约束。

20.序列currval

序列的CURRVAL是发送给当前会话的上一个值,不一定是发出的上一个值。直到选择了NEXTVAL后才能选择CURRVAL。

21.公有同义词

“公有同义词”中的“公有”意味着它不是模式对象,因此不能用模式名做前缀。这并不意味着每个人都具有对公有同义词的访问权限。

22.控制文件

控制文件存储数据库物理结构的详细信息,并且是链接到逻辑结构的起点。当某个实例打开数据库时,它首先要读取控制文件,通过使用控制文件中的信息,实例可以连接到数据库的其余部分及其中的数据字典。

23.分布式环境中组合实例与数据库的方式

1.实时应用群集(Real Application Clusters,RAC),多个实例打开一个数据库
2.流,多个Oracle服务器相互之间传播事务
3.数据保护,主数据库更新备用数据库

24.DBWn执行写操作的四种情况

1.没有任何可用缓冲区
2.脏缓冲区过多
3.遇到3秒超时
4.遇到检查点

25.LGWR转储日志缓冲区的三种情况

1.会话发出COMMIT
2.日志缓冲区占用率达1/3
3.DBWn要写入脏缓冲区

26.联机重做日志文件

就每个数据库而言,要保证其正常运行,至少必须有两个联机重做日志文件组;要保证安全,每组至少要有两个成员。

27.实例参数文件(instance parameter file)

当启动oracle实例时,SGA结构会根据此参数文件的设置内置到内存,后台进程会据此启动。这是启动实例所需的唯一文件。其中的参数有数百个,但只有一个是必须的,它就是DB_NAME参数。其他所有参数都有默认值。因此说,此参数文件可以很小,但必须存在。有时称它为pfile或spfile。

28.口令文件(password file)

用户通过提交用户名和口令建立会话。oracle根据存储在数据字典的用户定义对用户名和口令进行验证。数据字典是数据库中的一组表,如果未打开数据库,将无法对其进行访问。有时,需要在使用数据字典前对用户进行身份验证:在需要启动数据库时或创建数据库时。外部口令文件是完成此任务的一种方式。它包含存在于数据字典之外的少量用户名和口令(通常少于6个),这些用于在使用数据字典前连接到实例。

29.归档重做日志文件(archive redo log file)

当联机重做日志文件变满时,ARCn进程会将联机重做日志文件从数据库复制到归档日志文件中。在完成后,归档日志就不再是数据库的一部分,因为它不是连续的数据库操作所必须的。但是,如果需要还原数据文件备份,它将起到重要的作用。oracle提供了用于管理归档重做日志文件的功能。

30.警报日志和跟踪文件(alert log and trace files)

警报日志是影响实例和数据库的某些重要操作的相关信息的连续流。并非所有事项都予以记录:只记录认为确实重要的文件,例如启动和关闭、更改数据库的物理结构和更改控制实例的参数。后台进程会在检测到错误条件时生成跟踪文件。有时也用于报告特定事件。

31.哪个视图显示数据库所有的表

是DBA_TABLE,不是ALL_TABLES。

32.脱机备份优缺点

1.优点:
只需要拷贝文件,速度比较快;
将文件拷贝回去,数据库就可以恢复到某个时间点;
若结合数据库归档模式可以很好的恢复数据库;
维护量相对较少,但安全性相对较高
2.缺点:
脱机备份时,数据库必须关闭;
单独使用脱机备份,数据库只能基于某一时间点恢复;
若磁盘空间有限,使用磁带等外设时速度较慢;
脱机备份不能按表或用户恢复

33.联机备份优缺点

1.优点:
可在表空间和数据文件级备份,备份时间短;
备份时数据库仍可使用;
可达到秒级恢复(恢复到某一时间点上);
可对几乎所有数据库实体做恢复;
恢复快速,大多数情况下恢复不需要关闭数据库
2.缺点:
不能出错,否则后果严重;
若联机备份不成功,所得结果不能用于时间点的恢复;
因难于维护,所以要特别小心,不允许以失败告终

34.ORACLE默认日期格式修改

alter session set nls_date_format='yyyy-mm-dd';

35.TRUNCATE与DELETE

truncate清空速度快,不写日志,无法恢复;
delete删除速度慢,写日志,可以恢复;

36.使用NVL处理NULL值

一个人的年工资等于12个月的月工资加12个月的奖金,如果没有奖金的话,写成如下sql:
select sal*12+jiangjin*12 "年工资",name from emp;
会出现年工资一列只显示有奖金的人的工资,可以用如下sql处理此问题:
select sal*12+nvl(jiangjin,0)*12 "年工资",name from emp;

37.ORACLE分页

<span style="font-weight: normal;"><span style="font-size:10px;">select * from (select a1.*,rownum rn from (select * from emp) a1 where rownum<=10) where rownum>=6;</span></span>

指定修改列,只需修改最里层的子查询

38.UNION、UNION ALL、INTERSECT、MINUS

<span style="font-weight: normal;">select ename,sal,job from emp where sal>2500 union select ename,sal,job from emp where job='MANAGER';</span>
假设sal>2500条件下有5条数据,job='MANAGER'条件下有8条,相同的有2条,则union结果中有11条,union all有13条,intersect有2条,minus(差集)有3条

39.trunc与round函数

round(n,[m])该函数用于执行四舍五入,如果省掉m,则四舍五入到整数;如果m是正数,则四舍五入到小数点的m位后,如果m是负数,则四舍五入到小数点的m位前;trunc(n,[m])该函数用于截取数字,如果省掉m,则截去小数部分;如果m是正数,则截取到小数点的m位后,如果m是负数,则截取到小数点的m位前。如下:
select sal from emp where name='jones';
显示的是12.145;
select round(sal,2) from emp where name='jones';
显示12.15;
select trunc(sal,2) from emp where name='jones';
显示12.14;

40.floor与ceil函数

floor(n)返回小于或是等于n的最大整数(向下取整),ceil返回大于或是等于n的最小整数(向上取整)。如下:
select sal from emp where name='jones';
显示的是12.145;
select floor(sal) from emp where name='jones';
显示12;
select ceil(sal) from emp where name='jones';
显示13;

41.user_tables、all_tables、dba_tables

1.user_tables:用于显示当前用户所拥有的所有表,它只返回用户所对应方案的所有。
select table_name from user_tables;
2.all_tables:用于显示当前用户可以访问的所有表,它不仅会返回当前用户方案的所有表,还会返回当前用户可以访问其他方案的表。
select table_name from all_tables;
3.dba_tables:它会显示所有方案拥有的数据库表。但是查询这种数据库字典视图,要求用户必须是dba角色或是有select any table 系统权限。

42.用户名、权限、角色

在建立用户时,oracle会把用户的信息存放到数据字典中,当给用户授予权限或是角色时,oracle会将权限和角色的信息存放到数据字典。
通过查询 dba_users可以显示所有数据库用户的详细信息;
通过查询数据字典视图 dba_sys_privs,可以显示用户所具有的系统权限;
通过查询数据字典视图 dba_tab_privs,可以显示用户所具有的对象权限;
通过查询数据字典视图 dba_col_privs,可以显示用户所具有的列权限;

通过查询数据字典视图dba_role_privs,可以显示用户所具有的角色。

43.重要查询(权限)

1.查询oracle中所有的系统权限,一般是dba
select * from system_privilege_map order by name;
2.查询oracle中所有的角色,一般是dba
select * from dba_roles;
3.查询oracle中所有对象权限,一般是dba
select distinct privilege from dba_tab_privs;
4.查询数据库的表空间
select tablespace_name from dba_tablespaces;
5.查询一个角色包括的权限
1)角色包括的系统权限
select * from dba_sys_privs where grantee='DBA';
或者
select * from role_sys_privs where role='DBA';
2)角色包括的对象权限
select * from dba_tab_privs where grantee='DBA';
6.如何查看一个用户具有什么样的角色
select * from dba_role_privs where grantee='用户名';

44.表空间的创建语句

create tablespace sp001 datafile 'd:\sp001.dbf' size 20m uniform size 128k;

45.删除表空间

一般情况下,由特权用户或是DBA操作,如果是其他用户操作,那么要求用户具有drop tablespace系统权限
drop tablespace '表空间' including contents and datafiles;
说明:including contents 表示删除表空间时,删除该空间的所有数据库对象,而datafiles表示将数据库文件也删除。

46.系统权限与对象权限授权级联

系统权限授权级联后面为with admin option,回收后不级联;
对象权限授权级联后面为with grant option,回收后级联。

























你可能感兴趣的:(oracle,杂记)