第11章 管理数据文件
■创建数据文件的SQL语句及说明
CREATE TABLESPACE 创建一个表空间和组成它的数据文件
CREATE TEMPORARY TABLESPACE 创建一个临时表空间和组成它的临时数据文件(临时数据文件
是一种特殊类型的数据文件)
ALTER TABLESPACE ... ADD DATAFILE 创建并添加一个数据文件到表空间
ALTER TABLESPACE ... ADD TEMPFILE 创建并添加一个临时数据文件到临时表空间
CREATE DATABASE 创建一个数据库和关联的数据文件
■创建表空间
SQL> create tablespace myts04
2 datafile '/export/home/opt/product/10.1.0.3.0/oradata/ldfsys/myts04_1.dbf' size 2m
3 autoextend on
4 next 1m
5 maxsize 5m
■向空间里添加数据文件并指定自动增长方式
SQL> alter tablespace myts02
2 add datafile '/export/home/opt/product/10.1.0.3.0/oradata/ldfsys/myts02_2.dbf' size 4m
3 AUTOEXTEND ON
4 NEXT 4K
5 MAXSIZE 5M;
■更改原有数据文件为自动增长方式
SQL> ALTER DATABASE
2 DATAFILE '/export/home/opt/product/10.1.0.3.0/oradata/ldfsys/myts01_3.dbf'
3 AUTOEXTEND ON
4 NEXT 2K
5 MAXSIZE 5M;
■取消自动增长方式
SQL> alter database
2 datafile '/export/home/opt/product/10.1.0.3.0/oradata/ldfsys/myts01_3.dbf'
3 autoextend off;
■改变原数据文件大小
SQL> alter database
2 DATAFILE '/export/home/opt/product/10.1.0.3.0/oradata/ldfsys/myts02_2.dbf' resize 5m;
也可以利用RESIZE子句来缩小数据文件,不过必须保证缩小后的数据文件足够容纳其中已有的数据
■在ARCHIVELOG模式下使数据文件脱胎机
SQL> alter database
2 datafile '/export/home/opt/product/10.1.0.3.0/oradata/ldfsys/myts02_2.dbf' offline;
■在NOARCHIVELOG模式中使数据文件脱机
要注意,这会使数据文件脱机并立即删除它,所以,很可能导致丢失数据文件,这种方法一般只用于临时表空间
的临时数据文件.
SQL> alter database
2 datafile '/export/home/opt/product/10.1.0.3.0/oradata/ldfsys/myts02_2.dbf' offline drop;
在这之后,如果要使数据文件联机,必须进行介质恢复,否则会有错误提示.
■修改表空间中所有数据文件的可用性
ALTER TABLESPACE ... DATAFILE { ONLINE | OFFLINE }
ALTER TABLESPACE ... TEMPFILE { ONLINE | OFFLINE }
表空间本身的联机或脱机状态不改变()
■修改整个表空间的可用性
ALTER TABLESPACE ... { ONLINE | OFFLINE }
■同一个表空间的数据文件的重命名
当改变数据文件的位置和名称时,Oracle只是在控制文件和数据字典中改变了数据文件的指针,并没有物理
地创建新的数据文件,也没有重定位和重命名任何操作系统文件.DBA必须自己在操作系统层复制文件,并重
定位或重命名数据文件.
SETUP1 SQL> alter tablespace myts04 offline normal;
将表空间设置为脱机状态是为了关闭该表空间中所有的数据文件,以便在停止数据库服务时不会造成
数据出现问题
SETUP2 SQL> shutdown immediate
如果不停止数据库服务就重命名数据文件,会出现错误提示.
SETUP3 将数据文件myts04_1.dbf重新命名为myts04_01.dbf、myts04_2.dbf重新命名为myts04_02.dbf
SETUP4 SQL> startup
SETUP5 SQL> alter tablespace myts02
rename datafile
'/export/home/opt/product/10.1.0.3.0/oradata/ldfsys/myts04_1.dbf',
'/export/home/opt/product/10.1.0.3.0/oradata/ldfsys/myts04_2.dbf'
to
'/export/home/opt/product/10.1.0.3.0/oradata/ldfsys/myts04_01.dbf',
'/export/home/opt/product/10.1.0.3.0/oradata/ldfsys/myts04_02.dbf';
SETUP6 SQL> alter tablespace myts04 online;
■多个表空间的数据文件的重定位和重命名
SETUP1 SQL> alter tablespace myts01 offline normal;
SQL> alter tablespace myts02 offline normal;
SETUP2 SQL> shutdown immediate
SETUP3 将myts01表空间的数据文件myts01_1.dbf重新命名为myts01_01.dbf、
将myts02表空间的数据文件myts02_1.dbf重新命名为myts02_01.dbf、
SETUP4 SQL> startup
SETUP5 SQL> alter database
rename file
'/export/home/opt/product/10.1.0.3.0/oradata/ldfsys/myts01_1.dbf',
'/export/home/opt/product/10.1.0.3.0/oradata/ldfsys/myts02_1.dbf'
to
'/export/home/opt/product/10.1.0.3.0/oradata/ldfsys/myts01_01.dbf',
'/export/home/opt/product/10.1.0.3.0/oradata/ldfsys/myts02_01.dbf';
SETUP6 SQL> alter tablespace myts01 online;
alter tablespace myts02 online;
■查询数据文件信息
DBA_DATA_FILES
DBA_TEMP_FILES
DBA_EXTENTS
USER_EXTENTS
DBA_FREE_SPACE
USER_FREE_SPACE
V$DATAFILE
V$DATAFILE_HEADER
■查看数据文件与表空间
SELECT f.tablespace_name "表空间",
Decode(d.EXTENT_MANAGEMENT,'DICTIONARY','字典','本地') "表空间类型",
TRUNC(SUM(f.bytes/1024000),2 ) || 'MB' "自由空间",
MIN(f.bytes) "最小字节", MAX(f.bytes) "最大字节",
AVG(f.bytes) "平均字节",COUNT(f.tablespace_name) "分布在"
FROM dba_free_space f, dba_tablespaces d
Where f.tablespace_name = d.tablespace_name
GROUP BY f.tablespace_name ,d.EXTENT_MANAGEMENT
============================
第12章 管理重做日志文件
■日志切换
SQL> alter system switch logfile;
■增加重做日志文件组
SQL> alter database add logfile
2 group 4 ('/export/home/opt/product/10.1.0.3.0/oradata/ldfsys/redo04.log') size 10m;
■增加重做日志文件组成员
SQL> alter database add logfile member
2 '/export/home/opt/product/10.1.0.3.0/oradata/ldfsys/redo04_1.log' to group 4;
■查看组及成员的状态信息
SQL> select group#,members,status from v$log;
■查看重做日志文件是否归档了
SQL> select group#,members,status,archived from v$log;
■查看重做日志文件的状态
SQL> select * from v$logfile;
如果Oracle不能访问重做日志文件,那么该文件将变成INVALID状态.
如果Oracle查出重做日志文件不完整或不正确,那么该文件将变成STALE状态(许久未用状态).当下次失效
日志文件所属的组变成活动组时,该失效日志文件才会再次变成有效状态
■删除重做日志文件组成员
SQL> alter database drop logfile member
2 '/export/home/opt/product/10.1.0.3.0/oradata/ldfsys/redo04_1.log';
■删除重做日志文件组
SQL> alter database drop logfile group 4;
当从数据库中删除了重做日志文件组或成员后,实际上并没有将该成员使用的操作系统文件从磁盘中删除掉,
也就是说,此时只是更新了相关数据库的控制文件,以便从数据库结构中删除该成员或组,所以在删除该成员
或组后,先要确定删除操作成功完成,然后使用合适的操作系统命令来删除对应的重做日志文件或组.
■清除重做日志文件组(重新初始化重做日志文件组)
SQL> alter database clear logfile group 4;
■清除损坏了的重做日志文件并且避免归档这些日志
SQL> alter database clear unarchived logfile group 4;
■改变重做日志组成员的位置或名称
SETUP1 暂停其它用户使用数据库
SETUP2 确定重做日志组的状态,只能改变处于INACTIVE和UNUSED状态
SQL> select group#,status from v$log;
SETUP3 使用操作系统命令对重做日志组成员进行更名或位置变更
SETUP4 修改控制文件中重做日志组成员的指针
SQL> alter database rename file
2 '/export/home/opt/product/10.1.0.3.0/oradata/ldfsys/redo04.log'
3 to
4 '/export/home/opt/product/10.1.0.3.0/oradata/ldfsys/new_redo04.log';
■查看重做日志文件信息
V$LOG 来自于控制文件的重做日志文件信息
V$LOGFILE 重做日志文件组及其成员以及成员的状态
V$LOG_HISTORY 重做日志文件的历史信息
============================
第13章 创建和删除数据库 2006.12.04
■查看使用的服务器参数文件
SQL> show parameter spfile;
■利用服务器参数文件创建文本参数文件
SQL> create pfile from spfile;
SQL> create pfile[='...'] from spfile[='...'];
■创建服务器参数文件
SQL> create spfile from pfile='...';
不指定spfile名称,默认为:spfile$ORACLE_SID.ora
或
SQL> create spfile='.../new_spfile.ora' from pfile='...';
■更改初始化参数
scope=spfile 只更改服务器参数文件中的参数.效果是:对于动态参数,这种更改将在下一次启动时
生效并一直保留;对于静态参数,效果与动态参数一样,只有这种更改的SCOPE子句用
于静态参数
SCOPE=MEMORY 只更改内存中的参数.效果是:对于动态参数,这种更改立即生效,但是因为没有更新
服务器参数文件,所以更改不能永久保留;对于静态参数,不允许这样更改
SCOPE=BOTH 既更改服务器参数文件中的参数,也更改内存中的参数.效果是:对于动态参数,这种
更改立即生效并且永久保留;对于静态参数,不允许这样更改
如果服务器没有使用服务器参数文件,那么在指定SCOPE=SPFILE或SCOPE=BOTH时将会出错.
如果使用服务器参数文件来启动例程,默认设置为SCOPE=BOTH;如果使用传统的文本初始化参数文件启动例程,
默认设置为SCOPE=MEMORY.
对于动态参数,可以指定DEFERRED关键字.如果指定了这个关键字,则更改将只影响将来的会话
■改变实例允许的工作队列进程的最大数目,也指定了一条注释,并在内存是中进行更改
SQL> alter system set job_queue_processes=50
comment='temporary change on 2006.12.05'
scope=memory;
■查看初始化参数
show parameters
SQL> show parameters db_recovery_file_dest;
■V$PARAMETER该视图显示当前正在使用的参数值
SQL> select name, value from v$parameter
where ;
■V$SPPARAMETER该视图显示服务器参数文件的当前内容.如果实例没有使用服务器参数文件,那么该视图将返回
NULL(空)值.
SQL> select name,value from v$spparameter
where ;
============================
第14章 启动和关闭数据库 2006.12.05
■监听程序
#lsnrctl start ---> 启动
#lsnrctl stop ---> 停止
#lsnrctl status ---> 状态
#lsnrctl help ---> 帮助
■一个例程只能访问一个数据库,而一个数据库可以由多个例程同时访问.
例程由一组逻辑内存结构和一系列后台服务进程组成.
在启动数据库的过程中,文件的使用顺序是:参数文件、控制文件、数据文件和重做日志文件.
■启动模式
nomount模式 启动例程,但不装载数据库,即只完成启动步骤的第1步。(读取参数文件)
mount模式 启动例程,并装载数据库,但不打开数据库。即,只完成启动步骤的第1和第2步。
open模式 启动例程,装载数据、打开数据库、即完成全部3个启动步骤.
启动语法
startup [nomount|mount|open|force] [restrict] [PFILE=filename];
■NOMOUNT选项
只创建例程,不装数据库,读取参数文件,为例程创建各种内存结构和后台服务进程,用户能与数据库进行通信,
但不能使用数据库中的任何文件.
如果要执行下列维护工作,就必须用NOMOUNT选项启动数据库
◆ 运行一个创建新数据的脚本
◆ 重建控制文件
在NOMOUNT启动模式下,只能访问那些与SGA区相关的数据库字典视图,如V$PARAMETER,V$SGA,V$OPTION,
V$PROCESS,V$VERSION,V$INSTANCE等.这些视图中的信息都是从SGA区中获取的,与数据库无关.
■MOUNT选项
MOUNT选项不仅创建例程,还装载数据库,但却不打开数据库.读取控制文件.管理员可以通过部分命令修改数据库,
用户还无法与数据库建立连接或会话.
如果要执行下列维护工作,就必须用MOUNT选项启动数据库
◆ 重命名数据文件
◆ 添加、删除或重命名重做日志文件
◆ 执行数据库完全恢复操作
◆ 改变数据库的归档模式
在MOUNT启动模式下,除了可以访问那些与SGA区相关的数据字典视图之外,还可以访问到那些与控制文件相关的数据字典
视图,如V$THREAD,V$CONTROLFILE,V$DATABASE,V$DATAFILE,V$LOGFILE等,这些视图中的信息是从控制文件中获取的.
■OPEN选项
OPEN选项不仅创建例程,还装载数据库,并且打开数据库.这是正常启动模式.如果startup命令行上没有指定任何
模式,默认就是start open选项启动数据库.
■FORCE选项
如果在正常启动数据库遇到困难,可以使用force启动选项.例如服务器突然断电.
FORCE选项与正常启动选项之间的差别还在于,无论数据库处于什么模式,都是先异常关闭数据库,然后再重新启动.
而不需要事先用SHUTDOWN语句关闭数据库.
■RESTRICT选项
RESTRICT选项启动数据库并把它置入OPEN模式,但些时只有拥有RESTRICTED SESSION权限的用户才能访问数据库.
如果需要在数据库处于OPEN模式下执行维护任何,又要保证此时其他用户不能在数据库上建立连接和执行任何,则应该
使用RESTRICT选项来打开数据库,以便完成如下任务:
◆ 执行数据库数据的导出或导入操作.
◆ 执行数据装载操作(用SQL*Loader)
◆ 暂时阻止一般的用户使用数据.
◆ 进行数据库移植或升级
当工作完成后,可以用如下语句禁用RESTRICT SESSION权限,即:
alter system disable restricted session
■关闭选项
■NORMAL选项
按NORMAL选项关闭数据库时,Oracle将执行如下操作:
◆ 阻止任何用户建立新的连接
◆ 等待当前所有正在连接的用户主动断开连接.正在连接的用户能够继续他们当前的工作,甚至能够提交新的事务.
◆ 一旦所有的用户都断开连接,才进行关闭、制裁数据库,并终止例程。
注意:
按NORMAL选项关闭数据库时,Oracle并不会断开当前用户的连接,而是等待当前用户主动断开连接。在这个过程中,连接的用
户甚至可以建立新的事务。此选项关闭数据库,在下次启动数据库时不需要任何恢复操作。关闭数据库所耗费的时间完全取决
于用户主动断开连接的时间.
■TRANSACTIONAL选项
TRANSACTIONAL选项比NORMAL选项稍微主动些。它能在尽可能短的时间内关闭数据库。
按NORMAL选项关闭数据库时,Oracle将执行如下操作:
◆ 阻止任何用户建立新的连接,同时阻止当前连接的用户开始任何新的事务
◆ 等待所有当前未提交的活动事务提交完后,然后立即断开用户的连接
◆ 一旦所有的用户都断开连接,立即进行关闭、制裁数据库,并终止例程
注意:
按TRANSACTIONAL选项关闭数据库,既能保证用户不会丢失当前工作的信息,又可以尽可能快地关闭数据库,此选项关闭数据库,在下次
启动数据库时不需要任何恢复操作。
■IMMEDIATE选项
IMMEDIATE选项关闭数据库,就能够在尽可能短的时间内关闭数据库。
按IMMEDIATE选项关闭数据库时,Oracle将执行如下操作:
◆ 阻止任何用户建立新的连接,同时阻止当前连接的用户开始任何新的事务
◆ 任何当前未提交的事务均被回退
◆ Oracle不再等待用户主动断开连接,而是直接关闭、制裁数据库,并终止例程
注意:
如果存在很多未提交的事务,则按IMMEDIATE选项关闭数据库仍然会耗费很长时间。此选项关闭数据库,在下次启动数据库时不需要任何
恢复操作。
■ABORT选项
如果上述三种选项都无法成功关闭数据库,就说明数据库存在严重错误。这时只能使用ABORT选项来关闭数据库。
在下面几种特殊情况中,可以考虑按ABORT选项来关闭数据库。
◆ 数据库本身或某个数据库应用程序发生异常,并且使用其他选项均无效
◆ 出现紧急情况,需要立刻关闭数据库(比如得到通知将在一分钟内发生停电)
◆ 在启动数据库例程的过程中产生错误。
按IMMEDIATE选项关闭数据库时,Oracle将执行如下操作:
◆ 阻止任何用户建立新的连接,同时阻止当前连接的用户开始任何新的事务
◆ 立即结束当前正在执行的SQL语句
◆ 任何未提交的事务均不被回退
◆ 立即断开所有用户的连接,关闭、缺氧数据库,并终止全程.
注意:
按ABORT选项关闭数据库时,由于当前未完成的事务并不会被回退,所以可能会丢失一部分数据信息。这样数据库的完整性遭到损害,在下一次启动时需要
进行恢复。因此建议尽量避免按ABORT选项来关闭数据库.
■在WINDOWS中启动和关闭数据库所使用的服务名称及说明
Oracle<ORACLE_HOME_NAME>TNSListener 对应于数据库监听程序
OracleService<SID> 对应于数据库例程
OracleDBConsole<sid> 对应于Oracle Enterprise Manager 或 OEM
Oracle<ORACLE_HOME_NAME>iSQL*Plus 对应于iSQL*Plus
这几个服务之间的关系是:
◆ 首先启动Oracle<ORACLE_HOME_NAME>TNSListener服务,然后再启动其他服务。
◆ 如果不启动Oracle<ORACLE_HOME_NAME>TNSListener,则可以使用SQL*Plus,但不能使用OEM和iSQL*Plus。
◆ 因为OracleDBConsole<sid>依赖于OracleService<SID>,所以必须先启动OracleService<SID>,之后再启动
OracleDBConsole<sid>.关闭反之。
============================
第15章 管理网络 2006.12.06
■提示:全局数据库名是数据库的默认服务名,由初始化参数文件中的SERVICE_NAMES参数指定.
■Oracle网络配置分为服务器端配置和客户机端配置,服务器端配置的目的就是配置监听程序的配置文件(listener.ora).
客户机端配置的目的就是配置网络服务名的配置文件(tnsnames.ora).服务器端本身也有一个网络服务名的配置文件(
tnsnames.ora),在服务器端,一般不需要配置tnsnames.ora文件,但如果服务器要与其他服务器连接时(如在分布式网
络环境中),同样需要配置tnsnames.ora文件。根据网络连接的实际情况,每个listener.ora和tnsnames.ora内容都可能
不同,以便监听不同的连接请求信息或连接到不同的数据库.
评论