ORACLE数据字典(DD)
数据字典的结构是基表和视图,记录了数据库的系统信息, 其所有者为SYS。它由内部RDBMS(X$)表,数据字典表($),动态性能视图(v$)和数据字典视图(all_,user_,dba_)组成。当执行DDL语句时,数据库修改数据字典。数据字典视图有三种:ALL_xxx,USER_xxx,DBA_xxx。
(dba_tables、user_tables、all_tables、dba_users、dba_sys_privs(用户所具有的系统权限)、dba_tab_privs(用户所具有的对象权限)、dba_col_privs(用户所具有的列权限)、dba_role_privs(用户所具有的角色)、dba_jobs(sql执行计划))。
动态性能视图(Dynamic Performance Tables)
是一组虚表(Virtual tables),记录数据库当前的活动情况,从内存和控制文件中获取信息,所有者为SYS,以v$开头,v$fixed_table(一览表);(v$controlfile、v$database、v$datafile、v$instance、v$logfile、v$parameter、v$session、v$SGA、v$spparameter、v$tablespace、v$thread、v$version、v$db_cache_advice(buffer cache命中率)) 诊断IO、CPU性能状况的方法:
查询并分析v$system_event/v$session_event(db file sequent )/v$session_wait(p1-p3的值.file_id/block_id/blocks)可查询Oracle系统的性能(包括CPU/IO/其他性能状况); 查询并分析v$sqlarea(disk_reads或buffer_gets/executions较大的SQL)。
实例(instance)
实例是用来访问数据库文件集的存储结构以及后台进程的集合,它是存取和控制数据库的软件机制。ORACLE实例分为单进程实例和多进程实例。 实例是由内存结构和进程结构组成的;
内存结构:基本的内存结构有系统全局区(SGA)和程序全局区(PGA)。 系统全局区(SGA):是系统为实例分配的一组共享缓冲存储区。它分为: 数据高速缓存区(Database Buffer Cache):用来存储最近访问的数据块信息。由DB_CACHE_SIZE决定,它的大小由数据库实例init.ora中的DB_BLOCK_BUFFERS决定,ORACLE用LRU(最近最少算法)来管理可用空间。它分为脏列表、LRU(Least Recently Used)列表(空闲缓冲块、正在存取的缓冲块、已被修改但未被移到脏列表的缓冲块) SQL共享池(Share Pool):存放最近执行的SQL语句和数据字典信息。大小由SHARED_POOL_SIZE决定。分为字典缓存区(Database Dictionary Buffer
Cache)和库缓存区(共享SQL区和PL/SQL区);share pool的空闲量(诊断其性能):select inst_id,bytes from gv$sgastat; 空闲大小:select value from v$parameter where name=’shared_pool_size’;
重做日志缓存区(Redo Log Buffer Cache):在重做项被写到重做日志前,事物先被写到重做日志缓冲区中,它的大小由init.ora中的LOG_BUFFER决定。
大池;Java池;
进程结构:
用户进程:用于执行一个应用程序的软件代码,用户进程同服务器进程进行通信是通过程序接口完成的。
服务器进程:ORACLE创建服务器进程来处理来自连接上的用户进程的请求。一个服务器进程负责同用户进程的会话。
后台进程:为了增强用户进程运行的ORACLE程序处理的功能。
几个重要的后台进程:
数据写(DBWn):数据库书写器进程,从数据高速缓存区中将修改的数据块(脏缓冲区)写入到数据文件中,并使用LRU算法来保持缓冲区中的数据块为最近经常使用的,以减少I/O次数。该进程在启动实例时自动启动。
日志写(LGWR):日志书写器将重做日志写入日志文件中。重做日志的实体是在SGA的重做日志缓冲区中生成的,LGWR将重做日志实体写入到重做日志文件中。该进程在启动实例时自动启动。
系统监视器(SMON):在一个失败实例进程启动的时候执行崩溃回复,将数据字典中空闲的区域连接起来变成连续的。
1. redo:重新应用被记载到重做日志但未写入数据文件的数据。
2. undo:取消未提交的数据。在打开数据库之后,Oracle自动使用undo段回退未提交的数据。
进程监视器(PMON):在用户进程失败的时候重新创建进程。
检查点(CKPT)
归档(ARCH)
ORACLE数据库的启动与关闭
启动:
1. nomount(非安装启动):NONOUNT选项仅仅创建一个Oracle实例。读取
init.ora初始化参数文件、启动后台进程、初始化系统全局区(SGA)。Init.ora文件定义了实例的配置,包括内存结构的大小和启动后台进程的数量和类型等。实例名根据Oracle_SID设置,不一定要与打开的数据库名称相同。
2. mount(安装启动):创建实例并且安装数据库,但没有打开数据库。Oracle系
统读取控制文件中关于数据文件和重作日志文件的内容,但并不打开该文件。这种打开方式常在数据库维护操作中使用,如对数据文件的更名、改变重作日志以及打开归档方式等。
3. open(打开):创建实例、安装实例和打开数据库的所有三个步骤。此时数据库使
数据文件和重作日志文件在线,通常还会请求一个或者是多个回滚段。这时系统除了可以看到前面Startup Mount方式下的所有提示外,还会给出一个"数据库已经打开"的提示。此时,数据库系统处于正常工作状态,可以接受用户请求。
其他打开方式:
STARTUP RESTRICT:数据库将被成功打开,但仅仅允许一些特权用户(具有DBA角
色的用户)才可以使用数据库;startuppfile=参数文件名:带初始化参;关闭:;
1. shutdown normal:发出该命令后,任何新的连接都将再不允许连接到数据库。
在数据库关闭之前,Oracle将等待目前连接的所有用户都从数据库中退出后才开始关闭数据库。采用这种方式关闭数据库,在下一次启动时不需要进行任何的实例恢复。
2. shutdown immediate:常用的一种关闭数据库的方式,想很快地关闭数据库,
但又想让数据库干净的关闭,常采用这种方式。当前正在被Oracle处理的SQL语句立即中断,系统中任何没有提交的事务全部回滚。如果系统中存在一个很长的未提交的事务,采用这种方式关闭数据库也需要一段时间(该事务回滚时间)。系统不等待连接到数据库的所有用户退出系统,强行回滚当前所有的活动事务,然后断开所有的连接用户。
3. shutdown transactional:该命令常用来计划关闭数据库,它使当前连接到
系统且正在活动的事务执行完毕,运行该命令后,任何新的连接和事务都是不允许的。在所有活动的事务完成后,数据库将和SHUTDOWN IMMEDIATE同样的方式关闭数据库。
4. shutdown abort:关闭数据库的最后一招,也是在没有任何办法关闭数据库的
情况下才不得不采用的方式,一般不要采用。如果下列情况出现时可以考虑采用这种方式关闭数据库。