Oracle 文件管理-参数文件、控制文件、归档

2024年 7月 29日 67.2k 0

STARTUP 起库:

  1. 加载参数文件 --》startup nomount
  2. 加载控制文件 --》startup mount
  3. 加载数据文件等所有文件--》startup (打开到open)

1.1 参数文件

spfile(服务器参数文件) 是一个二进制文件,存储在服务端的 $ORACLE_HOME/dbs 目录下。不能直接用文本编辑器修改参数,而是通过 sqlplus 中的命令动态修改。由于其二进制特性,修改后可以立即生效,无需重启数据库。

pfile(参数文件) 是一个文本文件,可以存储在客户端或服务端,用文本编辑器进行查看和修改。修改 pfile 后,需要重启数据库才能使更改生效。pfile 在启动数据库时提供参数配置,可以作为 spfile 的备份或在特定情况下使用。

1.1.1 优先级别:

oracle 启动读取参数文件的顺序,如果个文件都不存在,则Oracle会报错

spfile.ora --> spfile.ora -->init.ora -->init.ora

1.1.2 默认目录:

$ORACLE_HOME/dbs

1.1.3 参数文件之间的转换

-- spfile-->pfile转换
SQL> create pfile from spfile;
SQL> !ls $ORACLE_HOME/dbs/initorcl.ora
/u01/app/oracle/product/11.2.0/db_1/dbs/initorcl.ora

-- 生成在指定路径
SQL> create pfile='/tmp/initorcl.ora' from spfile;

-- pfile-->spfile 转换
SQL> create spfile='/tmp/spfileorcl.ora' from pfile;

--可以用strings命令查看创建的spfile文件,查出来的结过和pfile是一样的。

其他:

--优先级:
SINSTANCE_MODIFIABLE > ISSYS_MODIFIABLE > ISSES_MODIFIABLE

--修改参数
alter system|session set parameter_name=values scope=memory|spfile|both sid=''|'*';

--重置默认参数
aler system reset parameter_name scope=spfile sid=''|'*';

--显示系统中隐藏参数:
select ksppinm,ksppstvl from x$ksppi a, x$ksppcv b where a.indx=b.indx

1.1.4 判断数据库从SPFILE还是PFILE启动

-- 方式1:
-- 如果是spfile,则value是有值的
SQL> show parameter spfile
NAME TYPE VALUE
------------------------------------ ---------- ----------------------------
spfile string /u01/app/oracle/product/11.2.0
/db_1/dbs/spfileorcl.ora

-- 方式2:
SQL> set linesize 120
SQL> col name format a10
SQL> col value format a60
SQL> select name,value from v$parameter where name='spfile';
NAME VALUE
------ --------------------------------------------------------
spfile /u01/app/oracle/product/11.2.0/db_1/dbs/spfileorcl.ora

1.1.5 修改参数文件的三种模式:

scope=both 立即并永久生效,(默认模式)
scope=spfile 下次启动才能生效。
scope=memory 立即生效但下次启动时失效

##查询方法:v$parameter
isses_modifiable:
ISSES_MODIFIABLE=true
表明这个参数可以在session级别可以修改,并且立即生效。false就是不能修改
issys_modifiable:
issys_modifiable=immediate
表示这个参数可以在system立即修改,并且立即生效。
若如果issys_modifiable=deferred
会话级别参数,直接通过alter session set 参数名=值;
issys_modifiable=false
表示这个参数不能在直接修改在内存中,需要加scope=spfile,重启后才能生效。

比如:
SQL> select name, isses_modifiable,issys_modifiable from v$parameter where
name='sga_max_size';
NAME ISSES ISSYS_MOD
------------------------------ ----- ---------
sga_max_size FALSE FALSE ##两个都为false
SQL> alter system set sga_max_size=900M;
alter system set sga_max_size=900M
*
第 1 行出现错误:
ORA-02095: 无法修改指定的初始化参数
SQL> alter system set sga_max_size=800M scope=spfile;
系统已更改。
恢复参数到默认值
SQL> alter system reset sga_max_size scope=spfile;
总结:
一般scope常用的参数是both和spfile。

扩展1:spfile 默认参数文件含义介绍

在Oracle数据库中,spfile(服务器参数文件)和pfile(文本参数文件)用于存储初始化参数。spfile参数带有前缀*,而pfile参数则不带。以下是一些常见的spfile参数及其含义:

  • db_name:这是数据库的名称,是在创建数据库时指定的。
  • compatible:用于指定数据库的兼容版本,允许数据库在旧版本的兼容模式下运行。
  • allow_resetlogs_corruption:危险参数,仅在紧急恢复情况下使用,可能会导致数据库损坏。
  • remote_login_passwordfile:定义密码文件的使用方式,有三种选项:none(不使用),shared(多个实例共享),exclusive(仅本实例使用)。
  • audit_file_dest:审计文件的存放位置。
  • background_dump_dest:后台进程日志的存放位置。
  • control_files:指定控制文件的位置。
  • core_dump_dest:核心转储文件的存放位置。
  • db_block_size:数据库的块大小,通常为8KB。
  • db_domain:数据库的域名,通常为空。
  • db_file_multiblock_read_count:指定单次I/O操作可以读取的块数。
  • db_recovery_file_dest:闪回恢复区的存放路径。
  • db_recovery_file_dest_size:闪回恢复区的大小。
  • dispatchers:配置共享服务器进程。
  • job_queue_processes:允许并发运行的作业进程数。
  • local_listener:本地监听服务的名称。
  • open_cursors:允许同时打开的游标数。
  • pga_aggregate_target:PGA的内存大小。
  • processes:允许并发运行的进程数。
  • sga_target:SGA的内存大小。
  • undo_management:Undo表空间的管理方式,通常为AUTO。
  • undo_tablespace:Undo表空间的名称。
  • user_dump_dest:用户进程转储文件的存放位置。

