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

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='<sid>'|'*';

--重置默认参数
aler system reset parameter_name scope=spfile sid='<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 主要配置文件介绍:profile文件,oratab 文件数据库实例初始化文件 initSID.ora,监听配置文件, sqlnet.ora 文件,tnsnames.ora 文件1.2 Oracle 主要配置文件介绍1.2.1 /etc/profile 文件 系统级的环境变量一般在/etc/profile 文件中定义 在 CAMS 系统 与数据库 相关的环境变量就定义在/etc/profile 文件中 如下所示 export ORACLE_BASE=/u01/app/oracle export ORACLE_HOME=$ORACLE_BASE/product/8.1.7 export PATH=$PATH:$ORACLE_HOME/bin export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib export ORACLE_SID=cams export ORACLE_TERM=vt100 export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data export NLS_LANG=AMERICAN.ZHS16CGB231280 & 说明 1 配置上述环境变量要注意定义的先后顺序 如 定义 ORACLE_HOME 时 用 到 了 ORACLE_BASE 那 么 ORACLE_HOME 的 定 义 应 该 在 ORACLE_BASE之后 2 在使用中文版 CAMS 时 环境变量 NLS_LANG 的值应该设置为 AMERICAN.ZHS16CGB231280 如上所示 在使用英文版 CAMS时 可 以不设置 NLS_LANG 即去掉 export NLS_LANG=... ... 那一行 也可以 设置 NLS_LANG 的值为 AMERICAN_AMERICA.US7ASCII1.2.2 /etc/oratab 文件 /etc/oratab 文件描述目前系统中创建的数据库实例 以及是否通过 dbstart 和 dbshut 来控制该实例的启动与关闭 如下所示 忽略以#开头的注释部分 : cams:/u01/app/oracle/product/8.1.7:Y 其中 cams 为实例 ID /u01/app/oracle/product/8.1.7为 ORACLE_HOME目 录 Y表示允许使用 dbstart和 dbshut 启动和关闭该实例数据库 如果设置为 N 表示不通过 dbstart 和 dbshut 启动和关闭实例数据库 CAMS 系统要求在 安装完 ORACLE 后要求将该参数修改为 Y 以保证 ORACLE 数据库自启动 和关闭 1.2.3 数据库实例初始化文件 initSID.ora 每个数据库实例都有一个初始化 参数文件 其缺省 存放的路径为 $ORACLE_BASE/admin//pfile 其名称为 init.ora 如 cams 实 例 对 应 的 参 数 文 件 为 initcams.ora 缺 省 存 放 路 径 为 $ORACLE_BASE/admin/cams/pfile 即/u01/app/oracle/admin/cams/pfile
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CodeBe@r

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值