STARTUP 起库:
- 加载参数文件 --》startup nomount
- 加载控制文件 --》startup mount
- 加载数据文件等所有文件--》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';
- 恢复控制文件方法
单个文件损毁,通过简单的在操作系统上复制解决
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;