1.2 控制文件

1.2.1 控制文件存储的主要信息

DBID
数据库名称和SID标识
数据文件和日志文件列表
数据库创建的时间戳
表空间信息
当前重做日志文件序列号(scn)
归档日志信息
检查点信息
回滚段的起始与结束
备份数据文件信息

1.2.2 控制文件位置

select name from v$controlfile;

show parameter control_files;

1.2.3 控制文件管理

为了提高数据库的安全性,至少要为数据库建立两个控制文件,而且这两个文件最好分别放在不同的磁盘
中,这样可以避免产生由于某个磁盘故障而无法启动数据库的危险,该管理策略称为多路复用控制文件。
当多路复用控制文件某个磁盘发生故障导致其包含的控制文件损坏,数据库将被关闭或者发生异常,
此时可以用另一磁盘中保存的控制文件来恢复被损坏的控制位文件,然后再重启数据库,
达到保护控制文件的目的。

数据库建立时,一般会默认创建两个控制文件,我们可以手动的再创建多个控制文件且不要与默认的放在
同一个磁盘中,首先我们可以修改control_files参数来增加控制文件。

扩展2:可以dump一个trc分析一下控制文件内容

大致有六部分:通用文件头、 数据库信息、检查点进度记录CHECKPOINT PROGRESS RECORDS、扩展的数据库信息、重做线程、日志文件,有兴趣可以自己了解一下,这里就不整理了。

实战一:重建控制文件

1.备份 backup controlfile

# 数据库打开时是不能直接操作系统界别cp控制文件的,可以使用backup语句
alter database backup controlfile to '/u01/app/oracle/oradata/PROD/control.ctl.bk';

2.backup to trace

1)#在 mount 或 open 模式生成一个 trace 文件,包含重建控制文件的语句
alter database backup controlfile to trace;
#默认文件内容保存在 Default Trace File 中
select * from v$diag_info;

2)#查看控制文件位置:show parameter control files;
select name from v$controlfile;
#存到自己起的文件名里control.trc
alter database backup controlfile to trace as '/u01/app/oracle/oradata/PROD/control.trc';

  1. 恢复控制文件方法

单个文件损毁,通过简单的在操作系统上复制解决

2.所有的控制文件丢失:

①如果有 binary 控制文件备份,利用备份恢复控制文件

②如果没有备份,利用 trace 脚本文件重新创建控制文件(代价:丢失归档记录信息和 RMAN 备份信息)

#Mount 或 open 下生成 trace 脚本 可以cat more查看一下,后面恢复会执行这个control.trc
alter database backup controlfile to trace as '/u01/app/oracle/oradata/PROD/control.trc';

#正常关库,模拟全部控制文件丢失 启动数据库实例报错
#shutdown immediate;
#rm control0[1-3].ctl
#startup

#nomount 状态 执行重建控制文件语句
#OS:more control.trc
#SQL:
STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "PROD" NORESETLOGS NOARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 '/u01/app/oracle/oradata/PROD/redo01.log' SIZE 50M BLOCKSIZE 512,
GROUP 2 '/u01/app/oracle/oradata/PROD/redo02.log' SIZE 50M BLOCKSIZE 512,
GROUP 3 '/u01/app/oracle/oradata/PROD/redo01.log' SIZE 50M BLOCKSIZE 512
-- STANDBY LOGFILE
DATAFILE
'/u01/app/oracle/oradata/PROD/system01.dbf',
'/u01/app/oracle/oradata/PROD/sysaux01.dbf',
'/u01/app/oracle/oradata/PROD/undotbs01.dbf',
'/u01/app/oracle/oradata/PROD/users01.dbf',
'/u01/app/oracle/oradata/PROD/example01.dbf',
'/u01/app/oracle/oradata/PROD/tbs16k.dbf'
CHARACTER SET AL32UTF8
;
#这时数据库已在 mount 下

#open 打开数据库
ALTER DATABASE OPEN;
#查看有无临时文件
SQL> select * from dba_temp files

#添加临时数据文件信息
ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/app/oracle/oradata/PROD/temp01.dbf'
SIZE 30408704 REUSE AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M;

---如果使用的是 noresetlogs,直接 open 数据库就可以了:

SQL>alter database open;

---如果使用的是 resetlogs 创建的控制文件,那么我们就需要使用:

SQL>alter database open resetlogs;

来打开 DB.

