目录
a.使用动态性能视图v$controlfile查询控制文件的名称和状态。
b.使用初始化参数文件中的CONTROL_FILES参数查询控制文件的名称。
c.使用动态性能视图v$parameter查询控制文件的名称和位置。
数据库启动
在Oracle数据库中,有三种启动模式可供选择,分别是:
- NOMOUNT模式:在这种模式下,Oracle实例已启动,但数据库尚未打开。此模式用于创建新的数据库或恢复控制文件。
startup nomount;
- MOUNT模式:在这种模式下,Oracle实例已启动并且数据库已打开,但是数据文件和重做日志文件尚未被访问。此模式用于更改控制文件的位置或名称,更改数据库名称等。
startup mount;
- OPEN模式:在这种模式下,Oracle实例已启动,并且数据库已打开并可以被访问。此模式是正常的数据库运行模式,允许用户执行查询和修改操作。
startup;
数据库关闭
Oracle数据库关闭有以下三种模式:
- `IMMEDIATE`:立即关闭数据库实例,不等待正在运行的事务完成。如果还有事务未完成,这些事务将被回滚。
- `TRANSACTIONAL`:等待所有事务完成,然后关闭数据库实例。如果在等待期间有新的事务开始,这些事务将被回滚。
- `ABORT`:立即关闭数据库实例,不管是否有事务在运行。这种方式可能会导致数据库损坏或数据丢失,因此只有在无法通过其他方式关闭数据库实例时才应使用。
默认情况下,`shutdown`命令等价于`shutdown immediate`,即立即关闭数据库实例。可以使用以下语法指定关闭模式:
shutdown [immediate|transactional|abort];
表空间管理
在 Oracle 数据库中,表空间是逻辑存储单元,用于管理数据库中的物理存储结构。它是一个数据库对象,用于存储数据文件,这些数据文件实际上是用于存储表、索引、存储过程和其他数据库对象的文件。
-
创建表空间
CREATE TABLESPACE tablespace_name DATAFILE 'datafile_path' SIZE size [REUSE] [AUTOEXTEND ON [NEXT next_size] [MAXSIZE max_size]] [DEFAULT STORAGE (INITIAL initial_extent [NEXT next_extent] [MINEXTENTS min_extents] [MAXEXTENTS max_extents] [PCTINCREASE pct_increase])] [EXTENT MANAGEMENT {LOCAL | DICTIONARY}] [SEGMENT SPACE MANAGEMENT {AUTO | MANUAL}];
tablespace_name
为表空间名称datafile_path
为数据文件路径size
为表空间大小REUSE
表示重用现有数据文件AUTOEXTEND
表示自动扩展表空间DEFAULT STORAGE
为默认存储参数EXTENT MANAGEMENT
指定扩展管理方式SEGMENT SPACE MANAGEMENT
指定段空间管理方式。
-
删除表空间
ALTER TABLESPACE tablespace_name [ADD DATAFILE 'datafile_path' SIZE size [REUSE] [AUTOEXTEND ON [NEXT next_size] [MAXSIZE max_size]]] [RESIZE DATAFILE 'datafile_path' SIZE size] [DEFAULT STORAGE (INITIAL initial_extent [NEXT next_extent] [MINEXTENTS min_extents] [MAXEXTENTS max_extents] [PCTINCREASE pct_increase])] [ONLINE | OFFLINE];
ADD DATAFILE
表示添加数据文件RESIZE DATAFILE
表示调整数据文件大小DEFAULT STORAGE
表示修改默认存储参数ONLINE
和OFFLINE
分别表示在线和离线修改表空间
-
修改表空间
DROP TABLESPACE tablespace_name [INCLUDING CONTENTS] [CASCADE CONSTRAINTS];
INCLUDING CONTENTS
表示删除表空间及其内容CASCADE CONSTRAINTS
表示删除表空间及其所有外键关联的表。
-
查看表空间信息
SELECT tablespace_name, status, contents, logging, allocation_type, extent_management, segment_space_management FROM dba_tablespaces;
该查询语句将返回数据库中
- 所有表空间的名称(tablespace_name)
- 状态(status)
- 类型(contents)
- 是否启用日志记录(logging)
- 空间分配类型(allocation_type)
- 扩展管理方式(extent_management)
- 段空间管理方式(segment_space_management) 等详细信息。
数据文件管理
数据文件(Datafile)是Oracle数据库中存储数据的物理文件,是Oracle数据库中数据存储的最小单位。每个数据文件在操作系统上都是一个文件,可以被独立备份、复制或迁移到另一个磁盘中。
-
创建数据文件
ALTER TABLESPACE tablespace_name ADD DATAFILE 'file_path/file_name.dbf' SIZE file_size [AUTOEXTEND ON];
这个语句用于为一个表空间添加一个新的数据文件
-
修改数据文件
ALTER DATABASE DATAFILE 'file_path/file_name.dbf' [AUTOEXTEND OFF | ON [NEXT file_size] [MAXSIZE max_file_size]];
这个语句用于修改数据文件的属性,例如设置自动扩展和最大文件大小等
-
移动数据文件
ALTER DATABASE RENAME FILE 'file_path/old_file_name.dbf' TO 'file_path/new_file_name.dbf';
这个语句用于将一个数据文件移动到另一个位置或重命名。
注意,移动数据文件需要先将表空间离线。
ALTER TABLESPACE tablespace_name OFFLINE;
-
移除数据文件
ALTER TABLESPACE tablespace_name DROP DATAFILE 'file_path/file_name.dbf';
这个语句用于从表空间中移除一个数据文件。
-
查看数据文件信息
SELECT file_name, tablespace_name, bytes/1024/1024 AS size_MB, status, autoextensible FROM dba_data_files;
这个语句用于查看数据库中所有数据文件的信息,包括
- 文件名 file_name
- 所属表空间 tablespace_name
- 大小 bytes/1024/1024 AS size_MB
- 状态 status
- 是否自动扩展 autoextensible
-
检查数据文件
ALTER TABLESPACE tablespace_name CHECK DATAFILES;
这个语句用于检查表空间中的数据文件是否完整。如果有文件被破坏或损坏,可以使用这个命令尝试恢复数据。
控制文件管理
-
查询控制文件信息
使用动态性能视图v$controlfile查询控制文件的名称和状态。
SELECT NAME,STATUS FROM V$CONTROLFILE;
- `STATUS`:控制文件的状态,可能的值为 `A`(当前控制文件)和 `S`(备用控制文件)。
- `NAME`:控制文件的完整路径和名称。
- `IS_RECOVERY_DEST_FILE`:表示该控制文件是否是一个恢复目标文件。可能的值为 `YES` 或 `NO`。
- `BLOCK_SIZE`:控制文件中每个块的大小,以字节为单位。
- `FILE_SIZE_BLKS`:控制文件的大小,以块为单位。
- `CON_ID`:容器 ID。在 Oracle 数据库的多租户架构中,这个值标识了这些信息所属的容器 ID。如果不是多租户数据库,则此列始终为 0。
使用初始化参数文件中的CONTROL_FILES参数查询控制文件的名称。
SHOW PARAMETER CONTROL_FILES;
使用动态性能视图v$parameter查询控制文件的名称和位置。
SELECT VALUE FROM V$PARAMETER WHERE NAME = 'control_files';
-
建立多路控制文件
example:
- 第1步:修改参数control_files的值,增加一个新的控制文件。
alter system set control_files= 'd:\oracle\oradata\orcl\control01.ctl', 'd:\oracle\oradata\orcl\control02.ctl', 'c:\finance\control03.ctl', 'd:\finance\control04.ctl' scope=spfile;
- 第2步:关闭数据库实例。
shutdown immediate;
- 第3步:将当前某个控制文件复制到新文件的目标位置,在此增加了一个控制文件的拷贝。
C:\>copy d:\oracle\oradata\orcl\control01.ctl c:\finance\control03.ctl C:\>copy d:\oracle\oradata\orcl\control01.ctl d:\finance\control04.ctl
- 第4步:启动数据库实例。
startup;
-
删除控制文件
example:
- 第1步:修改参数control_files的值。
alter system set control_files= 'd:\oracle\oradata\orcl\control01.ctl', 'd:\oracle\oradata\orcl\control02.ctl', 'c:\finance\control03.ctl' scope=spfile;
- 第2步:关闭数据库实例。
shutdown immediate
- 第3步:利用操作系统命令删除control04控制文件。
del d:\finance\control04.ctl
- 第4步:启动数据库实例。
startup
联机重做日志文件管理
-
查看日志组和成员日志文件信息
查看日志组信息。
select group#, sequence#, members, status from v$log;
查看日志成员信息。
select group#, member, status from v$logfile;
v$log 和 v$logfile 都是 Oracle 数据库的动态性能视图,但是它们展示的信息是不同的。
- v$log 显示当前所有的联机重做日志文件,包括重做日志文件的组号、序列号、大小、状态等信息。
- v$logfile 显示所有在线日志文件和归档日志文件的信息,包括文件名、状态、大小、最后修改时间等信息。
简而言之,`v$log` 主要用于管理联机重做日志文件,而 `v$logfile` 主要用于管理日志文件。在进行日志管理时,这两个视图经常一起使用。
-
创建联机重做日志组
创建日志文件组4,包括2个成员。
alter database add logfile group 4 ('c:\finance\redo04a.rdo', 'd:\finance\redo04b.rdo') size 50m; select group#, members, status, first_time from v$log;
创建一个新的日志文件组,不指定日志文件组号。
alter database add logfile ('c:\finance\redo05a.rdo', 'd:\finance\redo05b.rdo') size 50m;
-
创建日志组成员
alter database add logfile member 'd:\finance\redo01b.rdo' to group 1, 'd:\finance\redo02b.rdo' to group 2, 'd:\finance\redo03b.rdo' to group 3, 'd:\finance\redo04c.rdo' to group 4;
-
删除重做日志组
alter database drop logfile group 5; select group#, members, status, first_time from v$log;
在删除重做日志组前,确保该重做日志组的状态为inactive
-
删除重做日志组中的成员
alter database drop logfile member 'member_name';
在删除重做日志组前,确保该重做日志组的状态为inactive;
-
手工日志切换
SQL>alter system switch logfile;
用于强制 Oracle 切换到新的联机重做日志文件,这通常用于手动切换联机重做日志,例如在备份联机重做日志之前。