(3)添加 TEMP 表空间

SQL>ALTER TABLESPACE TEMP ADD TEMPFILE '/oracle/app/oracle/oradata/PRODdb/temp01.dbf' size 100M;

v$datafile视图显示的是数据文件(data files),而临时文件(temp files)通常是在v$tempfile视图中查看的。

显示TEMP表空间中所有的临时文件

SELECT file_name, tablespace_name, bytes
FROM dba_temp_files;

说明:这个重建控制文件的过程主要有两大部分内容:

第一部分是脚本中的可见信息:

1)定义 db_name,

2)指定几个参数限定控制文件的最大值,

3)在线日志的物理信息,

4)数据文件的物理信息,

5)使用的字符集。

第二部分是隐含的不可见信息,比如 SCN信息,重建复制了当前所有数据文件头部的最新 SCN

信息复制到了控制文件中。以便接下来打开数据库。

SQL> select file#,checkpoint_change# from v$datafile;

SQL> select file#,checkpoint_change# from v$datafile_header;

什么时候用 RESETLOGS 和 NORESETLOGS 几种情况的说明

  • RESETLOGS:用于不完全恢复、丢失REDOLOG文件或使用备份控制文件的情况。
  • NORESETLOGS:用于完全恢复且控制文件和所有日志文件完好无损的情况。

1.3 归档文件

1.3.1 开归档

mkdir -p /archivelog
ls -ld /archivelog
alter system set log_archive_dest_1='location=/archivelog';
show parameter log_archive_dest_1
#静态参数,scope=spfile,重启后生效
alter system set log_archive_format='arch_PROD_%t_%s_%r.dbf' scope=spfile;
shutdown immediate;
startup mount;
archive log list
alter database archivelog;
alter database open;
archive log list;

实战二:创建Catalog恢复目录

Catalog用于存储RMAN备份信息,并提供更高级的备份和恢复管理功能。确保定期备份恢复目录数据库以避免数据丢失。

方法1:在本地数据库上创建Recovery Catalog

1.1 启动监听器

首先确保监听器已经启动并且运行正常:

有效的配置lsnrctl start
lsnrctl status

1.2 配置tnsnames.ora

确保能够连接到目标数据库和恢复目录数据库。在$ORACLE_HOME/network/admin目录下配置tnsnames.ora文件:

cd $ORACLE_HOME/network/admin
vi tnsnames.ora

添加如下内容:

EMREP =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = your_host)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = emrep)
)
)

ORCL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = your_host)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)

1.3 创建表空间和用户

连接到恢复目录数据库并创建表空间和用户:

sqlplus sys/oracle@emrep as sysdba

执行以下SQL命令:

CREATE TABLESPACE rmantbs
DATAFILE '/oradata/orcl/rmantbs.dbf'
SIZE 50M
AUTOEXTEND ON;

CREATE USER rman IDENTIFIED BY rman
DEFAULT TABLESPACE rmantbs;

GRANT CONNECT, RESOURCE, RECOVERY_CATALOG_OWNER TO rman;

1.4 创建Catalog

使用RMAN连接到恢复目录数据库并创建Catalog:

rman catalog rman/rman@emrep

RMAN> CREATE CATALOG;

验证Catalog创建成功:

sqlplus rman/rman@emrep

SELECT table_name, tablespace_name FROM user_tables;

1.5 注册目标数据库

使用RMAN连接到目标数据库并注册到恢复目录:

rman target / catalog rman/rman@emrep

RMAN> REGISTER DATABASE;

验证目标数据库是否已注册:

sqlplus rman/rman@emrep

SELECT * FROM rc_database;

方法2:在远程数据库上创建Recovery Catalog

单独的恢复目录,能有效提高安全性。

2.1 创建一个单独的数据库(prod)

假设您已经在prod库中创建了恢复目录数据库。我们要对orcl库进行备份,即orcl是目标数据库,prod是恢复目录数据库。

2.2 在prod库中创建表空间

连接到prod数据库:

sqlplus sys/oracle@prod as sysdba

创建表空间:

CREATE TABLESPACE rc_data
DATAFILE '/u01/app/oracle/oradata/prod/rc_data01.dbf'
SIZE 100M
AUTOEXTEND ON
NEXT 10M
MAXSIZE UNLIMITED;

2.3 创建用户并授予权限

CREATE USER rc_admin IDENTIFIED BY rc_admin
DEFAULT TABLESPACE rc_data;

GRANT CONNECT, RESOURCE, RECOVERY_CATALOG_OWNER TO rc_admin;

2.4 在RMAN中创建Catalog

rman catalog rc_admin/rc_admin@prod

RMAN> CREATE CATALOG TABLESPACE rc_data;

2.5 注册目标数据库

连接并注册目标数据库:

rman target sys/oracle@orcl catalog rc_admin/rc_admin@prod

RMAN> REGISTER DATABASE;
-- 手动同步Catalog
RMAN> RESYNC CATALOG;

2.6 取消Catalog

如果需要取消注册,可以执行以下命令:

rman target sys/oracle@orcl catalog rc_admin/rc_admin@prod

RMAN> UNREGISTER DATABASE;

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论