达梦7数据库工具的使用
目录
达梦7数据库工具的使用
1. 逻辑备份
2. 逻辑还原
3. 物理备份还原
4. 控制文件修改
5. isql工具使用
6. 初始化库工具使用
7. DEM部署
8. 数据检查工具使用
9. 数据库安全功能
1. 逻辑备份
- 单表多表备份
- 按用户备份
- 备份时是否备份约束、索引、触发器
- 备份一张表或多张表中部分数据
- 备份结构
- 表间并行、表内并行,备份压缩
- 忽略指定对象、包含指定对象
- 其他相关参数
逻辑导出( dexp)和逻辑导入( dimp)是 DM 数据库的两个命令行工具,分别用来实现对 DM 数据库的逻辑备份和逻辑还原。逻辑备份和逻辑还原都是在联机方式下完成,联机方式是指数据库服务器正常运行过程中进行的备份和还原。
dexp dimp 工具需要从命令行启动。在 cmd 命令行工具中找到 dexp 所在安装目录/dmdbms/bin下
1.1dexp逻辑导出
用户名和密码均为 SYSDBA, IP 地址192.168.0.248,端口号8888,采用FULL方式完全导出。/user/data为数字证书路径,导出文件名为db_str.dmp,导出的日志文件名为 db_str.log, 导出文件的路径为/mnt/dexp/data。
./dexp USERID=SYSDBA/SYSDBA@192.168.0.248:8888#/user/data FILE=db_str.dmp DIRECTORY=/mnt/dexp/data LOG=db_str.log FULL=Y
1.1.1dexp参数
参数 | 含义 | 备注 | userid* | 用户名/口令@主库名:端口号#证书路径。 例如: SYSDBA/SYSDBA@server:5236#ssl_path@ssl_pwd | 必选。其中主库名、端口号和证书路径为可选项 | file* | 明确指定导出文件名称 | 可选。如果缺省该参数,则导出文件名为dexp.dmp | DIRECTORY* | 导出文件所在目录 | 可选 | LOG* NOLOGFILE NOLOG LOG_WRITE | 明确指定日志文件名称 | 可选,如果缺省该参数,则导出文件名为dexp.log | 不使用日志文件(N) | 可选 | 屏幕上不显示日志信息(N) | 可选 | 日志信息实时写入文件 (N) | 可选 | FULL* OWNER SCHEMAS TABLES | 导出整个数据库(N) | 可选,四者中选其一。 缺省为 SCHEMA | 用户名列表,导出一个或多个用户所拥有的所有对象 | 模式列表,导出一个或多个模式下的所有对象 | TABLES | QUERY | 用于指定对导出表的数据进行过滤的条件 | 可选 | PARALLEL | 用于指定导出的过程中所使用的线程数目 | 可选 | TABLE_PARALLEL | 用于指定导出每张表所使用的线程数,在 MPP 模式下会转换成单线程 | 可选 | TABLE_POOL | 用于设置导出过程中存储表的缓冲区个数 | 可选 | EXCLUDE | 1. 导出内容中忽略指定的对象。对象有 CONSTRAINTS,INDEXES,ROWS,TRIGGERS,GRANTS 和 TABLESPACE。 例如: EXCLUDE= (CONSTRAINTS,INDEXES) 2. 忽略指定的表,使用TABLES:INFO格式, 如果使用表级导出方式导出,则使用 TABLES:INFO 格式的EXCLUDE 无效。 例如: EXCLUDE= TABLES:'table1','table2' | 可选 | INCLUDE | 导出内容中包含指定的对象 例如: INCLUDE=(CONSTRAINTS,INDEXES) 或者 INCLUDE=TABLES:'table1','table2' | 可选 | CONSTRAINTS | 导出约束 (Y) | 可选。 此处单独设置与和EXCLUDE/INCLUDE中批量设置功能一样。设置一个即可 | TABLESPACE | 导出的对象定义是否包含表空间(N) | GRANTS | 导出权限 (N) | INDEXES | 导出索引 (Y) | TRIGGERS | 导出触发器( Y) | ROWS | 导出数据行 (Y) | DUMMY | 交互信息处理: 打印(P), 所有交互都按YES处理(Y),NO(N)。默认为NO,不打印交互信息 | 可选 | PARFILE | 参数文件名,如果 dexp 的参数很多,可以存成参数文件 | 可选 | FEEDBACK | 每 x 行显示进度 (0) | 可选 | COMPRESS | 是否压缩导出数据文件(N) | 可选 | ENCRYPT | 导出数据是否加密 (N) | 可选, 和 ENCRYPT 同时使用 | ENCRYPT_PASSWORD | 导出数据的加密密钥 | ENCRYPT_NAME | 导出数据的加密算法 | 可选。 和 ENCRYPT 、ENCRYPT_PASSWORD 同时使用。缺省为RC4 | FILESIZE | 用于指定单个导出文件大小的上限。可以按字节[B]、K[B]、M[B]、G[B]的方式指定大小 | 可选 | FILENUM | 多文件导出时,一个模板可以生成文件数,范围为[1,99],默认 99 | 可选 | DROP | 导出后删除原表,但不级联删除 (N) | 可选 | DESCRIBE | 导出数据文件的描述信息,记录在数据文件中 | 可选 | LOCAL | MPP 环境下使用 MPP_LOCAL 方式登录(N) | 可选 | HELP | HELP | 可选 |
1.1.2特殊参数
(USERID) 连接服务器。 必选参数
PWD 密码中带有特殊字符 ( /,@.:等), 需要外加三层双引号( """ """)进行转义。
./dexp USERID=SYSDBA/"""SYSDBA/,@.:"""@LOCALHOST:PORT
(FILE) 用于明确指定导出的文件(可以包含路径),可以包含多个文件,用逗号分隔。
./dexp USERID=SYSDBA/SYSDBA FILE=db_str.dmp LOG=db_str.log FULL=Y DIRECTORY=/mnt/data/dexp
(LOG) 用于明确指定导出的日志文件名称(可以包含路径),可以包含多个文件,用逗号分隔。
./dexp USERID=SYSDBA/SYSDBA FILE=db_str.dmp LOG=db_str.log FULL=Y
DIRECTORY=/mnt/data/dexp
(DIRECTORY) 用于指定导出文件及日志文件生成的路径。
没有指定路径,使用当前路径
./dexp USERID=SYSDBA/SYSDBA FILE=db_str.dmp LOG=db_str.log FULL=Y
./dexp USERID=SYSDBA/SYSDBA FILE=db_str.dmp LOG=db_str.log FULL=Y
DIRECTORY=/mnt/data/dexp
四种级别导出
全库导出,full =y
./dexp USERID=SYSDBA/SYSDBA FILE=db_str.dmp LOG=db_str.log FULL=Y DIRECTORY=/mnt/data/dexp
对象导出,OWNER=<用户名>{,<用户名>}
./dexp SYSDBA/SYSDBA FILE=db_str.dmp LOG=db_str.log OWNER=USER01 DIRECTORY=/mnt/data/dexp
模式导出,SCHEMAS=<模式名>{,<模式名>}
./dexp USERID=SYSDBA/SYSDBA FILE=db_str.dmp LOG=db_str.log SCHEMAS=USER01 DIRECTORY=/mnt/data/dexp
表级导出,TABLES=<表名>{,<表名>}
./dexp USERID=SYSDBA/SYSDBA FILE=db_str.dmp LOG=db_str.log TABLES=table1,table2 DIRECTORY=/mnt/data/dexp
转义成小写
对于小写的用户名、模式名和表名, 为了不转换为大写,需要转义
例: 表名为小写 tabname, 语句中应该写为"\"tabname\""
./dexp SYSDBA/SYSDBA FILE=db_str.dmp LOG=db_str.log
TABLES="\"tabname\""
如果含有特殊字符(双引号、单引号、空格、逗号等)的用户名、模式名和表名需要转义
例如,表名为小写 tabname", 语句中应该写为"\"tabname\"\"\""。
./dexp SYSDBA/SYSDBA@192.168.0.248:8888 FILE=db_str.dmp LOG=db_str.log TABLES="\"tabname\"\"\""
1.1.3普通参数
QUERY
用于指定过滤条件来对表数据进行导出。
./dexp USERID=SYSDBA/SYSDBA FILE=db_str.dmp LOG=db_str.log TABLES=OTHER.READER QUERY="WHERE AGE=19"
PARALLEL
用于指定导出的过程中所使用的线程数目。
如果CPU 核心数为 N 的话,那一般来说 PARALLEL 为 N 或者 N+1 最合适。
设置PARALLEL=2时线程数为2
./dexp USERID=SYSDBA/SYSDBA FILE=db_str.dmp LOG=db_str.log FULL=Y DIRECTORY=/mnt/data/dexp PARALLEL=2
TABLE_PARALLEL
用于指定导出每张表所使用的线程数。
./dexp USERID=SYSDBA/SYSDBA FILE=db_str.dmp LOG=db_str.log FULL=Y DIRECTORY=/mnt/data/dexp TABLE_PARALLEL=3
EXCLUDE
用来批量设置导出时忽略的对象种类。
./dexp SYSDBA/SYSDBA FILE=/mnt/data/db_str.dmp LOG=db_str.log
TABLES=table1,table2 EXCLUDE=/(CONSTRAINTS/)
INCLUDE
用来批量设置导出时包含的对象种类。
./dexp USERID=SYSDBA/SYSDBA FILE=db_str.dmp LOG=db_str.log TABLES=table1
DIRECTORY=/mnt/data/dexp INCLUDE=/(CONSTRAINTS,INDEXES/)
CONSTRAINTS、 TABLESPACE、 GRANTS、 INDEXES、 TRIGGERS、ROWS
指定某类对象是否被导出。类别分别为约束、表空间、权限、索引、触发器和数据。
CONSTRAINTS=N: 设置不导出约束。 可选参数。 缺省该参数为 Y, 导出约束。
TABLESPACE=N: 设置导出的对象定义中不包含表空间。 可选参数。 缺省该参数为 N,不包含表空间。
GRANTS=Y: 设置导出权限。 可选参数。 缺省该参数为 N, 不导出权限。
INDEXES=N: 设置不导出索引。 可选参数。 缺省该参数为 Y, 导出索引。
TRIGGERS=N: 设置不导出触发器。 可选参数。 缺省该参数为 Y, 导出触发器。
ROWS=N: 设置不导出数据。 可选参数。 缺省该参数为 Y, 导出数据。
PARFILE
用于将常用的参数设置保存到文件中
设置 PARFILE=/mnt/data/dexp/para.txt。
./dexp USERID=SYSDBA/SYSDBA PARFILE=/mnt/data/dexp/para.txt
2. 逻辑还原
2.1dimp逻辑导入
将逻辑备份导入到用户名和密码为 SYSDBA, IP 地址为 192.168.0.248,端口号为 8888 的数据库采用 FULL 方式完全导出。导入文件名为 db_str.dmp, 导入的日志文件名为 db_str.log,路径为/mnt/data/dexp。
./dimp SYSDBA/SYSDBA@192.168.0.248:8888 FILE=db_str.dmp
DIRECTORY=/mnt/data/dexp LOG=db_str.log FULL=Y
1.1.1dimp参数
关键字 | 说明(默认值) | USERID | 用户名/口令 格式: USER/PWD*MPP_TYPE@SERVER:PORT#SSLPATH@SSLPWD | FILE | 导入文件名称 (dexp.dmp) | DIRECTORY | 导入文件所在目录 | FULL | 整库导入 (N) | OWNER | 以用户方式导入 格式 (user1,user2,...) | SCHEMAS | 以模式方式导入 格式 (schema1,schema2,...) | TABLES | 以表名方式导入 格式(table1,table2,...) | PARALLEL | 用于指定导入的过程中所使用的线程数目 | TABLE_PARALLEL | 用于指定导入的过程中每个表所使用的子线程数目,在FAST_LOAD为Y时有效 | IGNORE | 忽略创建错误 (N) | TABLE_EXISTS_ACTION | 需要的导入表在目标库中存在时采取的操作[SKIP | APPEND | TRUNCATE | REPLACE] | FAST_LOAD | 是否使用dmfldr来导数据(N) | FLDR_ORDER | 使用dmfldr是否需要严格按顺序来导数据(Y) | COMMIT_ROWS | 批量提交的行数(5000) | EXCLUDE | 忽略指定的对象 格式: EXCLUDE=(CONSTRAINTS,INDEXES,ROWS,TRIGGERS,GRANTS) | GRANTS | 导入权限 (Y) | CONSTRAINTS | 导入约束 (Y) | INDEXES | 导入索引 (Y) | TRIGGERS | 导入触发器 (Y) | ROWS | 导入数据行 (Y) | LOG | 指定日志文件 | NOLOGFILE | 不使用日志文件(N) | NOLOG | 屏幕上不显示日志信息(N) | LOG_WRITE | 日志信息实时写入文件(N): 是(Y),否(N) | DUMMY | 交互信息处理(P): 打印(P), 所有交互都按YES处理(Y),NO(N) | PARFILE | 参数文件名 | FEEDBACK | 每 x 行显示进度 (0) | COMPILE | 编译过程, 程序包和函数... (Y) | INDEXFILE | 将表的索引/约束信息写入指定的文件 | INDEXFIRST | 导入时先建索引(N) | REMAP_SCHEMA | 格式(SOURCE_SCHEMA:TARGET_SCHEMA) 将SOURCE_SCHEMA中的数据导入到TARGET_SCHEMA中 | ENCRYPT_PASSWORD | 数据的加密密钥 | ENCRYPT_NAME | 加密算法的名称 | SHOW/DESCRIBE | 打印出指定文件的信息(N) | LOCAL | MPP模式下登录使用MPP_LOCAL方式(N) | TASK_THREAD_NUMBER | 用于设置dmfldr处理用户数据的线程数目 | BUFFER_NODE_SIZE | 用于设置dmfldr读入文件缓冲区大小 | TASK_SEND_NODE_NUMBER | 用于设置dmfldr发送节点个数[16,65535] | LOB_NOT_FAST_LOAD | 如果一个表含有大字段,那么不使用dmfldr,因为dmfldr是一行一行提交的 | PRIMARY_CONFLICT | 主键冲突的处理方式[IGNORE|OVERWRITE],默认报错 | TABLE_FIRST | 是否先导入表(N):是(Y),否(N) | HELP | 打印帮助信息 |
1.1.2特殊参数
(USERID) 连接服务器。 必选参数
PWD 密码中带有特殊字符 ( /,@.:等), 需要外加三层双引号( """ """)进行转义。
./dimp USERID=SYSDBA/"""SYSDBA/,@.:"""@LOCALHOST:PORT
(FILE) 用于明确指定导入的文件(可以包含路径),可以包含多个文件,用逗号分隔。
./dimp USERID=SYSDBA/SYSDBA FILE=db_str.dmp LOG=db_str.log DIRECTORY=/mnt/data/dexp
(LOG) 用于明确指定导入的日志文件名称(可以包含路径),可以包含多个文件,用逗号分隔。
./dimp USERID=SYSDBA/SYSDBA FILE=db_str.dmp LOG=db_str.log FULL=Y
DIRECTORY=/mnt/data/dexp
(DIRECTORY) 用于指定导入文件及日志文件生成的路径。
没有指定路径,使用当前路径
./dimp USERID=SYSDBA/SYSDBA FILE=db_str.dmp LOG=db_str.log FULL=Y
./dimp USERID=SYSDBA/SYSDBA FILE=db_str.dmp LOG=db_str.log FULL=Y
DIRECTORY=/mnt/data/dexp
四种级别导入
全库导入,full =y
./dimp USERID=SYSDBA/SYSDBA FILE=db_str.dmp LOG=db_str.log FULL=Y DIRECTORY=/mnt/data/dexp
对象导入,OWNER=<用户名>{,<用户名>}
./dimp SYSDBA/SYSDBA FILE=db_str.dmp LOG=db_str.log OWNER=USER01 DIRECTORY=/mnt/data/dexp
模式导入,SCHEMAS=<模式名>{,<模式名>}
./dimp USERID=SYSDBA/SYSDBA FILE=db_str.dmp LOG=db_str.log SCHEMAS=USER01 DIRECTORY=/mnt/data/dexp
表级导入,TABLES=<表名>{,<表名>}
./dimp SYSDBA/SYSDBA FILE=db_str.dmp LOG=db_str.log TABLES=table1,table2 DIRECTORY=/mnt/data/dexp
1.1.3普通参数
PARALLEL
用于指定导出的过程中所使用的线程数目。
如果CPU 核心数为 N 的话,那一般来说 PARALLEL 为 N 或者 N+1 最合适。
设置PARALLEL=2时线程数为2
PARALLEL=2
TABLE_PARALLEL
用于指定导出每张表所使用的线程数。
TABLE_PARALLEL=3
IGNORE
指定是否忽略创建表错误。
IGNORE=Y
TABLE_EXISTS_ACTION
用于要导入的表已经存在时的处理方式。
PRAIMARY_CONFLICT=[SKIP | APPEND | TRUNCATE | REPLACE]
SKIP:跳过此表。
APPEND:直接向现有表中导入数据
TRUNCATE:先删除现有表中的数据,再向表中导入数据
REPLACE:先删除现有表,再导数据
FAST_LOAD
用于设置是否使用 dmfldr 进行数据导入
FAST_LOAD=Y/N
FAST_LOAD=Y 时才可以设置TABLE_PARALLEL参数,否则TABLE_PARALLEL参数无效。
FLDR_ORDER
用于设置使用dmfldr时, 是否严格按导出顺序来导入数据。
FAST_ORDER=Y/N
COMPILE
如果导出时包含过程/函数, 那么导入时会执行一个编译语句( alter ...compile)。COMPILE 用于设置是否在导入时,对过程或函数执行编译。
编译相当于执行重建操作,用于检查过程或函数是否还有效。编译成功, 说明对象是有效的;编译失败,说明对象不存在或发生改变,导致重建操作失败。 编译失败,导入停止。不编译就不检查有效性,直接导入。
COMPILE=N/Y
INDEXFILE
用于将表的索引/约束创建信息写入指定的文件。
INDEXFILE= /data/dimp/dimp.log
INDEXFIRST
INDEXFIRST 用于设置导入时是否先建索引。
INDEXFIRST=Y/N
创建索引的过程是先遍历数据再创建索引树。数据量比较大时,应该选择INDEXFIRST=Y,先创建索引再导入数据,这样就避免创建索引之前遍历大量数据而耗费时间;数据量小时,可任意选择。
BUFFER_NODE_SIZE
BUFFER_NODE_SIZE 用于设置 dmfldr 指定读取文件缓冲区页大小。可选参数, 默认为 10。
BUFFER_NODE_SIZE=<size_num>
值越大, 缓冲区的页数越多,每次可以读取的数据就越多,每次发送到服务器的数据也就越多,效率越高。但其大小受dmfldr客户端内存大小限制。
3. 物理备份还原
- DM7、DM6下联机完整备份、增量备份
- DM7、DM6数据库定时备份作业的配置
- 使用新备份还原
- RMAN工具使用
- DM7、DM6备份还原
- DM7、DM6增量还原
- DM7、DM6还原备份加归档
- RMAN工具使用
OPEN 状态支持备份、还原和恢复的操作;
MOUNT 状态支持归档备份、表空间级还原;
SUPEND 状态均不支持。
3.1归档
DM7 的联机库备份和表空间备份要求必须配置并开启本地归档,即在 dm.ini 中将
ARCH_INI 置为 1, 在 dmarch.ini 中配置本地归档
配置项 | 配置含义 | [ARCH_NAME] | REDO日志归档名 | ARCH_TYPE | REDO日志归档类型,LOCAL表示本地归档,REMOTE表示远程 | ARCH_DEST | REDO日志归档目标,LOCAL对应归档文件存放路径; REMOTE 对应远程目标节点实例名 | ARCH_FILE_SIZE | 单个REDO日志归档文件大小,取值范围(64M~2048M),缺省1024M,即1G | ARCH_SPACE_LIMIT | REDO 日志归档空间限制,当所有本地归档文件达到限制值时,系统自动删除最老的归档文件。0表示无空间限制,取值范围(1024M~4294967294M),缺省为0 | ARCH_INCOMING_PATH | 仅 REMOTE 归档有效,对应远程归档存放在本节点的实际路径 |
归档命令
alter database archivelog current;
alter system archive log current;
alter system switch logfile;
开关归档命令
ALTER DATABASE ARCHIVELOG | NOARCHIVELOG;
配置归档
联机配置归档
1)修改数据库为 MOUNT 状态。
SQL>ALTER DATABASE MOUNT;
2)配置本地归档。
SQL>ALTER DATABASE ADD ARCHIVELOG 'DEST = /home/dm_arch/arch, TYPE = local,
FILE_SIZE = 1024, SPACE_LIMIT = 2048';
3)开启归档模式。
SQL>ALTER DATABASE ARCHIVELOG;
4)修改数据库为 OPEN 状态。
SQL>ALTER DATABASE OPEN;
手动配置归档
1)手动编辑 dmarch.ini 文件,之后保存在 dm.ini 所在的目录。 dmarch.ini 文
件内容如下:
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = d:\dm_arch\arch
ARCH_FILE_SIZE = 1024
ARCH_SPACE_LIMIT = 2048
2)编辑 dm.ini 文件,设置参数 ARCH_INI=1,保存。
3)启动服务器,服务器已运行于归档模式
配置远程归档
1. ARCH_TYPE 设置为 REMOTE,表示是远程归档
2. ARCH_DEST 设置为远程数据库实例名,表示 REDO 日志发送到这个节点
3. ARCH_INCOMING_PATH 设置为本地存储路径,用于保存 ARCH_DEST 实例发送的REDO 日志
RAC0 实例的 dmarch.ini 配置:
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dmdata/dameng/arch_rac0
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 0
[ARCH_REMOTE1]
ARCH_TYPE = REMOTE
ARCH_DEST = RAC1
ARCH_INCOMING_PATH = /dmdata/dameng/arch_rac1
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 0
RAC1 实例的 dmarch.ini 配置:
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dmdata/dameng/arch_rac1
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 0
[ARCH_REMOTE1]
ARCH_TYPE = REMOTE
ARCH_DEST = RAC0
ARCH_INCOMING_PATH = /dmdata/dameng/arch_rac0
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 0
3.2联机备份还原
3.2.1联机备份
数据库备份
语法:
BACKUP DATABASE
[[[FULL] [DDL_CLONE]] | INCREMENT [CUMULATIVE][WITH BACKUPDIR '<基备份搜索目录>'{,'<基备份搜索目录>'} |[BASE ON <BACKUPSET '<基备份目录>']][TO <备份名>]BACKUPSET ['<备份集路径>']
[DEVICE TYPE <介质类型> [PARMS '<介质参数>']]
[BACKUPINFO '<备份描述>'] [MAXPIECESIZE <备份片限制大小>]
[IDENTIFIED BY <密码>[WITH ENCRYPTION<TYPE>][ENCRYPT WITH <加密算法>]]
[COMPRESSED [LEVEL <压缩级别>]] [WITHOUT LOG]
[TRACE FILE '< TRACE 文件名>'] [TRACE LEVEL < TRACE 日志级别>]
[TASK THREAD <线程数>][PARALLEL [<并行数>]];
FULL (全库)* DDL_CLONE | 完全备份 | 仅拷贝所有的元数据不拷贝数据。 | INCREMENT (增量)* CUMULATIVE CUMULATIVE WITH BACKUPDIR BASE ON | 备份类型。 INCREMENT 表示增量备份 | 用于增量备份中,指明为累积增量备份类型,若不指定则缺省为差异增量备份类型 | 指明为累积增量备份类型,若不指定则缺省为差异增量备份类型 | 指定基备份的搜索目录 | 指定基备份集目录 | TO * | 指定生成备份名称 默认备份名格式为:DB_备份类型_数据库名_备份时间 | BACKUPSET * | 指定当前备份集生成路径 | DEVICE TYPE | 指存储备份集的介质类型 支持DISK和TAPE,默认DISK | PARMS | 只对介质类型为 TAPE 时有效 | BACKUPINFO | 备份的描述信息 | MAXPIECESIZE | 最大备份片文件大小上限 | IDENTIFIED BY | 指定备份时的加密密码 | WITH ENCRYPTION | 指定加密类型 | ENCRYPT WITH | 加密算法。 缺省情况下,算法为 AES256_CFB |
全库备份
SQL>BACKUP DATABASE BACKUPSET 'db_bak_01';
设置联机数据库备份集路径
SQL>BACKUP DATABASE BACKUPSET '/db_bak_3_01';
设置备份名
SQL>BACKUP DATABASE TO WEEKLY_FULL_BAK BACKUPSET ' /db_bak_3_02';
增量备份指定基备份目录
SQL>BACKUP TABLESPACE MAIN BACKUPSET 'ts_full_bak_01'; SQL>BACKUP TABLESPACE MAIN INCREMENT BACKUPSET 'ts_increment_bak_01'; SQL>BACKUP TABLESPACE MAIN INCREMENT BASE ON BACKUPSET'ts_full_bak_01' BACKUPSET 'ts_increment_bak_02';
指定介质类型
SQL>BACKUP DATABASE BACKUPSET '/db_bak_3_03' DEVICE TYPE TAPE;
添加备份描述
SQL>BACKUP DATABASE BACKUPSET ' /db_bak_3_04' BACKUPINFO '完全备份';
限制备份片大小
SQL> BACKUP DATABASE BACKUPSET '/db_bak_3_05' MAXPIECESIZE 300;
备份压缩
SQL>BACKUP DATABASE BACKUPSET '/db_bak_3_06'COMPRESSED LEVEL 5;
并行备份
SQL>BACKUP DATABASE BACKUPSET '/db_bak_3_07'PARALLEL 8;
表空间备份
语法:
BACKUP TABLESPACE <表空间名> ----à
完全备份
SQL>BACKUP TABLESPACE MAIN FULL BACKUPSET ' /ts_full_bak_01';
增量备份
SQL>BACKUP TABLESPACE MAIN INCREMENT WITH BACKUPDIR '/ 'BACKUPSET '/ts_increment_bak_02';
表备份
备份表
SQL>BACKUP TABLE TAB_01 BACKUPSET 'tab_bak_01';
归档备份
语法:
BACKUP<ARCHIVE LOG |ARCHIVELOG> [ALL | [FROM LSN <lsn>]| [UNTIL LSN <lsn>]|[LSN BETWEEN <lsn> AND <lsn>] | [FROM TIME '<time>']|[UNTIL TIME '<time>']|[TIME BETWEEN'<time>'> AND '<time>']] [<notBackedUpSpec>]
[DELETE INPUT]
FROM TIME | 指定备份的开始的时间点 | UNTILTIME | 指定备份的截止的时间点。 | BETWEEN ... AND ... | 指定备份的区间 | <notBackedUpSpec> | 搜索过滤。 | DELETE INPUT | 用于指定备份完成之后,是否删除归档操作 |
首先,确定 LSN 范围。
SQL>select ARCH_LSN, CLSN, PATH from V$ARCH_FILE;
查询结果为:
ARCH_LSN CLSN PATH
38758 40301 d:\arch\ARCHIVE_LOCAL1_20160727105417748.log
40302 40303 d:\arch\ARCHIVE_LOCAL1_20160727111411079.log
40304 40305 d:\arch\ARCHIVE_LOCAL1_20160727111513679.log
50412 50413 d:\arch\ARCHIVE_LOCAL1_20160727171801098.log
50414 50478 d:\arch\ARCHIVE_LOCAL1_20160727171849712.log
通过查询结果选出备份的起始 LSN 和截至 LSN。比如 50414 50478
其次,备份归档。
SQL>BACKUP ARCHIVELOGLSN BETWEEN 50414 AND 50478 BACKUPSET' /arch_bak_time_14-78';
完全备份归档
SQL>BACKUP ARCHIVE LOG ALL BACKUPSET '/dbbak/arch_bak_01';
高级备份
加密备份
下面以数据库完全备份为例,创建加密密码为“cdb546” ,加密算法为“rc4”的复杂类型数据库加密备份
SQL>BACKUP DATABASE BACKUPSET '/home/dm_bak/db_bak_for_encrypt_01' IDENTIFIED BY "cdb546" WITH ENCRYPTION 2 ENCRYPT WITH RC4;
设置跟踪日志文件
SQL>BACKUP DATABASE BACKUPSET '/home/dm_bak/db_bak_for_trace' TRACE LEVEL 2;
3.2.2还原
DM7 仅支持表空间和表的联机还原,数据库和归档日志的还原必须通过脱机工具DMRMAN 执行。
表空间还原
表空间的还原、恢复操作是一次性完成,因此还原后不需要执行恢复操作。 使用表空间
完全备份还原表空间的完整步骤如下:
1) 配置归档,具体步骤见 3.1.2 归档配置 。
2) 保证数据库处于 OPEN 或 MOUNT 状态。
3) 备份表空间。
SQL>BACKUP TABLESPACE MAIN BACKUPSET '/home/dm_bak/ts_full_bak_01';
4) 校验表空间备份。此步骤为可选,如果确定备份文件合法可不进行备份校验。
SQL>SELECT SF_BAKSET_CHECK('DISK','/home/dm_bak/ts_full_bak_01');
5) 修改表空间为脱机。
SQL>ALTER TABLESPACE MAIN OFFLINE;
6) 还原表空间。
SQL>RESTORE TABLESPACE MAIN FROM BACKUPSET '/home/dm_bak/ts_full_bak_01';
6.2)增量还原表空间
SQL>RESTORE TABLESPACE MAIN FROM BACKUPSET'/home/dm_bak3/ts_incre_bak_02_02'WITH BACKUPDIR '/home/dm_bak2','/home/dm_bak';
7) 修改表空间为联机。
SQL>ALTER TABLESPACE MAIN ONLINE;
表还原
SQL>RESTORE TABLE TAB_01 FROM BACKUPSET 'tab_bak_01';
执行表结构还原。 表备份和表中都包含索引,如果直接执行表数据还原会报错:还
原表中存在二级索引或冗余约束。
SQL>RESTORE TABLE TAB_FOR_RES_02 STRUCT FROM BACKUPSET
'/home/dm_bak/tab_bak_for_res_02';
执行表数据还原。
SQL>RESTORE TABLE TAB_FOR_RES_02 FROM BACKUPSET
'/home/dm_bak/tab_bak_for_res_02';
指定还原时不重建索引
SQL>RESTORE TABLE TAB_FOR_RESWITHOUT INDEX FROM BACKUPSET '/home/dm_bak/tab_bak_for_res_01';
指定还原时不重建约束
SQL>RESTORE TABLETAB_FOR_CONS_01 WITHOUT CONSTRAINT FROM BACKUPSET '/home/dm_bak/tab_bak_for_res_01';
3.2.3管理备份
备份管理相关系统过程与函数总结如下:
SF_BAKSET_BACKUP_DIR_ADD: --添加备份目录。
SF_BAKSET_BACKUP_DIR_REMOVE: --指定删除内存中的备份目录。
SF_BAKSET_BACKUP_DIR_REMOVE_ALL: --删除内存中全部的备份目录。
SF_BAKSET_CHECK: --对备份集进行校验。
SF_BAKSET_REMOVE: --删除指定设备类型和指定备份集目录的备份集。
SF_BAKSET_REMOVE_BATCH: --批量删除满足指定条件的所有备份集。
SP_DB_BAKSET_REMOVE_BATCH: --批量删除指定时间之前的数据库备份集。
SP_TS_BAKSET_REMOVE_BATCH: --批量删除指定表空间对象及指定时间之前的表空间备份集。
SP_TAB_BAKSET_REMOVE_BATCH: --批量删除指定表对象及指定时间之前的表备份集。
SP_ARCH_BAKSET_REMOVE_BATCH: --批量删除指定条件的归档备份集。
备份管理相关动态视图总结如下:
V$BACKUPSET: --显示备份集基本信息。
V$BACKUPSET_DBINFO: --显示备份集的数据库相关信息。
V$BACKUPSET_DBF: --显示备份集中数据文件的相关信息。
V$BACKUPSET_ARCH: --显示备份集的归档信息。
V$BACKUPSET_BKP: --显示备份集的备份片信息。
V$BACKUPSET_SEARCH_DIRS: --显示备份集搜索目录。
V$BACKUPSET_TABLE: --显示表备份集中备份表信息。
V$BACKUPSET_SUBS: --显示并行备份中生成的子备份集信息。
备份目录管理
SF_BAKSET_BACKUP_DIR_ADD 函数 --添加备份目录。
CALL SF_BAKSET_BACKUP_DIR_ADD(device_type varchar,backup_dir varchar(256));
device_type: 待删除的备份目录对应存储介质类型。DISK 或者 TAPE。
backup_dir:待添加的备份目录。
SF_BAKSET_BACKUP_DIR_REMOVE 函数 --删除备份目录。
CALL SF_BAKSET_BACKUP_DIR_REMOVE (device_type varchar,backup_dir varchar(256))
backup_dir: 待删除的备份目录。
SF_BAKSET_BACKUP_DIR_REMOVE_ALL 函数 --清理全部备份目录,默认备份目录除外。
CALL SF_BAKSET_BACKUP_DIR_REMOVE_ALL ()
备份集校验与删除
SF_BAKSET_CHECK 函数 --对备份集进行校验。
CALL SF_BAKSET_CHECK(‘DISK’,‘BAKSET_PATH’);
bakset_path:待校验的备份集目录。
SQL>BACKUP DATABASE FULL BACKUPSET '/home/dm_bak/db_bak_for_check';
SQL> SELECT SF_BAKSET_CHECK('DISK','/home/dm_bak/db_bak_for_check');
SF_BAKSET_REMOVE 函数 --删除指定设备类型和指定备份集目录的备份集。
CALL SF_BAKSET_REMOVE (device_type varchar,backsetpath varchar(256),option integer);
backsetpath:待删除的备份集目录
Option:删除备份集选项, 0 默认删除, 1 级联删除。
SQL>BACKUP DATABASE FULL BACKUPSET '/home/dm_bak/db_bak_for_remove';
SQL>BACKUP DATABASE INCREMENT BACKUPSET '/db_bak_for_remove_incr';
SQL> SELECT SF_BAKSET_REMOVE('DISK','/home/dm_bak/db_bak_for_remove');
SF_BAKSET_REMOVE_BATCH 函数 --批量删除满足指定条件的所有备份集。
CALL SF_BAKSET_REMOVE_BATCH (device_type varchar,end_time datetime,range int,obj_name varchar(257))
call SF_BAKSET_REMOVE_BATCH ('DISK', now(), NULL, NULL);
end_time:删除备份集生成的结束时间
range:指定删除备份的级别。1代表库级, 2代表表空间级, 3代表表级, 4代表归档备份。
obj_name: 待删除备份集中备份对象的名称,仅表空间级和表级有效
SQL>BACKUP DATABASE FULL BACKUPSET '/home/dm_bak/db_bak_for_remove';
SQL>BACKUP TABLESPACEMAIN FULL BACKUPSET '/home/dm_bak/ts_bak_for_remove';
SQL>SELECT SF_BAKSET_REMOVE_BATCH ('DISK', now(), NULL, NULL);
SP_DB_BAKSET_REMOVE_BATCH 过程 --批量删除指定时间之前的数据库备份集 。
CALL SP_DB_BAKSET_REMOVE_BATCH (device_type varchar,end_time datetime)
end_time:删除备份集生成的结束时间
SQL>BACKUP DATABASE FULL BACKUPSET '/home/dm_bak/db_bak_for_batch_del';
SQL>SELECT SF_BAKSET_BACKUP_DIR_ADD('DISK','/home/dm_bak');
SQL>CALL SP_DB_BAKSET_REMOVE_BATCH('DISK', NOW());
SP_TS_BAKSET_REMOVE_BATCH 过程 --批量删除指定表空间对象及指定时间之前的表空间备份集。
CALL SP_DB_BAKSET_REMOVE_BATCH (device_type varchar,end_time datetime);
end_time:删除备份集生成的结束时间,仅删除 end_time 之前的备份集
SQL>BACKUP DATABASE FULL BACKUPSET '/home/dm_bak/db_bak_for_batch_del';
SQL>SELECT SF_BAKSET_BACKUP_DIR_ADD('DISK','/home/dm_bak');
SQL>CALL SP_DB_BAKSET_REMOVE_BATCH('DISK', NOW());
SP_TS_BAKSET_REMOVE_BATCH 过程 --批量删除指定表空间对象及指定时间之前的表空间备份集。
CALL SP_TS_BAKSET_REMOVE_BATCH (device_type varchar,end_time datetime,ts_name varchar(128))
end_time:删除备份集生成的结束时间
ts_name:表空间名
SQL>BACKUP TABLESPACE MAIN BACKUPSET '/home/dm_bak/ts_bak_for_batch_del';
SQL>SELECT SF_BAKSET_BACKUP_DIR_ADD('DISK','/home/dm_bak');
SQL>CALL SP_TS_BAKSET_REMOVE_BATCH('DISK',NOW(),'MAIN');
SP_TAB_BAKSET_REMOVE_BATCH 过程 --批量删除指定表对象及指定时间之前的表备份集。
CALL SP_TAB_BAKSET_REMOVE_BATCH (device_type varchar,end_time datetime,sch_name varchar(128),tab_name varchar(128))
end_time:删除备份集生成的结束时间
sch_name:表所属的模式名
tab_name:表名
SQL>CREATE TABLE TAB_FOR_BATCH_DEL(C1 INT);
SQL>BACKUP TABLE TAB_FOR_BATCH_DEL BACKUPSET'/home/dm_bak/tab_bak_for_batch_del';
SQL> SELECT SF_BAKSET_BACKUP_DIR_ADD('DISK','/home/dm_bak');
SQL> CALL SP_TAB_BAKSET_REMOVE_BATCH('DISK',NOW(),'SYSDBA','TAB_FOR_BATCH_DEL');
SP_ARCH_BAKSET_REMOVE_BATCH 过程 --批量删除指定时间之前的归档备份集。
CALL SP_ARCH_BAKSET_REMOVE_BATCH (device_type varchar,end_time datetime)
end_time:删除备份集生成的结束时间
SQL>BACKUP ARCHIVELOG BACKUPSET '/home/dm_bak/arch_bak_for_batch_del';
SQL>SELECT SF_BAKSET_BACKUP_DIR_ADD('DISK','/home/dm_bak');
SQL>CALL SP_ARCH_BAKSET_REMOVE_BATCH('DISK', NOW());
备份信息查看
DM7 提供了一系列动态视图供用户查看备份集相关信息,在查看之前应先使用SF_BAKSET_BACKUP_DIR_ADD 添加备份集目录,否则只显示默认备份路径下的备份集信息,使用方法如下例所示:
SQL>SELECT SF_BAKSET_BACKUP_DIR_ADD('DISK', '/home/dm_bak');
V$BACKUPSET --显示备份信息
查看备份集的介质类型、备份路径、备份类型等基本信息
SQL>SELECT DEVICE_TYPE,BACKUP_PATH, TYPE, RANGE# FROM V$BACKUPSET;
序号 | 列 | 数据类型 | 说明 | 1 | DEVICE_TYPE | VARCHAR(10) | 备份集存储介质类型 | 2 | BACKUP_ID | INTEGER | 备份 ID | 3 | PARENT_ID | INTEGER | 并行备份的子备份集所属备份的 ID | 4 | BACKUP_NAME | VARCHAR(129) | 备份名 | 5 | BACKUP_PATH | VARCHAR(257) | 备份路径 | 6 | TYPE | INTEGER | 0:基备份,1:增量备份,2:表备份,3:归档备份 | 7 | LEVEL | INTEGER | 是否脱机备份。0:联机备份,1:脱机备份 | 8 | RANGE# | INTEGER | 1:库备份,2:表空间备份,3:表级备份,4:归档备份 | 9 | OBJECT_NAME | VARCHAR(513) | 对象名:数据库名、表空间名或者表名 | 10 | OBJECT_ID | INTEGER | 对象 ID,表备份时无效 | 11 | BASE_NAME | VARCHAR(129) | 基备份名,表备份时无效 | 12 | BACKUP_TIME | DATETIME(6) | 备份时间 | 13 | DESC# | VARCHAR(513) | 备份描述信息 | 14 | ENCRYPT_TYPE | INTEGER | 加密类型 | 15 | COMPRESS_LEVEL | INTEGER | 压缩级别 | 16 | WITHOUT_LOG | INTEGER | 联机数据库备份是否备份日志,表备份时无效 | 17 | USE_PWR | INTEGER | 增量备份过程中是否使用 PWR 优化,均不使用,保留仅为了兼容 | 18 | PKG_SIZE | INTEGER | 数据包大写标志,内部实现 | 19 | BEGIN_LSN | BIGINT | 备份的起始 LSN 值,表备份时无效 | 20 | END_LSN | BIGINT | 结束备份的 LSN 值,表备份时无效 | 21 | BKP_NUM | INTEGER | 备份片个数,即备份集中.bak 文件个数 | 22 | DBF_NUM | INTEGER | 备份集中包含的数据库\表空间数据文件个数,表备份时无效 | 23 | PARALLEL_NUM | INTEGER | 并行备份的并行数, 0 或者 1 为非并行备份集 | 24 | DDL_CLONE | INTEGER | DDL_CLONE 库备份标识,0不是,1是 | 25 | MPP_FLAG | INTEGER | MPP 库备份标识, 0 不是, 1 是 | 26 | MIN_TRX_START_LSN | BIGINT | 备份时活动事务最小的 LSN | 27 | MIN_EXEC_VER | INTEGER | 备份集适用的最小执行码的版本号,转换为 16 进制匹配版本号 | 28 | CUMULATIVE | INTEGER | 增量备份时,是否为累积增量备份。1 是,0 否 |
V$BACKUPSET_DBINFO --显示备份集的数据库相关信息
下面以创建表备份为例,查看备份集的页大小、簇大小、大小写是否敏感、 UNICODE_FLAG 等数据库信息
SQL>SELECT BACKUP_PATH, PAGE_SIZE, EXTENT_SIZE, CASE_SENSITIVE FROM;
序号 | 列 | 数据类型 | 说明 | 1 | DEVICE_TYPE | VARCHAR(10) | 备份集存储介质类型 | 2 | BACKUP_ID | INTEGER | 备份 ID | 3 | BACKUP_NAME | VARCHAR(129) | 备份名 | 4 | BACKUP_PATH | VARCHAR(257) | 备份路径 | 5 | EXTENT_SIZE | INTEGER | 数据文件使用的簇大小 | 6 | PAGE_SIZE | INTEGER | 页大小 | 7 | LOG_PAGE_SIZE | INTEGER | 日志文件页大小 | 8 | CASE_SENSITVE | INTEGER | 大小写敏感标志 | 9 | DB_MAGIC | INTEGER | 数据库的 magic | 10 | PM_DB_MAGIC | INTEGER | 永久魔数( permenant_magic) | 11 | UNICODE_FLAG | INTEGER | unicode 标志 | 12 | DB_VERSION | INTEGER | 数据库版本 | 13 | GLOBAL_VERSION | VARCHAR(512) | 数据库全局版本信息 | 14 | ENABLE_POLICY | INTEGER | 安全策略 | 15 | ARCH_FLAG | INTEGER | 归档是否打开的标志 | 16 | RAC_NODE | INTEGER | 高性能集群的节点数目 | 17 | PAGE_CHECK | INTEGER | 数据页校验配置 | 18 | RLOG_ENCRYPT | INTEGER | 归档日志是否加密 | 19 | EX_CIPHER_NAME | VARCHAR(512) | 外部加密算法名称 | 20 | EX_CIPHER_ID | INTEGER | 外部加密算法名称对应的 ID | 21 | EX_HASH_NAME | VARCHAR(512) | 外部 HASH 算法名称 | 22 | EX_HASH_ID | INTEGER | 外部 HASH 算法名称对应的 ID | 23 | LENGTH_IN_CHAR | INTEGER | VARCHAR 类型长度是否以字符为单位 | 24 | USE_NEW_HASH | INTEGER | 是否使用改进的字符类型 HASH 算法 | 25 | BLANK_PAD_MODE | INTEGER | 数据库空格填充模式 |
V$BACKUPSET_DBF 显示备份集中数据文件的相关信息,表备份时无效。
查看备份集中的数据文件信息
SQL>SELECT FILE_SEQ, TS_ID, FILE_ID, TS_NAME, FILE_NAME FROM V$BACKUPSET_DBFWHERE BACKUPPATH ='/home/dm_bak/ts_bak_for_dbf';
显示备份集中数据文件的相关信息,表备份时无效。
序号 | 列 | 数据类型 | 说明 | | 1 | DEVICE_TYPE | VARCHAR(10) | 备份集存储介质类型 | 2 | BACKUP_ID | INTEGER | 备份 ID | 3 | BACKUPNAME | VARCHAR(129) | 备份名 | 4 | BACKUPPATH | VARCHAR(257) | 备份路径 | 5 | FILE_SEQ | INTEGER | 备份的数据文件序号 | 6 | TS_ID | INTEGER | 表空间 ID | 7 | FILE_ID | INTEGER | 数据文件 ID | 8 | TS_STATE | INTEGER | 表空间状态 | 9 | TS_NAME | VARCHAR(129) | 表空间名 | 10 | FILE_NAME | VARCHAR(257) | 包含完整路径的数据文件名 | 11 | MIRROR_PATH | VARCHAR(257) | 镜像文件路径 | 12 | FILE_LEN | BIGINT | 数据文件占用的字节大小 | 13 | MAX_LIMIT_SIZE | VARCHAR(512) | 文件最大大小,以 M 为单位 | 14 | AUTO_EXTEND | INTEGER | 是否支持自动扩展: 1 支持, 0 不支持 | 15 | NEXT_SIZE | INTEGER | 文件每次扩展大小,以 M 为单位 | 16 | START_BKP_SEQ | INTEGER | 起始备份片编号 | 17 | START_BKP_OFF | BIGINT | 起始备份片偏移 | 18 | END_BKP_SEQ | INTEGER | 结束备份片编号 | 19 | END_BKP_OFF | BIGINT | 结束备份片偏移 |
V$BACKUPSET_ARCH 显示备份集中归档文件的信息,且仅归档备份才会有数据。
以数据库备份为例查询备份集日志信息。
SQL>SELECT BACKUPPATH, FILE_SEQ, BEGIN_LSN, END_LSN FROM V$BACKUPSET_ARCHWHERE BACKUPPATH='/home/dm_bak/db_bak_for_arch';
序号 | 列 | 数据类型 | 说明 | 1 | DEVICE_TYPE | VARCHAR(10) | 备份集存储介质类型 | 2 | BACKUP_ID | INTEGER | 备份 ID | 3 | BACKUPNAME | VARCHAR(129) | 备份名 | 4 | BACKUPPATH | VARCHAR(257) | 备份路径 | 5 | FILE_SEQ | INTEGER | 备份的数据文件序号 | 6 | FILE_NAME | VARCHAR(257) | 归档文件路径 | 7 | FILE_LEN | BIGINT | 归档文件大小 | 8 | BEGIN_LSN | BIGINT | 备份归档的起始 LSN 值 | 9 | BEGIN_SEQNO | BIGINT | 起始备份归档序号 | 10 | BEGIN_RPAG_OFF | INTEGER | 备份归档起始 LSN 对应归档页内偏移 | 11 | END_LSN | BIGINT | 结束备份归档的 LSN 值 | 12 | CREATE_TIME | DATETIME | 归档文件的创建时间 | 13 | CLOSE_TIME | INTEGER | 归档文件的关闭时间 | 14 | START_BKP_SEQ | INTEGER | 起始备份片编号 | 15 | START_BKP_OFF | BIGINT | 起始备份片偏移 | 16 | END_BKP_SEQ | INTEGER | 结束备份片编号 | 17 | END_BKP_OFF | BIGINT | 结束备份片偏移 |
V$BACKUPSET_BKP 显示备份集的备份片信息。
序号 | 列 | 数据类型 | 说明 | | 1 | DEVICE_TYPE | VARCHAR(10) | 备份集存储介质类型 | | 2 | BACKUP_ID | INTEGER | 备份 ID | 3 | BACKUPNAME | VARCHAR(129) | 备份名 | 4 | BACKUPPATH | VARCHAR(257) | 备份路径 | 5 | BKP_NTH | INTEGER | 备份片文件编号 | 6 | FILE_NAME | VARCHAR(257) | 备份文件名 | 7 | BKP_LEN | BIGINT | 备份片长度 |
V$BACKUPSET_SEARCH_DIRS --显示备份集搜索目录。
V$BACKUPSET_TABLE --显示表备份集中备份表信息,仅表备份有效
SELECT BACKUPNAME, TABLENAME FROM V$BACKUPSET_TABLE WHERE BACKUPPATH='/home/dm_bak/tab_bak_for_info';
序号 | 列 | 数据类型 | 说明 | 1 | DEVICE_TYPE | VARCHAR(10) | 备份集存储介质类型 | | 2 | BACKUP_ID | INTEGER | 备份 ID | | 3 | BACKUPNAME | VARCHAR(129) | 备份名 | | 4 | BACKUPPATH | VARCHAR(257) | 备份路径 | | 5 | SCHEMANAME | VARCHAR(129) | 备份表所属的模式名 | | 6 | USERNAME | VARCHAR(129) | 执行表备份的用户名 | | 7 | TSNAME | VARCHAR(129) | 备份表存储的表空间名 | | 8 | TABLENAME | VARCHAR(129) | 备份表名 | | 9 | TABLETYPE | INTEGER | 表类型 | | 10 | INITSQL | VARCHAR(4097) | 完整建表语句,忽略引用约束 (语句可能会被截断) | | 11 | DCONS_SQL | VARCHAR(4096) | 备份表中被禁用约束的创建语句(语句可能会 被截断, DMRMAN 可查看完整语句) | | 12 | DIDX_SQL | VARCHAR(4096) | 备份表中无效二级索引的创建语句(语句可能 会被截断, DMRMAN 可查看完整语句) | | 13 | BIDX_NUM | INT | 备份集中备份的二级索引个数 | | 14 | META_VERSION | INT | 当前表备份的元信息的版本号 | | | | | | | |
3.3脱机DMRMAN备份还原
使用rman注意事项
1) 保证数据库处于脱机状态。
2) 打开dmap
3) 使用dmdba用户
4) 进入dmrman ./dmrman
5)备份集权限,属组
6) ./dmramn use_ap=2 不使用dmap(较慢)
输入以下用于执行的 DMRMAN 命令:
RMAN>HELP
DMRMAN 参数
参数 | 含义 | 备注 | CTLFILE | 指定执行语句所在的文件路径,不能和 CTLSTMT 同时使用。脚本文件格式支持*.txt | 可选参数 | CTLSTMT | 指定待执行语句, 不能和 CTLFILE 同时使用。如: CTLSTMT="BACKUP DATABASE '/home/dmdbms/data/DAMENG/dm.ini'" | 可选参数 | DCR_INI | 指定 dmdcr.ini 路径, 用于 ASM 存储时访问 ASM 服务; 若未指定, 则认为不存在 ASM 存储使用。可单独使用,也可与其他参数配合使用。主要用于 DMRAC环境 | 可选参数 | USE_AP | 指定备份还原执行策略。取值 1、 2。默认为 1。 1:使用 DMAP 插件方式执行备份还原;执行备份还原时要求先启动 DMAP服务。 2:无插件方式, 由 DMSERVER 进程自身完成备份还原,不再依赖 DMAP 服务;配置成 2 的情况下,不能执行第三方备份( 指定 DEVICE TYPE 为 TAPE)。 | 可选参数 | HELP | 打印帮助信息 | 可选参数 |
3.3.1使用 CONFIGURE 命令
使用 CONFIGURE 命令进行 DMRMAN 的默认参数配置,配置默认的存储介质类型、备份
集搜集目录、归档日志搜集目录、跟踪日志文件
可显示 DMRMAN 配置项的当前值。
RMAN>CONFIGURE; THE DMRMAN DEFAULT SETTING: DEFAULT DEVICE: MEDIA : DISK DEFAULT TRACE : FILE : LEVEL : 1 DEFAULT BACKUP DIRECTORY: TOTAL COUNT :0 DEFAULT ARCHIVE DIRECTORY: TOTAL COUNT :0
使用 CONFIGURE...CLEAR 命令可恢复任意一个配置项到默认值。 示例如下: RMAN>CONFIGURE DEFAULT DEVICE CLEAR; 使用 CONFIGURE...CLEAR 命令清除所有的默认配置。 示例如下: RMAN>CONFIGURE CLEAR;
3.3.2备份
数据库备份
执行数据库备份要求数据库处于脱机状态。与联机备份数据库不同的是,脱机备份不需要配置归档。
全备:
RMAN>BACKUP DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' FULL BACKUPSET '/home/dm_bak/db_full_bak_01';
增量:
RMAN>BACKUP DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' INCREMENT WITH BACKUPDIR '/home/dm_bak' BACKUPSET '/home/dm_bak/db_increment_bak_02';
语法如下:
BACKUP DATABASE '<INI 文 件 路 径 >' [[[FULL][DDL_CLONE]] |INCREMENT
[CUMULATIVE][WITH BACKUPDIR '<基备份搜索目录>'{,'<基备份搜索目录>'}]|[BASE ONBACKUPSET '<基备份集目录>']][TO <备份名>] [BACKUPSET '<备份集目录>'][DEVICE TYPE <介质类型>[PARMS '<介质参数>'][BACKUPINFO '<备份描述>'] [MAXPIECESIZE <备份片限制大小>][IDENTIFIED BY <加密密码>[WITH ENCRYPTION<TYPE>][ENCRYPT WITH <加密算法>]][COMPRESSED [LEVEL <压缩级别>]][WITHOUT LOG][TASK THREAD <线程数>][PARALLEL [<并行数>]];
FULL (全库)* DDL_CLONE | 完全备份 | 仅拷贝所有的元数据不拷贝数据。 | INCREMENT (增量)* CUMULATIVE CUMULATIVE WITH BACKUPDIR BASE ON | 备份类型。 INCREMENT 表示增量备份 | 用于增量备份中,指明为累积增量备份类型,若不指定则缺省为差异增量备份类型 | 指明为累积增量备份类型,若不指定则缺省为差异增量备份类型 | 指定基备份的搜索目录 | 指定基备份集目录 | TO | 指定生成备份名称 默认备份名格式为:DB_备份类型_数据库名_备份时间 | BACKUPSET * | 指定当前备份集生成路径 | DEVICE TYPE | 指存储备份集的介质类型 支持DISK和TAPE,默认DISK | PARMS | 只对介质类型为 TAPE 时有效 | BACKUPINFO | 备份的描述信息 | MAXPIECESIZE | 最大备份片文件大小上限 | IDENTIFIED BY | 指定备份时的加密密码 | WITH ENCRYPTION | 指定加密类型 | ENCRYPT WITH | 加密算法。 缺省情况下,算法为 AES256_CFB |
备份归档
在 DMRMAN 工具中使用 BACKUP 命令你可以备份库的归档。使用 DMRMAN 备份数据库需要设置归档,否则会报错。
RMAN>BACKUP ARCHIVE LOG ALL DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' BACKUPSET '/home/dm_bak/arch_all_bak_01';
创建设置条件的归档备份
RMAN>BACKUP ARCHIVE LOG LSN BETWEEN 50000 AND 120000DATABASE '/opt/dmdbms/data/DAMENG/dm.ini'BACKUPSET '/home/dm_bak/db_increment_bak_02';
命令中的 LSN BETEEWN start AND end 参数表示执行的备份为执行备份的区间, 或者设置 FROM LSN(TIME)以及 UNTIL LSN(TIME)。
3.3.3管理备份
查看备份集
语法如下:
SHOW BACKUPSET '< 备 份 集 目 录 >' [<device_type_stmt>][RECURSIVE]
[<database_bakdir_lst_stmt>] [<info_type_stmt>] [<to_file_stmt>];
|SHOW BACKUPSETS [<device_type_stmt>] <database_bakdir_lst_stmt>
[<info_type_stmt>] [<use_db_magic_stmt>] [<to_file_stmt>];
<database_bakdir_lst_stmt>::= DATABASE '<INI_PATH>' |
WITH BACKUPDIR '<备份集搜索目录>'{,'<备份集搜索目录>'} |
DATABASE '<INI_PATH>' WITH BACKUPDIR '<备份集搜索目录>'{, '<备份集搜索目录>'}
<device_type_stmt>::= DEVICE TYPE DISK|TAPE [PARMS '<介质参数>']
<info_type_stmt>::= INFO DB[,META][,FILE] [,TABLE]
<use_db_magic_stmt>::= USE DB_MAGIC <db_magic>
<to_file_stmt>::= TO '<输出文件路径>' [FORMAT TXT | FORMAT XML]
查看指定的备份集信息
RMAN> show backupset'/home/dm_bak/DB_DAMENG_FULL_2017022';
批量显示备份集信息
RMAN>SHOW BACKUPSETS WITH BACKUPDIR '/home/dm_bak1','/home/dm_bak2';
查看指定数据库所有备份集的信息
获取 DB_MAGIC 信息。
RMAN>SHOW BACKUPSET'/home/dm_bak/db_bak_for_show_db_magic_01';
通过查看备份集信息可知,数据库/opt/dmdbms/data/DAMENG 的 DB_MAGIC 值为1447060265。
RMAN>SHOW BACKUPSETS WITH BACKUPDIR '/home/dm_bak' USE DB_MAGIC 1447060265;
备份集校验
CHECK BACKUPSET '<备份集目录>'
[DEVICE TYPE<介质类型> [PARMS '<介质参数>']][DATABASE '<INI_PATH>']
RMAN>CHECK BACKUPSET '/home/dm_bak/db_bak_for_check_01';
备份集删除
RMAN>REMOVE BACKUPSET '/home/dm_bak/db_bak_for_remove_01';
RMAN>REMOVE BACKUPSET 'db_bak_for_remove_01' DATABASE'/opt/dmdbms/data/DAMENG/dm.ini';
批量删除所有备份集
RMAN>REMOVE BACKUPSETS WITH BACKUPDIR '/home/dm_bak';
批量删除指定时间之前的备份集
RMAN>REMOVE BACKUPSETS WITH BACKUPDIR '/home/dm_bak' UNTIL TIME'2015-11-100:00:00';
备份集导入
RMAN>LOAD BACKUPSETS FROM DEVICE TYPE DISK TO BACKUPDIR '/mnt/dm7src/bak_dir';
DUMP备份集映射文件导出
备份集映射文件导出,是备份管理的主要功能,是将备份集中各数据文件的原始路径或者调整后的路径生成到一个本地文件中,可通过关键字 MAPPED FILE 应用于表空间和库的还原操作中。
DMRMAN 中使用 DUMP 命令导出映射文件。 不支持导出到 DMASM 文件系统中
导出备份集中数据文件的原始路径。 RMAN>DUMP BACKUPSET'/mnt/dm7src/db_bak'DEVICE TYPE DISK MAPPED FILE '/mnt/dm7src/db_bak_mapped.txt';
导出指定 INI_PATH 调整后的路径 指定 INI_PATH,导出调整后的数据文件路径到映射文件。 RMAN>DUMP BACKUPSET'/mnt/dm7src/db_bak'DEVICE TYPE DISKDATABASE '/opt/dmdbms/data/DAMENG/dm.ini'MAPPED FILE '/mnt/dm7src/db_bak_mapped.txt';
3.3.4还原和恢复
数据库还原和恢复
数据库还原
语法:
RESTORE DATABASE <restore_type> FROM BACKUPSET '<备份集目录>'
[DEVICE TYPE DISK|TAPE[PARMS '<介质参数>']]
[IDENTIFIED BY <密码> [ENCRYPT WITH <加密算法>]]
[WITH BACKUPDIR '<基备份集搜索目录>'{,'<基备份集搜索目录>'}]
[MAPPED FILE '<映射文件>'][TASK THREAD <任务线程数>] [NOT PARALLEL]
[RENAME TO '<数据库名>'];
<restore_type>::=<type1>|<type2>
<type1>::='<INI文件路径>'[REUSE DMINI][OVERWRITE]
<type2>::= TO '<system_dbf 所在路径>' [OVERWRITE]
BACKUPSET* | 指定用于还原目标数据库的备份集目录 | DEVICE TYPE | 指存储备份集的介质类型,默认为 DISK | PARMS | 介质参数 | IDENTIFIED BY | 指定备份时使用的加密密码 | ENCRYPT WITH | 指定备份时使用的加密算法 | WITH BACKUPDIR | 指定备份集搜索目录 | MAPPED FILE | 指定存放还原目标路径的文件 | RENAME TO | 指定还原数据库后是否更改库的名字 | <restore_type> | |
<restore_type>:
<type1>
1>指定 dm.ini 还原,要求 dm.ini 中 CTL_PATH 必须配置正确,且内容有效;若配
置 CTL_PATH 文件故障,且想利用 dm.ini 优化配置,则可选择 type2 还原后,用指定
dm.ini 覆盖还原后 dm.ini,并修改 CTL_PATH 为当前控制文件路径即可;
2>除 dm.ini 文件外,其他文件均可不存在; 但 dm.ini 参数配置必须正确,且配置
的 dm.ctl 文件必须是有效的控制文件;
3>数据库配置文件中除已经存在的 dm.ini 外, 先删除控制文件中的数据文件,然后
根据 overwrite 选项,若指定 overwrite,其他文件(这些文件不在控制文件中,所以
未删除) 均采用删除重建的处理,避免存在非法的文件,否则如果这些文件已经存在,则报
错;
4>若指定 REUSE DMINI,则会将备份集中备份的 dm.ini 中除路径相关的 INI 参数
外,均拷贝到当前 dm.ini 上
联机日志
上述<type1>和<type2>中的还原后的联机日志文件至少会有两个,因为源库中的日
志文件可能大于等于两个,如果小于两个(被误删的情况)的则补齐为两个。 已经存在的联
机日志配置,使用原路径,若文件大小非法,则使用缺省大小 256M 重建;缺少的使用缺省
命名和缺省大小 256M 重建。 联机日志文件的命名规则:
1>单机: db_name+(file_id+1).log,其中 fil_id + 1,占 2 个位置,如: db_name=DAMENG,
则相应的名称为 DAMENG01.log, DAMENG02.log;
2>RAC: rac+(ep_no + 1)_+(file_id+1).log,其中 ep_no + 1 和 file_id+1 均占 2 个位置,
如 0 号节点日志名称为 rac01_01.log, rac01_02.log
还原数据库
RMAN>RESTORE DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' FROM BACKUPSET '/home/dm_bak/db_full_bak_for_restore';
数据库恢复
RECOVER DATABASE '<INI 文件路径>' [<with_archdir_lst_stmt>]
[USE DB_MAGIC <db_magic>] [UNTIL TIME '<时间串>'] [UNTIL LSN <LSN>];
RECOVER DATABASE '<INI 文 件 路 径 >' FROM BACKUPSET '< 备 份 集 目 录 >'[DEVICE TYPEDISK|TAPE[PARMS '<介质参数>']] [IDENTIFIED BY <密码> [ENCRYPT WITH <加密算法>]];
RECOVER DATABASE '<INI 文件路径>' UPDATE DB_MAGIC;
<with_archdir_lst_stmt> ::=WITH ARCHIVEDIR '<归档日志目录>'{,'<归档日志目录>'}
DATABASE* | 指定还原库目标的 dm.ini 文件路径 | USE DB_MAGIC | 指定本地归档日志对应数据库的 DB_MAGIC | UNTIL TIME | 恢复数据库到指定的时间点 | UNTIL LSN | 恢复数据库到指定的 LSN | BACKUPSET* | 指定用于还原目标数据库的备份集目录 | DEVICE TYPE | 指存储备份集的介质类型,默认为 DISK | PARMS | 介质参数,供第三方存储介质( TAPE 类型) 管理使用 | IDENTIFIED BY | 指定备份时使用的加密密码 | ENCRYPT WITH | 指定备份时使用的加密算法 | WITH ARCHIVEDIR | 本地归档日志搜索目录 |
更新 DB_MAGIC 恢复 --在不需要重做归档日志恢复数据的情况下,可以直接更新 DB_MAGIC
RMAN>RECOVER DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' UPDATE DB_MAGIC;
从备份集恢复
RMAN>RECOVER DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' FROM BACKUPSET '/home/dm_bak/db_full_bak_for_recover_backupset';
从归档恢复 --从归档恢复是利用重做本地归档日志来恢复数据的过程
RMAN>RECOVER DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' WITH ARCHIVEDIR'/home/dm_arch/arch' USE DB_MAGIC 1447060265;
若还原后,立即执行执行恢复,可以不用获取源库 DB_MAGIC。因为 DMRMAN 执行库级备份集还原后,会将备份集中的 DB_MAGIC 刷入还原后的库中。 |
若执行后归档恢复过程中,出现归档不足的错误,则利用归档校验工具 dmrachk, 查看归档目录中归档连续性情况,然后再利用备份的本地归档日志,还原到归档目录后,再次执行恢复操作。 ./dmrachk arch_path=/home/dm_arch/arch ...... ARCH_PATH 的归档文件链表是不连续的。 breakpoint 0: the left file /home/dm_arch/arch/ARCHIVE_LOCAL1_20160112161534890.log, clsn: 421311 the right file /home/dm_arch/arch/ARCHIVE_LOCAL1_20160113140135670.log, arch_lsn: 423208 breakpoint 1: the left file /home/dm_arch/arch/ARCHIVE_LOCAL1_20160114085528401.log, clsn: 424273 the right file /home/dm_arch/arch/ARCHIVE_LOCAL1_20160114092356075.log, arch_lsn: 425285 the rachk tool running cost 949.011 ms DMRMAN 查看归档备份的范围: RMAN>show backupset '/home/dm_bak/arch_bak_lsn_421401' INFO META; backup range: archivelog arch start lsn: 421300 arch end lsn: 425550 可见本地归档缺失部分(421311,423208]、 (424273,425285]在归档备份范围内 [421300,425550]中,执行归档还原后,再次执行利用本地归档恢复操作。 RMAN>RESTORE ARCHIVELOGFROM BACKUPSET '/home/dm_bak/arch_bak_lsn_421401' ALL TO ARCHIVEDIR '/home/dm_arch/arch'; |
表空间还原
RMAN>restore database'/home/DMDBMS/rac/dm01.ini' tablespace main from backupset '/home/DMDBMS/bak/rman_dm01_01' with archivedir'/home/DMDBMS/rac/arch_dest1';
RMAN>recover database'/home/DMDBMS/rac/dm01.ini' tablespace main
归档还原
使用 RESTORE 命令完成脱机还原归档操作,在还原语句中指定归档备份集。备份集可以是脱机归档备份集, 也可以是联机归档备份集
还原归档。启动 DMRMAN, 设置 OVERWRITE 为 2,如果归档文件已存在,会报错。 RMAN>RESTORE ARCHIVE LOG FROM BACKUPSET '/home/dm_bak/arch_all_for_restore' TO DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini'OVERWRITE 2; 或者 RMAN>RESTORE ARCHIVE LOG FROM BACKUPSET '/home/dm_bak/arch_all_for_restore' TO ARCHIVEDIR'/opt/dmdbms/data/DAMENG_FOR_RESTORE/arch_dest'OVERWRITE 2;
高级还原和恢复
指定映射文件还原
还原后的数据文件默认地生成到还原目标库的路径下,如果用户想生成数据文件到特定的路径,就需要指定映射文件参数来实现。
脱机备份还原为例说明使用映射文件还原的具体步骤。 1) 启动 RMAN,脱机备份数据库。 RMAN> BACKUP DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' BACKUPSET'/home/dm_bak/db_bak_for_map_01'; 2) 生成映射文件 map_file_01.txt 至/home/dm_mapfile 目录。 此处指定生成映射文件中的数据文件路径与数据库/opt/dmdbms/data/DAMENG_FOR_RESTORE 中的数据文件一致。若不指定,与备份集中的源数据库的数据文件路径一致。 RMAN> DUMP BACKUPSET'/home/dm_bak/db_bak_for_map_01' DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' MAPPED FILE'/home/dm_mapfile/map_file_01.txt'; 生成的映射文件内容如下:
/**************************************************************/ /*** Delete the unnecessary modified groups **/ /*** Modify the data_path or mirror_path only in one group **/ /**************************************************************/ /**=============================================================**/ /*[DAMENG_SYSTEM_FIL_0]*/ fil_id = 0 ts_id = 0 ts_name = SYSTEM | data_path = /opt/dmdbms/data/DAMENG_FOR_RESTORE/SYSTEM.DBF mirror_path = /**=============================================================**/ /*[DAMENG_ROLL_FIL_0]*/ fil_id = 0 ts_id = 1 ts_name = ROLL data_path = /opt/dmdbms/data/DAMENG_FOR_RESTORE/ROLL.DBF mirror_path = /**=============================================================**/ /*[DAMENG_MAIN_FIL_0]*/ fil_id = 0 ts_id = 4 ts_name = MAIN data_path = /opt/dmdbms/data/DAMENG_FOR_RESTORE/MAIN.DBF mirror_path = /***************************** END ****************************/ |
如果需要恢复数据文件或镜像文件到指定路径,可手动编辑映射文件中表空间对应的 data_path 属性。例如,要还原 MAIN 表空间中的数据文件 MAIN.DBF 到/home/dm_dbf 路径下,修改组 DAMENG_MAIN_FIL_0 的内容如下:
/*[DAMENG_MAIN_FIL_0]*/ fil_id = 0 ts_id = 4 ts_name = MAIN data_path = /home/dm_dbf/MAIN.DBF |
3) 指定映射文件还原。 还原前可选择对备份文件进行校验。 RMAN> RESTORE DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' FROM BACKUPSET '/home/dm_bak/db_bak_for_map_01' MAPPED FILE'/home/dm_mapfile/map_file_01.txt';
恢复数据库到指定时间点/LSN
恢复数据库到指定时间点/LSN 是从归档恢复的一种方式,也称为不完全恢复。从归档 恢复允许恢复到指定的时间点及指定的 LSN 值。
使用 SELECT SYSDATE 命令查询此时的时间为: 2015-11-16 10:56:40.624931; 使用 SELECT FILE_LSN FROM V$RLOG 命令查询此时的 LSN 为: 50857 还原数据库。 步骤 4 为误操作,因此我们需要将数据库恢复到步骤 3 的状态。 首 先需要还原数据库: RMAN> RESTORE DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' FROM BACKUPSET '/home/dm_bak/db_full_bak_for_time_lsn'; 恢复数据库到指定时间点/LSN。 还原后数据库的数据与备份时一致,如果要恢复数据库至步骤 3 的状态可以指定 UNTIL TIME 或 UNTIL LSN 参数重做部分归档。使用 RECOVER DATABASE...UNTIL TIME 命令恢复到指定的时间: RMAN>RECOVER DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' WITH ARCHIVEDIR'/home/dm_arch/arch' USE DB_MAGIC 1447060265 UNTIL TIME'2015-11-16 10:56:40.624931'; 或者使用 RECOVER DATABASE...UNTIL TIME 命令恢复到指定的 LSN: RMAN>RECOVER DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' WITH ARCHIVEDIR'/home/dm_arch/arch' USE DB_MAGIC 1447060265 UNTIL LSN 50857; |
RAC 环境下的数据库恢复
RMAN> RESTORE DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' FROM BACKUPSET '/home/dm_bak/db_full_bak_for_rac';
RMAN>RECOVER DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' WITH
ARCHIVEDIR'/home/dm_arch1','/home/dm_arch2'USE DB_MAGIC 1447060265;
多次故障恢复后使用不同数据库归档恢复(见dm7备份与还原文档)
3.3.5归档修复
使用 REPAIR 命令完成指定数据库的归档修复, 归档修复会将目标库 dmarch.ini 中 配置的所有本地归档日志目录执行修复。
REPAIR<ARCHIVE LOG | ARCHIVELOG> DATABASE <'INI 文件路径'>;
1) 单机环境时,确保目标库已经停止工作后,执行归档修复。
RMAN>REPAIR ARCHIVELOG DATABASE '/opt/dmdbms/data/dm.ini';
2) RAC 环境时,需要每个节点停止工作后,且每个节点独立执行修复操作。对于两节点 RAC01、 RAC02 执行修复如下。
RMAN> REPAIR ARCHIVELOG DATABASE '/opt/dmdbms/rac/dm01.ini';
RMAN> REPAIR ARCHIVELOG DATABASE '/opt/dmdbms/rac/dm02.ini';
3.3.6查看操作日志
默认情况下,这些文件都位于 DM 数据库的 log 目录中。 文件名中的“ XXX”为生成文件的年月,每个月生成一个日志文件,在该月中日志内容都是不断增加的。
操作日志类型包括: l 全局日志文件 dm_DMSERVER_xxx.log
DM7 数据库服务器的运行日志,服务器运行过程中的日志信息都包含在这个日志中,备份还原过程中备份还原操作的阶段性信息会记录在这个日志文件中,包括日志生成时间、日志级别、日志生成进程名称和进程 ID、日志生成线程和内容等。 l 备份还原日志文件 dm_BAKRES__xxx.log
DM7 备份还原在执行备份与还原时生成的日志包括主进程(联机时为 dmserver 工作线程,脱机时为 dmrman) 发送,以及 AP 进程处理过程信息。 每条信息,包括生成时间、信息级别、生成日志的进程名称和进程 ID,对于 AP 进程还会生成对应主进程的 ID。另外,为了保证日志内容的完整性,还会记录由全局日志生成接口生成的日志记录,这部分日志格式参照全局日志文件说明。 l SBT 接口跟踪文件 dm_SBTTRACE_xxx.log
SBT 接口跟踪文件, SBT 接口跟踪文件可配置,SBT 接口在打开 TRACE 跟踪( TRACE LEVEL >1)的情况下生成执行日志,默认文件名为 dm_SBTTRACE_xxx.log
3.4备份还原实战v1.0(dm6)
3.4.1联机 SQL备份片备份
备份数据库
全备:
BACKUP DATABASE FULL TO full_bak BAKFILE 'C:\database_full.bak';
表空间备份:
BACKUP TABLESPACE t1 FULL TO TS_BAK BAKFILE 'C:\tablespace_bak.bak' ;
BACKUP DATABASE [FULL |INCREMENT WITH BACKUPDIR ‘<备份目录>’{,‘<备份目录>’}] TO <备份名> [BAKFILE ‘<备份路径>’] [BACKUPINFO ‘<备份描述>’] [MAXSIZE <限制大小>] [IDENTIFIED BY <密钥>[WITH ENCRYPTION<TYPE>][ENCRYPT WITH <加密算法>]][COMPRESSED [LEVEL <压缩级别>]][WITHOUT LOG][PARALLEL ‘<并行映射文件路径>’];
FULL (全库)* DDL_CLONE | 完全备份 | 仅拷贝所有的元数据不拷贝数据。 | INCREMENT (增量)* CUMULATIVE WITH BACKUPDIR | 备份类型。 INCREMENT 表示增量备份 | 用于增量备份中,指明为累积增量备份类型,若不指定则缺省为差异增量备份类型 | 指定基备份的搜索目录 | TO | 指定生成备份名称 默认备份名格式为:DB_备份类型_数据库名_备份时间 | BAKFILE * | 指定当前备份集生成路径 | BACKUPINFO | 备份的描述信息 | MAXSIZE | 备份片文件大小上限 | IDENTIFIED BY | 指定备份时的加密密码 | WITH ENCRYPTION | 指定加密类型 | ENCRYPT WITH | 加密算法。 缺省情况下,算法为 AES256_CFB |
还原数据库
还原表空间
ALTER TABLESPACE t1 OFFLINE;
RESTORE TABLESPACE t1 FROM 'C:\tablespace_bak.bak' IDENTIFIED BY ABCDEF;
ALTER TABLESPACE t1 ONLINE;
3.4.2脱机工具进行备份还原
备份数据库
对名为 test 数据库执行一个完全备份:
DMBACKUP TYPE=FULL INI_PATH=c:\dmdata\dameng\dm.ini NAME=test
确认 DM 数据库服务器已停止后, 在 Windows“命令提示符”窗口中输入带参数的 DMBACKUP 命令启动该工具, 参数说明见下表。 表 4.1 DMBACKUP 工具参数说明
参数 | 含义 | 备注 | INI_PATH | 配置文件路径,最大长度为 256 字节 | 设置 SHOW_BAK_INFO参数 | NAME | 备份名,最大长度为 128 字节 | | BAKFILE_PATH | 备份文件路径 | 可选参数 | TYPE | 备份类型,默认为完全备份, FULL 表示完全备份,INCREMENT 表示增量备份 | 可选参数 | BASE_BAK_DIR | 增量备份时的指定基备份目录 | 可选参数,仅对增量备份有效 | DESCRIBE | 备份文件描述,即备注信息,注意:描述如果含有空格,需要用双引号括起来,否则会报错 | 可选参数 | MAXSIZE | 备份文件最大大小,取值范围为: 33-2048,单位为M(兆),默认为 2048 | 可选参数 | ENCRYPT | 加密类型, 0 表示不加密, 1 表示简单加密, 2 表示复杂加密 | 可选参数 | PASSWORD | 加密密码,长度最大为 128 字节,如果选择不加密,此处不必指定 | 可选参数 | ENCRYPT_NAME | 加密算法,可通过查看动态视图 v$CIPHERS 获取加密算法信息。 不支持 xxx_cbc 和 xxx_ecb 算法。 | 可选参数 | MPRESS | 指定备份为压缩,如果不选择,则表示不压缩 | 可选参数 | RALLEL | 指定并行备份映射文件完整路径,如: E:\bak.parallel。 映射文件的使用请参考 4.2.3.2 并行映射文件 | 可选参数 | OW_BAK_INFO | 指定备份存放的目录,可以指定 1~16 个 | 可选参数 | HELP | 打印帮助信息 | |
还原数据库
dmmdf
要利用归档还原,需要利用备份文件还原一个目标库,修改目标库
db_magic 和源库中归档文件的 db_magic 一致。然后就可以执行还原操作了。
dmmdf 工具的用法如下:
参数 | 含义 | 备注 | TYPE | 类型。 1 表示 dbf 2 表示 rlog 3 表示 original bak 4 表示 bakset meta 5 表示 bakset bkp 6 表示 bakset 7 表示批量修改归档文件的 db_magic 8 表示数据库降级 | 必选参数 | FILE | 文件路径 | 必选参数 | DCR_INI | dmdcr.ini 路径 | 可选参数 | DB_MAGIC_SRC | db_magic_src,TYPE=7 时使用 | 可选参数 | DB_MAGIC_DST | db_magic_dst,TYPE=7 时使用 | 可选参数 | HELP | 打印帮助信息 | 可选参数 |
dmmdf 工具的使用, 举例说明: dmmdf.exe TYPE=1 FILE=d:\data\DAMENG\SYSTEM.dbf dmmdf.exe TYPE=2 FILE=d:\data\DAMENG\DAMENG01.log dmmdf.exe TYPE=3 FILE=d:\data\DAMENG\bak\dmdb.bak dmmdf.exe TYPE=4 FILE=d:\data\DAMENG\bak\bset\nbak.meta dmmdf.exe TYPE=5 FILE=d:\data\DAMENG\bak\bset\nbak.bak dmmdf.exe TYPE=6 FILE=d:\data\DAMENG\bak\bset dmmdf.exe TYPE=7 FILE=d:\data\DAMENG\arch DB_MAGIC_SRC=4734373 DB_MAGIC_DST=4734366 使用说明: dmmdf 工具可以修改 TYPE 中指定的文件中的信息,例如 db_magic。
使用备份文件还原
例如,利用备份文件 c:\dmdata\backup\test.bak 还原数据库
DMRESTORE INI_PATH=c:\dmdata\dameng\dm.ini FILE=c:\dmdata\backup\test.bak
例如,利用归档文件 c:\dmdata\arch 还原数据库 第一步,修改目标库中的 db_magic。 --原备份库为 D:\tmp1\DAMENG,新还原的库为 D:\tmp2\DAMENG 1.使用 DMMDF 工具查看源备份库中 db_magic。 dmmdf type=1 file=D:\tmp1\DAMENG\system.dbf 查看到 db_magic 为 1375075864。记下。 2.使用 DMMDF 工具查看目标库中 system.dbf 的 db_magic。 dmmdf type=1 file=D:\tmp2\DAMENG\system.dbf --查看到 db_magic 为 1375251734。 输入 1 后,出现 Please input new value: 输入: 1375075864。 3.使用 DMMDF 工具查看目标库中 DAMENG01.log 的 db_magic。 dmmdf type=2 file=D:\tmp2\DAMENG\DAMENG01.log --查看到 db_magic 为 1375257160。 输入 7 后,出现 Input the new value: 输入: 1375075864。 至此,修改完毕。 第二步,还原数据库 DMRESTORE INI_PATH=c:\dmdata\dameng\dm.ini ARCHIVE_DIR=(c:\dmdata\arch) SHOW_BAK_INFO=2 |
使用归档日志还原
DMRESTORE INI_PATH=c:\dmdata\dameng\dm.ini FILE=c:\dmdata\backup\test.bak ARCHIVE_DIR = c:\dmdata\dameng\arch
还原到指定时间点或 LSN
还原数据库 test 到指定时间 2011-9-25 15:20:20
DMRESTORE INI_PATH=c:\dmdata\dameng\dm.ini FILE=c:\dmdata\backup\test.bak
TIME="2011-9-25 15:20:20" ARCHIVE_DIR = c:\dmdata\dameng\arch
还原数据库 test 到指定 LSN: 20000。
DMRESTORE INI_PATH=c:\dmdata\dameng\dm.ini FILE=c:\dmdata\backup\test.bak
END_LSN=20000 ARCHIVE_DIR = c:\dmdata\dameng\arch
4. 控制文件修改
修改控制文件:
数据文件和redo log存在的绝对路径记录在数据库的控制文件dm.ctl中。当数据库的数据文件目录和重做日志 有改动时,需要修改控制文件中的有关数据文件的绝对路径,数据库才能正常启动。
(安全版不支持此工具改控制文件)
使用流程
由于dm.ctl文件是一个二进制文件,修改dm.ctl文件需要使用工具dmctlcvt修改,具体修改流程如下:
以Linux操作系统为例:
1 停止数据库服务
Dmserverd stop
2 Copy数据文件到指定目录
将数据文件copy到指定的新位置
3 修改dm.ini文件
将文件中如图中几个的路径修改为数据文件的新路径。
注:若为单机环境,Dm.ini文件一般存在于dmdbms/data/DAMENG目录下;若为HA环境,dm.ini存在于dmdbms/bin目录下。
4 备份dm.ctl文件
Copy dm.ctl dm.ctl.bak
5 修改dm.ctl文件
Dmctlcvt工具用法如下:
EG:新的数据文件路径为/opt/data
(1)将/opt/dmdbms/data/DAMENG/dm.ctl文件转换为txt文件
./dmctlcvt TYPE=1 SRC=/opt/dmdbms/data/dameng/dm.ctl DEST=/opt/dmdbms/data/dameng/dmctl.txt
(2)修改txt文件中路径
将文件中的/opt/dmdbms/data/DAMENG/更换为新路径
(3)将修改后的txt文件修改回ctl文件
./dmctlcvt TYPE=2 SRC=/opt/dmdbms/data/dameng/dmctl.txt DEST=/opt/dmdbms/data/dameng/dm.ctl
6 修改dmarch.ini文件(若开了归档请修改此文件,未开归档请忽略)
若归档文件路径和数据文件路径一致,请修改ARCH_DEST
7 启动数据库服务
Dmserverd start
5. isql工具使用
- Linux下执行脚本方式,注意DM6与DM7的区别
- disql设置输出格式
DIsql 是 DM 数据库的一个命令行客户端工具,用来与 DM 数据库服务器进行交互。 DIsql 识别用户输入,将用户输入的 SQL 语句打包发送给 DM 数据库服务器执行,并 接收服务器的执行结果,并按用户的要求将执行结果展示给用户。
5.1启动sql
DIsql [ [<option>] [<logon> | /NOLOG] [<start>] ] <option>::=HELP|-H|-S <logon>::=<username>[/<password>][*<MPP_TYPE>][@<server>][:<port>][?{UDP|TCP}][#<sslpath>@ssl_pwd] <start>::=<`运行脚本>|<start 运行脚本>|<直接执行语句> <`运行脚本>::=`<file_path> [<PARAMETER_VALUE>{ <PARAMETER_VALUE>}] <start 运行脚本>::=START <file_path> [<PARAMETER_VALUE>{ <PARAMETER_VALUE>}]<直接执行语句>::= -E “<SQL 语句>{;<SQL 语句>}”
参数 | 介绍 | HELP|-H|-S | HELP 或-H 表示显示 DIsql 版本信息和帮助信息; -S 表示设置 DIsql 界面为隐藏模式, 隐藏命令的<SQL>标识符。 | <username> | 指定数据库的用户名。 缺省用户名为 SYSDBA。 | <password> | 指定数据库的密码。 缺省密码为 SYSDBA。 输入密码时,如遇到特殊字符需要特别处理。特殊字符包括关键字符和双引号等。特殊字符的处理见下文。 | <MPP_TYPE> | 指 MPP 类型。 MPP 类型是 MPP 登录属性,此属性的设置对非 MPP 系统没有影响。此属性的有效值为 GLOBAL 和 LOCAL,默认为 GLOBAL。 GLOBAL 表示 MPP 环境下建立的会话为全局会话,对数据库的操作在所有节点进行; LOCAL 表示 MPP 环境下建立的会话为本地会话,对数据库的操作只在本地节点进行。 | <server> | 指定服务器的 IP 地址或是在 dm_svc.conf 中配置的网络服务名。 dm_svc.conf的配置请参考《 DM7 系统管理员手册》的 2.1.1 节。 例如:在 dm_svc.conf 中配置服务名 dmrac_svc =(192.168.0.38:5236, 192.168.0.38:5237) 然后就可以使用服务名登录了: DIsql SYSDBA/SYSDBA@dmrac_svc 使用服务名的好处是第一个 IP 连不通,会自动连接下一个。 | UDP|TCP | 指定使用 UDP 协议或 TCP 协议。 缺省为 TCP。 例如: DIsql SYSDBA/SYSDBA@localhost:5236?UDP | [#<sslpath>@ssl _pwd] | 通信加密中客户端证书存放的地址和客户端证书密钥。各用户只能使用自己的证书,例如 SYSDBA 账户只能使用\bin\CLIENT_SSL\SYSDBA 下的证书和密码,如果证书没有密码可以用缺省或任意数字代替。 例如: DIsqlSYSDBA/SYSDBA@192.168.0.38:5236#D:\dmdbms\bin\client_ssl\SYSDBA@12345 缺省为不加密。 | /NOLOG | 表示启动 DIsql 而不登录到服务器。此时可以进行 DIsql 的显示设置和本地变量操作。 如果没有/NOLOG 选项必须登录服务器,不带参数的时候提示输入用户名和密码,此时的用户名和密码用法参考<logon>。且登录三次失败后退出 DIsql。 | <start> | 运行 DIsql 脚本文件。 例如, 假设 a.sql 是路径为“ c:\”的任意脚本文件: DIsql -S SYSDBA/SYSDBA@192.168.0.80:5236 `c:\a.sql。 如果在 linux 环境下使用, <start>外需要加上单引号,如: '`" < file_path >"'。 | <file_path> | 运行 DIsql 脚本文件的绝对路径。 | <PARAMETER_VALU E> | 传给<file_path>脚本文件中本地变量的参数值, 将其中的参数内容传给变了&1, &2, &3…以此类推。 | <直接执行语句> | 使用-E 参数,将在运行 DIsql 时直接执行后续的一条或多条 SQL 语句。 例如: DIsql SYSDBA/SYSDBA -e "SELECT TOP 1 * FROM SYSOBJECTS; SELECT TOP 1 * FROM V$CMD_HISTORY"。 |
5.2切换登录
用户进入 DIsql 界面后,如果想切换到其他 DM 数据库实例。有两种实现方式:一是 使用 LOGIN 命令;二是使用 CONN 命令。登录到远程数据库,必须在服务名处使用 IP 地 址或网络服务名。
windows 执行./disql
login登入,logout登出
Linux
登入CONN[ECT] <username>[/<password>][*<MPP_TYPE>] [@<server>] CONN[ECT] <username>
登出DISCONN
5.3Disql环境变量设置
5.3.1 DIsql 中的系统环境变量
变量名称 | 属性 | 用途 | AUTO[COMMIT] | <ON|OFF> | 设置自动提交 | DEFINE | <c(默认的变量前缀是&)|ON(默认值)|OFF> | 定义本地变量 | ECHO | <ON(默认值)|OFF> | 显示脚本中正在执行的 SQL 语句 | FEED[BACK] | <6(默认值)|n|ON|OFF> | 显示当前 SQL 语句查询或修改的行数 | HEA[DING] | <ON(默认值) |OFF> | 显示列标题 | LINESHOW | <ON 默认值|OFF> | 显示行号 | NEWP[AGE] | <1(默认值) |n|NONE> | 设置页与页之间的分隔 | PAGES[IZE] | <14(默认值) |n> | 设置一页有多少行数 | TIMING | <ON(默认值) |OFF> | 显示每个 SQL 语句花费的执行时间 | VER[IFY] | <ON(默认值) |OFF> | 列出环境变量被替换前、后的控制命令文本 | LONG | <800(默认值)|n> | 设置大字段类型显示的最大字节数 | LINESIZE | <screem_length(默认值,屏幕宽度)|n> | 设置屏幕上一行显示宽度 | SERVEROUT[PUT] | <ON | OFF(默认值)> [SIZE <20000(默认值)|n>] [FOR[MAT] <WRA[PPED] | WOR[D_WRAPPED](默认值) | TRU[NCATED]>] | 在块中有打印信息时, 是否打印,以及打印的格式 | SCREENBUFSIZE | <DEFAULT(20K) | n> | 设置屏幕缓冲区的长度 | CHAR_CODE | <GBK | UTF8 | DEFAULT (默认值,操作系统的编码方式)> | 设置 SQL 语句的编码方式 | CURSOR | <STATIC | FORWARDONLY (默认值)|DEFAULT> | 设置 DPI 语句句柄中游标的类型 | AUTOTRACE | <OFF | NL | INDEX | ON|TRACE> | 设置执行计划和统计信息的跟踪 | DESCRIBE | [DEPTH <1(默认值) | n | ALL>] [LINE[NUM] <ON | OFF(默认值)>] [INDENT <ON | OFF(默认值)>] | 设置 DESCRIBE 的显示方式 | TRIMS[POOL] | <OFF| ON> | 设置 spool 文件中每行的结尾空格 | LOBCOMPLETE | <OFF| ON> | 设置大字段数据是否从服务器全部取出 | COLSEP | COLSEP [text] | 设置列之间的分割符 |
5.3.2 SET 命令设置环境变量
AUTO[COMMIT]
设置当前 session 是否对修改的数据进行自动提交。 语法如下: SET AUTO[COMMIT] <ON|OFF> ON: 表示打开自动提交,所有执行的 SQL 语句的事务将自动进行提交。 OFF: 表示关闭自动提交,所有执行的 SQL 语句的事务将由用户显式提交,为默认设置。
DEFINE
是否使用 DEFINE 定义本地变量。 语法如下: SET DEFINE<c(默认的变量前缀是&)|ON(默认值) |OFF> c: 表示打开 DEFINE 功能,同时定义前缀变量符号, c 为定义的前缀符号。 ON: 表示打开 DEFINE 功能,使用默认前缀符号&。 OFF: 表示不使用 DEFINE 功能。
HEA[DING]
是否显示列标题。 语法如下: SET HEA[DING] <ON(默认值) |OFF> 当 SET HEADING OFF 时,在每页的上面不显示列标题,而是以空白行代替。
LINESHOW
LINESHOW 设置是否显示行号。 语法如下: SET LINESHOW<ON(默认值) |OFF >; 默认为每行输出打印行号。
PAGES[IZE]
设置一页有多少行数。 语法如下: SET PAGES[IZE] <14(默认值) |n> 如果设为 0,则所有的输出内容为一页并且不显示列标题。默认值为 14。
CHAR_CODE
设置 SQL 语句的编码方式。 语法如下: SET CHAR_CODE <GBK | UTF8 | DEFAULT(默认值,操作系统的编码方式)>
AUTOTRACE
设置执行计划和统计信息的跟踪。
语法如下:
SET AUTOTRACE <OFF(默认值) | NL | INDEX | ON|TRACE>
当 SET AUTOTRACE OFF 时, 停止 AUTOTRACE 功能,常规执行语句。
当 SET AUTOTRACE NL 时,开启 AUTOTRACE 功能,不执行语句,如果执行计划中
有嵌套循环操作,那么打印 NL 操作符的内容。
当 SET AUTOTRACE INDEX(或者 ON)时,开启 AUTOTRACE 功能,不执行语句,如
果有表扫描,那么打印执行计划中表扫描的方式、表名和索引。
当 SET AUTOTRACE TRACE 时,开启 AUTOTRACE 功能,执行语句,打印执行计划。
此功能与服务器 EXPLAIN 语句的区别在于, EXPLAIN 只生成执行计划,并不会真正执行SQL 语句,因此产生的执行计划有可能不准。而 TRACE 获得的执行计划,是服务器实际执行的计划。
DESCRIBE
设置 DESCRIBE 对象结构信息的显示方式。 语法如下: SET DESCRIBE [DEPTH <1(默认值) | n | ALL>] [LINE[NUM] <ON | OFF(默认值)>] [INDENT <ON | OFF(默认值)>] DEPTH: 结构信息显示至第 N 层,默认只显示第 1 层。范围是 1-40。当设置为 ALL 时, DEPTH 为 40。 LINENUM:是否显示对象行号,成员显示父亲的行号。 INDENT:当对象的类型是复合类型时,是否通过缩进的方式显示成员信息。
LOBCOMPLETE
设置 LOBCOMPLETE,是否从服务器中全部取出大字段数据。 语法如下: SET LOBCOMPLETE <OFF(默认值) | ON> 对于大字段数据,是否从服务器全部取出,防止死锁的发生;与显示长度不同,即便是 全部取出,也可以只显示一部分。
5.3.3 SHOW 命令查看环境变量
示例如下,显示 HEADING 和 TIMING 两个变量: SQL> SHOW HEADING TIMING HEADING ON. TIMING ON
5.4 Disql常用命令
5.4.1help
DIsql 帮助命令, 可以帮助用户查看其他命令的具体用法
SQL> HELP DEFINE DEFINE ------ 设置变量值,或者显示已定义的变量信息。 DEF[INE] [variable] | [variable = text]
5.4.2 输出文件 SPOOL
将屏幕显示的内容输出到指定文件。
SPOOL {<file> | OFF } <file>:: = <file_path> [CRE[ATE]|REP[LACE]|APP[END]] <file_path>: 指定文件的绝对路径 CRE[ATE]: 创建指定的文件,若指定的文件已存在,则报错,默认方式 REP[LACE]: 创建指定的文件,若指定的文件已存在,则替换它 APP[END]]: 将输出内容追加到指定文件的末尾 OFF: 关闭 SPOOL 输出
5.4.3 切换到操作系统命令 HOST
使用 HOST 命令可以不用退出 DIsql 就能执行操作系统命令。
如果单独执行 host,则能够直接从 DIsql 界面切换到操作系统,之后可使用 EXIT 回到 DIsql 界面。
HOST[<command>] <command>: 操作系统命令。 示例如下: SQL>HOST DIR
5.4.4 获取对象结构信息 DESCRIBE
获取表或视图、存储过程、函数、包、记录、类的结构描述。 语法如下: DESC[RIBE] <table>|<view>|<proc>|<fun>|<pkg>|<record>|<class> ; 各对象获取的内容略有不同: l 表或视图获取的内容包括列名,列数据类型,列是否可以取空值。
l 函数、过程、类获取的内容包括两类: 1)存储函数/过程名,类型(函数或过 程),函数返回值类型; 2)参数名,参数数据类型、参数输入输出属性、参数缺 省值。 l 包获取的内容分为两类: 1)包内存储函数/过程名,类型(函数或过程),函数 返回值类型; 2)包内参数名,参数数据类型、参数输入输出属性、参数缺省值。 l 记录获取的内容为:参数名,参数数据类型,参数是否可以取空值。
5.4.5 定义本地变量 DEFINE 和 COLUMN
定义本地变量的命令有两个:一是 DEFINE;二是 COLUMN。
5.4.5.1 DEFINE
用来定义一个本地变量的替代变量,然后对该变量赋一个 CHAR 类型的值;或者输出变 量的值和类型。 语法如下: DEF[INE] [<VARIABLE=text>|< VARIABLE >] DEF[INE] VARIABLE = text: 申明一个变量,如果该变量存在,则重新赋值,否 则新生成一个变量,并进行赋值。 DEF[INE]: 输出 DIsql 中所有的变量的值和类型。
使用“DEFINE 变量名”可以检查变量是否已经定义。 DEFINE 定义的变量会保存在环境 DIsql 环境中,可以在 SQL 语句中使用。默认的变 量前缀是&。示例如下: SQL>DEF VAR=666; SQL>select * from dual where id=&VAR; 如果 var 没有定义,会提示输入变量的值;没有定义的 var 不会保存在 DIsql 环境中。
SQL>DEFINE C3="'OG'" --定义变量 C3 为'OG'--一种使用 DEFINE 字符串变量的方式
SQL>DEFINE C4=OG --定义变量 C4 为 OG --另外一种使用 DEFINE 字符串变量的方式
5.4.5.2 COLUMN
定义一个本地列或表达式。 语法如下: COL[UMN] [<column | expr> [<option>]] <option> ::= NEW_VALUE variable COL[UMN]:列举出所有的 COLUMN 变量信息。 COL[UMN] column | expr:列举出某个 column 或 expr,如果存在,则输出信息,否则报错。 COL[UMN] column | expr option: option 目前仅支持 NEW_VALUE,表示该column|expr 的值,同时作为变量存在。但如果该变量未赋值,通过 DEFINE 查询时,不会显示该变量
示例如下:
SQL> COLUMN CVAR NEW_VALUE DVAR
SQL> SELECT CUSTOMERID CVAR FROM SALES.CUSTOMER;
行号 CVAR
---------- -----------
1 1
2 2
3 3
4 4
5 5
6 6
6 rows got
已用时间: 1.105(毫秒). 执行号:1053.
SQL> DEFINE DVAR
DEFINE DVAR = "6" (INT)
5.4.6 查看执行计划 EXPLAIN
用 EXPLAIN 命令来查看查询语句的执行计划。 语法如下: EXPLAIN <sql_clause>
示例如下: SQL>EXPLAIN select count(*) from sysobjects;
5.4.7 设置异常处理方式 WHENEVER
用 WHENEVER 命令可以设置异常处理方式,继续执行或退出 DIsql。 语法如下: WHENEVER SQLERROR CONTINUE [ COMMIT | ROLLBACK | NONE ] | EXIT [ SUCCESS | FAILURE | WARNING | n | <variable> | : <bindvariable> ] [ COMMIT | ROLLBACK ] n 和<variable>的返回值受限于操作系统,在不同平台下,会有所不同,例如: UNIX 系统只用一个字节来存 code,所以返回值的范围只在 0-255 之间。 示例如下: SQL>whenever sqlerror exit 1 SQL>select c1 from dual;
第 1 行附近出现错误[-2111]:无效的列名[C1]. --windows 系统下,输入 echo %ERRORLEVEL%,查看返回值为: 1 --linux 系统下,输入 echo $?,查看返回值为: 1
5.4.8 查看下一个结果集 MORE
当结果集过多,屏幕只能显示一个时,用户可以使用 MORE 命令切换到下一个结果集。 MORE 例如,当执行如下语句时,用户想查看更多的结果集,可以使用 MORE 命令。
5.4.9 显示 SQL 语句或块信息 LIST
显示最近执行的 SQL 语句或者 PL/SQL 块信息。不显示 DIsql 命令。 LIST 或者 ;
5.4.10 插入大对象数据
当插入语句中包含大对象数据文件时, 使用@。
<插入语句>,其中大数据的插入值格式为:@'path' 示例如下: 例如, 在 test 表中插入大对象 e:\DSC_1663.jpg。 create table test(a int,b image); @insert into test values(1,@'e:\DSC_1663.jpg');
5.5如何在 DIsql 中使用脚本
使用 START 命令运行脚本
<`运行脚本>中的符号`位于键盘第二排左起第一个。 如果在 LINUX 环境下使用<`运行脚本>,则符号`需要加\或'进行转义。 例如: ./disql SYSDBA/SYSDBA\`/dev/test.sql |
使用 EDIT 命令编辑脚本
SQL>EDIT D:\test.sql 或 SQL>edit
如何在脚本中使用变量
脚本带参数值,参数名必须是数字。
在脚本中通过&n 来引用参数, n 为 1 表示为第一个参数, 2 表示第二个参数,依次类推。 如脚本 D:\test.sql: select * from dual where id = &1; select * from dual where id = &2; select * from dual where id = &3; DIsql 要求传入的参数值个数要与脚本中的变量个数一一对应。如果传入参数值个数不匹 配,如 n 为 3,但执行时只带了 2 个参数, DIsql 就会在屏幕上提示输入参数。 示例,输入三个参数值 11、 12、 13: SQL>`D:\test.sql 11 12 13
脚本中定义参数值
使用 DEFINE 命令定义变量值,格式: DEFINE 标识符 = 值。 如脚本 D:\test.sql: define n=1 define s=DIsql select &n from dual; select '&s' from dual; 如果变量没有定义,那么在通过&引用时, DIsql 会提示输入。
使用 PROMPT 命令传递信息
PROMPT <输出内容>
6. 初始化库工具使用
例程: ./dminit PATH=/public/dmdb/dmData PAGE_SIZE=32
(详细参数说明可以查看dminit使用手册。)
关键字 | 说明(默认值) | INI_FILE | 初始化文件dm.ini存放的路径 | PATH | 初始数据库存放的路径 | CTL_PATH | 控制文件路径 | LOG_PATH | 日志文件路径 | EXTENT_SIZE | 数据文件使用的簇大小(16),可选值:16、32,单位:页 | PAGE_SIZE | 数据页大小(8),可选值:4、8、16、32,单位:K | LOG_SIZE | 日志文件大小(256),单位为:M,范围为:64M~2G | CASE_SENSITIVE | 大小敏感(Y),可选值:Y/N,1/0 | CHARSET/UNICODE_FLAG | 字符集(0),可选值:0[GB18030],1[UTF-8],2[EUC-KR] | LENGTH_IN_CHAR | VARCHAR类型长度是否以字符为单位(N),可选值:Y/N,1/0 | SYSDBA_PWD | 设置SYSDBA密码(SYSDBA),密码长度为9到48 | SYSAUDITOR_PWD | 设置SYSAUDITOR密码(SYSAUDITOR),密码长度为9到48 | DB_NAME | 数据库名(DAMENG) | INSTANCE_NAME | 实例名(DMSERVER) | PORT_NUM | 监听端口号(5236) | TIME_ZONE | 设置时区(+08:00) | PAGE_CHECK | 页检查模式(0),可选值:0/1/2 | EXTERNAL_CIPHER_NAME | 设置默认加密算法 | EXTERNAL_HASH_NAME | 设置默认HASH算法 | EXTERNAL_CRYPTO_NAME | 设置根密钥加密引擎 | RLOG_ENC_FLAG | 设置日志文件是否加密(N),可选值:Y/N,1/0 | USBKEY_PIN | 设置USBKEY PIN | ENCRYPT_NAME | 设置全库加密算法 | BLANK_PAD_MODE | 设置空格填充模式(0),可选值:0/1 | SYSTEM_MIRROR_PATH | SYSTEM数据文件镜像路径 | MAIN_MIRROR_PATH | MAIN数据文件镜像 | ROLL_MIRROR_PATH | 回滚文件镜像路径 | MAL_FLAG | 初始化时设置dm.ini中的MAL_INI(0) | ARCH_FLAG | 初始化时设置dm.ini中的ARCH_INI(0) | MPP_FLAG | Mpp系统内的库初始化时设置dm.ini中的mpp_ini(0) | CONTROL | 初始化配置文件(配置文件格式见系统管理员手册) | AUTO_OVERWRITE | 是否覆盖所有同名文件(0) 0:不覆盖1:部分覆盖2:完全覆盖 | USE_NEW_HASH | 是否使用改进的字符类型HASH算法(1) | DCP_MODE | 是否是DCP代理模式(0) | DCP_PORT_NUM | DCP代理模式下管理端口 | ELOG_PATH | 指定初始化过程中生成的日志文件所在路径 | AP_PORT_NUM | ECS模式下AP协同工作的监听端口 | HELP | 打印帮助信息 |
初始化高级场景
单机
DM 支持初始化数据库到一个普通机器上或是一个共享存储上。本节以 DMASM 文件系统 为例,初始化单机数据库。
[DAMENG] system_path = +DMDATA/data main = +DMDATA/data/rac/main.dbf main_size = 2509 system = +DMDATA/data/rac/system.dbf system_size = 2509 roll = +DMDATA/data/rac/roll.dbf roll_size = 2509 ctl_path = +DMDATA/data/rac/dm.ctl log_size = 2509 log_path = +DMLOG/log/log01.log log_path = +DMLOG/log/log02.log AUTO_OVERWRITE=2 |
RAC
db_name = rac system_path = +DMDATA/data system = +DMDATA/data/rac/system.dbf system_size = 128 roll = +DMDATA/data/rac/roll.dbf roll_size = 128 main = +DMDATA/data/rac/main.dbf main_size = 128 ctl_path = +DMDATA/data/rac/dm.ctl ctl_size = 8 log_size = 256 dcr_path = /dev/raw/raw1 #dcr 磁盘路径,目前不支持 asm,只能是裸设备 dcr_seqno = 0 auto_overwrite = 1 [RAC0] #inst_name 跟 dmdcr_cfg.ini 中 DB 类型 group 中 DCR_EP_NAME 对应 config_path = /home/data/rac0_config port_num = 5236 mal_host = 10.0.2.101 mal_port = 9340 log_path = +DMLOG/log/rac0_log01.log log_path = +DMLOG/log/rac0_log02.log [RAC1] #inst_name 跟 dmdcr_cfg.ini 中 DB 类型 group 中 DCR_EP_NAME 对应 config_path = /home/data/rac1_config port_num = 5237 mal_host = 10.0.2.102 mal_port = 9341 log_path = +DMLOG/log/rac1_log01.log log_path = +DMLOG/log/rac1_log02.log |
7. DEM部署
概述
DEM全称为Dameng Enterprise Manager。DEM提供了数据库对象管理和数据库监控的功能,并且通过远程主机部署代理,能够实现对远程主机状态和远程主机上达梦数据库实例状态的监控。 DEM的监控不只局限于单个数据库实例,它能够对数据库集群(MPP、DSC、数据守护)进行监控和管理。
dem在dm安装包中 不同版本不通用
DEM 部署需要准备:
DEM WAR 包 和 dem_init.sql
Tomcat(需下载)
达梦数据库
其中 DEM WAR 包在达梦安装目录下/web/dem.war
DEM部署说明
1.配置数据库
创建一个数据库作为DEM后台数据库, 数据库dm.ini参数配置进行优化, 推荐配置:
MEMORY_POOL = 200
BUFFER = 1000
KEEP = 64
MAX_BUFFER = 2000
SORT_BUF_SIZE = 50
在该数据库中执行以下SQL脚本dem_init.sql;
[dmdba@DMDSC_1 dmagent]$ ./disql SYSDBA/SYSDBA set define off set char_code utf8 start /dm/dmdbms/web/dem_init.sql( dem_init.sql 最后一定不能多一个空格) |
2.配置tomcat
创建tomcat文件夹,上传解压在里面
[root@meng1 tomcat]# mkdir /tomcat [root@meng1 tomcat]# tar zxvf tomcat.tar.gz |
安装完成后就可以使用shell脚本启动。
[root@meng1 tomcat]# cd apache-tomcat-7.0.104/bin/ [root@meng1 bin]# ./startup.sh Using CATALINA_BASE: /tomcat/apache-tomcat-7.0.104 Using CATALINA_HOME: /tomcat/apache-tomcat-7.0.104 Using CATALINA_TMPDIR: /tomcat/apache-tomcat-7.0.104/temp Using JRE_HOME: /usr Using CLASSPATH: /tomcat/apache-tomcat-7.0.104/bin/bootstrap.jar:/tomcat/apache-tomcat-7.0.104/bin/tomcat-juli.jar Tomcat started. 然后就可以访问了: http://192.168.6.7(ip):8080/ 关闭: shutdown.sh |
修改tomcat配置
(1) 在 /tomcat/conf/server.xml 中<Connector port="8080" protocol="HTTP/1.1"... 追加属性字段 maxPostSize="-1"
[root@meng1 apache-tomcat-7.0.104]# cd conf/
[root@meng1 conf]# vi server.xml
(2) 修改 jvm 启动参数
查看本地Java版本
[root@meng1 java-1.7.0-openjdk-1.7.0.99.x86_64]# find / -name java
/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.99.x86_64
Linux:
[root@meng1 java-1.7.0-openjdk-1.7.0.99.x86_64]# cd /tomcat/apache-tomcat-7.0.104/bin/ [root@meng1 bin]# vi catalina.sh JAVA_OPTS="-server -Xms256m -Xmx1024m -XX:MaxPermSize=512m -Djava.library.path=/home/dmdba/dm/dmdbms/bin" |
Windows:
bin/catalina.bat -> set java_opts= -server -Xms40m -Xmx1024m
-XX:MaxPermSize=512m -Djava.library.path=c:\dmdbms\bin;
(3) 把 dem.war 放到 tomcat 的 webapps 目录下
[root@meng1 bin]# cp /home/dmdba/dm/dmdbms/web/dem.war /tomcat/apache-tomcat-7.0.104/webapps/
(4) 启动 tomcat (必须先启动 tomcat,才会解压缩 war 包,当然也可以直接在 dem.war 中配置,则不需要启动 tomcat)
[root@meng1 apache-tomcat-7.0.104]# cd bin [root@meng1 bin]# ./startup.sh |
(5)修改 dem 连接后台数据库配置文件 db.xml
配置 dem 后台数据库的连接信息: ip、 port、用户名、密码、连接池大小,SSL 登录信息
等 , 在 文 件 WEB-INF/db.xml ( dem.war 中 , 解 压 后 再 tomcat 的webapps/dem/war/WEB-INI/db.xml 下)配置;
[root@meng1 WEB-INF]# pwd /tomcat/apache-tomcat-7.0.104/webapps/dem/WEB-INF [root@meng1 WEB-INF]# vi db.xml <?xml version="1.0" encoding="UTF-8"?> <ConnectPool> <Server>localhost</Server> <Port>5236</Port> <User>SYSDBA</User> <Password>SYSDBA</Password> <InitPoolSize>5</InitPoolSize> <CorePoolSize>10</CorePoolSize> <MaxPoolSize>50</MaxPoolSize> <KeepAliveTime>60</KeepAliveTime> <DbDriver></DbDriver> <DbTestStatement>select 1</DbTestStatement> <SSLDir>../sslDir/client_ssl/SYSDBA</SSLDir> <SSLPassword></SSLPassword> </ConnectPool> |
如果需要 SSL 安全方式连接后台数据库,要求配置 SSLDir,和 SSLPassword:
默认在 WEB-INF/sslDir 目录存有密钥对, WEB-INF/db.xml 配置客户端连接使用的密钥文件(SSLDir)为 WEB-INF/sslDir/client_ssl/SYSDBA,密码(SSLPassword)为空,对应 WEB-INF/db.xml配置的登录用户 SYSDBA,
此时,只需拷贝 WEB-INF/sslDir/server_ssl 到后台数据库执行码目录。
(6) 启动/重启 tomcat
[root@meng1 bin]# ./shutdown.sh [root@meng1 bin]# ./startup.sh |
(7). 登陆验证
假 设 部 署 DEM 的 机 器 IP 为 192.168.0.104 , 则 DEM 访 问 地址:http://192.168.6.7:8080/dem/
默认用户名和密码:admin/888888
3.部署dmagent
在监控的节点部署并启用dmagent。 DM的安装目录已经包含了dmagent,但agent 的安装必须以root用户来执行,所以我们需要先复制出来。
center.url=http://192.168.0.104:8080/dem #DEM访问地址
center.agent_servlet=dem/dma_agent #一般无需调整
[root@meng1 dmagent]# cd /home/dmdba/dm/dmdbms/tool/dmagent
[root@meng1 dmagent]# vi config.properties
安装启动dmagent 需要使用root安装
[root@meng1 dmagent]# ./DMAgentService.sh install User Failures Last failure Host Detected RHEL or Fedora: Installing the DMAgentService daemon.. [root@meng1 dmagent]# ./DMAgentService.sh start User Failures Last failure Host Starting DMAgentService... .......... running: PID:13954 |
在网页dem上加上agent端
4.问题
(1)如未找到/dem/,需要检查数据库。
8. 数据检查工具使用
dmdbchk 是 DM 提供的用于检查数据库完整性、正确性的命令行工具。
检验的内容具体包括三方面:
1. 数据文件合法性检验。
2. 索引正确性校验。
3. 对象 ID 合法性校验
经过初始化,且正常关闭的数据库,才能被 dmdbchk 工具校验,否则 dmdbchk 会报错退出。 |
dmdbchk参数
dmdbchk 使用简单灵活。 用户可使用“dmdbchk HELP”快速查看参数用法。 ./dmdbchk HELP 格式: ./dmdbchk ini_file_path 例程: ./dmdbchk path=/opt/dmdbms/bin/dm.ini 关键字说明(默认) ----------------------------------------------------------------------------- PATH dm.ini 绝对路径或者当前目录的 dm.ini DCR_INI dmdcr.ini 的路径 HELP 打印帮助信息 START_INDEXID 最小检查索引号 END_INDEXID 最大检查索引号
dmdbchk 报告解读
dmdbchk 校验的过程对用户不可见,校验的结果以报告的形式呈现给用户。
dmdbchk 报告内容分为七部分: 一 dmdbchk 版本信息; 二开始标志; 三数据文件校验结果; 四索引校验结果; 五对象 ID 校验结果; 六结束标志; 七错误总数。
应用实例
例如, 初始化一个数据库,并创建 DM 的示例库 BOOKSHOP, 正常关闭后,使用 dmdbchk工具对该库的数据文件进行校验。
./dmdbchk PATH=/home/test/dmdbms/dm.ini START_INDEXID=33554433END_INDEXID=33555531
校验后的报告,存在 dmdbchk 工具所在的目录里,名称为 dbchk_err.txt。报告内
容如下:
/**一 dmdbchk 版本信息**/ [2015-12-31 16:57:29] dmdbchk V7.1.5.42-Build(2015.12.30-64335trunc) /**二开始标志**/ [2015-12-31 16:57:30] DM DB CHECK START...... /**三数据文件校验结果**/ [2015-12-31 16:57:30] --------check dbf file size start--------- [2015-12-31 16:57:30] FILE=(ts_id=0, fil_id=0, path=D:\xx\DAMENG\SYSTEM.DBF) [2015-12-31 16:57:30] FILE=(ts_id=1, fil_id=0, path=D:\xx\DAMENG\ROLL.DBF) [2015-12-31 16:57:30] FILE=(ts_id=4, fil_id=0, path=D:\xx\DAMENG\MAIN.DBF) [2015-12-31 16:57:30] FILE=(ts_id=5, fil_id=0, path=D:\xx\DAMENG\BOOKSHOP.DBF) [2015-12-31 16:57:30] --------check dbf file size end----------- /**四索引校验结果**/ [2015-12-31 16:57:30] --------check indexes start--------------- [2015-12-31 16:57:30] INDEX=(id=33554433, name=SYSINDEXCOLUMNS, table_name=SYSCOLUMNS) [2015-12-31 16:57:30] INDEX=(id=33554434, name=SYSINDEXINDEXES, table_name=SYSINDEXES) [2015-12-31 16:57:30] INDEX=(id=33554440, name=SYSINDEXTUSERS, table_name=SYSUSER$) [2015-12-31 16:57:30] INDEX=(id=33554442, name=SYSINDEXSYSGRANTS, table_name=SYSGRANTS) [2015-12-31 16:57:30] INDEX=(id=33554452, name=SYSINDEXCONSTRAINTS, table_name=SYSCONS) [2015-12-31 16:57:30] INDEX=(id=33554458, name=SYSINDEXSYSAUDIT, table_name=SYSAUDIT) [2015-12-31 16:57:30] INDEX=(id=33554459, name=SYSINDEXSYSAUDITSQLSEQ, table_name=SYSAUDITSQLSEQ) [2015-12-31 16:57:30] INDEX=(id=33554464, name=SYSINDEXCONTEXTINDEXES, table_name=SYSCONTEXTINDEXES) ...... 省略一部分索引校验结果...... ...... [2015-12-31 16:57:30] INDEX=(id=33555528, name=INDEX33555528, table_name=EMPTAB) [2015-12-31 16:57:30] INDEX=(id=33555529, name=INDEX33555529, table_name=EMPTAB) [2015-12-31 16:57:30] INDEX=(id=33555530, name=INDEX33555530, table_name=SALGRADE) [2015-12-31 16:57:30] INDEX=(id=33555531, name=INDEX33555531, table_name=COMPANYHOLIDAYS) [2015-12-31 16:57:30] --------check indexes end----------------- /**五对象 ID 校验结果**/ [2015-12-31 16:57:30] --------check iid start------------------- [2015-12-31 16:57:30] check cons id ... [2015-12-31 16:57:30] check index id ... [2015-12-31 16:57:30] check table id ... [2015-12-31 16:57:30] check proc id ... [2015-12-31 16:57:30] check schema id ... [2015-12-31 16:57:30] check synonym id ... [2015-12-31 16:57:30] check user id ... [2015-12-31 16:57:30] --------check iid end--------------------- /**六结束标志**/ [2015-12-31 16:57:30] DM DB CHECK END...... /**七错误总数**/ [2015-12-31 16:57:30] error count is 0 |
9. 数据库安全功能
- 数据库通信加密功能配置,SSL证书
- 数据库审计功能
- 数据库资源限制配置
11.1数据库通信加密功能配置,ssl证书
DM 提供以下三种通信方式:
不加密 SSL 加密 SSL 认证
选择是否使用通信加密以 DM 数据库服务器端的设置为准,即通过设置服务器配置文件dm.ini 中的 ENABLE_ENCRYPT 和 COMM_ENCRYPT_NAME 参数来指定,客户端以服务器采用的通信方式与其进行通信。
ENABLE_ENCRYPT 取值 0、 1 和 2 分别代表不加密、 SSL加密、 SSL 认证, 默认值为 1。
COMM_ENCRYPT_NAME 参数用来指定消息通信的加密算法名,如果为空则不进行通信加密;如果给的加密算法名错误,则使用加密算法 DES_CFB。
DM 支持的加密算法名可以通过查询动态视图 V$CIPHERS 获取。
系统管理员可通过查询 V$PARAMETER 动态视图查询 ENABLE_ENCRYPT 和COMM_ENCRYPT_NAME 的当前值。
SELECT * FROM V$PARAMETER WHERE NAME=’ENABLE_ENCRYPT‘ OR
NAME=’COMM_ENCRYPT_NAME‘;
也可以通过使用客户端工具 Console 或调用系统过程 SP_SET_PARA_VALUE 重新设置 ENABLE_ENCRYPT 或 COMM_ENCRYPT_NAME 的值。 不过由于这两个参数都为静态 INI参数, 修改后需要重启 DM 数据库服务器才能生效。
当选择 SSL 加密时,需要在 DM 数据库服务器所在目录下的 server_ssl 子目录中存放 CA 的证书、服务器的证书和服务器的密钥,同时在客户端所在目录下的 client_ssl
子目录中存放 CA 的证书、客户端的证书和客户端的密钥,这样服务器和客户端的通信即是建立在加密的 SSL 连接之上的。此时如果没有配置好 SSL 环境,则通讯仍旧不加密。
当选择 SSL 认证时,不进行通信加密,只是检查客户端和服务器的证书是否匹配。此时如果服务器 SSL 环境没有配置则服务器无法正常启动,如果客户端 SSL 环境没有配置则无法连接服务器。
11.2数据库审计功能
审计机制是 DM 数据库管理系统安全管理的重要组成部分之一。 DM 数据库除了提供数据安全保护措施外,还提供对日常事件的事后审计监督。 DM 具有一个灵活的审计子系统,可以通过它来记录系统级事件、个别用户的行为以及对数据库对象的访问。通过考察、跟踪审计信息,数据库审计员可以查看用户访问的形式以及曾试图对该系统进行的操作,从而采取积极、有效的应对措施。
1.2.1审计开关
审计开关由 DM 的 INI 参数 ENABLE_AUDIT 控制,有三种取值:
0:关闭审计 1:打开普通审计 2:打开普通审计和实时审计
在普通版本中, ENABLE_AUDIT 的缺省值为 0;在安全版本中, ENABLE_AUDIT 的缺省值为 2。
系统管理员可通过查询 V$PARAMETER 动态视图查询ENABLE_AUDIT 的当前值。
SELECT * FROM V$PARAMETER WHERE NAME= 'ENABLE_AUDIT';
也可以通过使用客户端工具 Console 或调用系统过程 SP_SET_PARA_VALUE 重新设置 ENABLE_AUDIT 的值, ENABLE_AUDIT 为动态 INI 参数。
1.2.2审计的设置与取消
数据库审计员指定被审计对象的活动称为审计设置,只有具有 AUDIT DATABASE 权限
的审计员才能进行审计设置。
1.语句级审计
语句级审计的动作是全局的,不对应具体的数据库对象。
设置语句级审计的系统过程:
SP_AUDIT_STMT( TYPE VARCHAR(30), USERNAME VARCHAR (128), WHENEVER VARCHAR (20) ) |
参数说明:
TYPE 语句级审计选项, 即上表中的第一列 USERNAME 用户名, NULL 表示不限制 WHENEVER 审计时机,可选的取值为: ALL:所有的 SUCCESSFUL:操作成功时 FAIL:操作失败时 |
例 1,审计表的创建、修改和删除。
SP_AUDIT_STMT('TABLE', 'NULL', 'ALL');
例 2,对 SYSDBA 创建用户成功进行审计。
SP_AUDIT_STMT('USER', 'SYSDBA', 'SUCCESSFUL');
例 3,对用户 USER2 进行的表的修改和删除进行审计,不管失败和成功。
SP_AUDIT_STMT('UPDATE TABLE', 'USER2', 'ALL');
SP_AUDIT_STMT('DELETE TABLE', 'USER2', 'ALL');
取消语句级审计的系统过程:
SP_NOAUDIT_STMT( TYPE VARCHAR(30), USERNAME VARCHAR (128), WHENEVER VARCHAR (20) ) |
参数说明:
TYPE 语句级审计选项, 即上表中的第一列 USERNAME 用户名, NULL 表示不限制 WHENEVER 审计时机,可选的取值为: ALL:所有的 SUCCESSFUL:操作成功时 FAIL:操作失败时 |
例 1,取消对表的创建、修改和删除的审计。
SP_NOAUDIT_STMT('TABLE', 'NULL', 'ALL');
例 2,取消对 SYSDBA 创建用户成功进行审计。
SP_NOAUDIT_STMT('USER', 'SYSDBA', 'SUCCESSFUL');
例 3,取消对用户 USER2 进行的表的修改和删除的审计。
SP_NOAUDIT_STMT('UPDATE TABLE', 'USER2', 'ALL');
SP_NOAUDIT_STMT('DELETE TABLE', 'USER2', 'ALL');
2.对象级审计
对象级审计发生在具体的对象上,需要指定模式名以及对象名。
SP_AUDIT_OBJECT ( TYPE VARCHAR(30), USERNAME VARCHAR (128), SCHNAME VARCHAR (128), TVNAME VARCHAR (128), WHENEVER VARCHAR (20) ) SP_AUDIT_OBJECT ( TYPE VARCHAR(30), USERNAME VARCHAR (128), SCHNAME VARCHAR (128), TVNAME VARCHAR (128), COLNAME VARCHAR (128), WHENEVER VARCHAR (20) ) |
参数说明:
TYPE 对象级审计选项,即上表中的第一列 USERNAME 用户名 SCHNAME 模式名,为空时置‘null’ TVNAME 表、视图、存储过程名不能为空 COLNAME 列名 WHENEVER 审计时机,可选的取值为: ALL:所有的 SUCCESSFUL:操作成功时 FAIL:操作失败时 |
例 1,对 SYSDBA 对表 PERSON.ADDRESS 进行的添加和修改的成功操作进行审计。
SP_AUDIT_OBJECT('INSERT', 'SYSDBA', 'PERSON', 'ADDRESS', 'SUCCESSFUL');
SP_AUDIT_OBJECT('UPDATE', 'SYSDBA', 'PERSON', 'ADDRESS', 'SUCCESSFUL');
例 2, 对 SYSDBA 对表 PERSON.ADDRESS 的 ADDRESS1 列进行的修改成功的操作进
行审计。
SP_AUDIT_OBJECT('UPDATE','SYSDBA','PERSON','ADDRESS','ADDRESS1','SUCCESSFUL');
取消对象级审计的系统过程:
SP_NOAUDIT_OBJECT ( TYPE VARCHAR(30), USERNAME VARCHAR (128), SCHNAME VARCHAR (128), TVNAME VARCHAR (128), WHENEVER VARCHAR (20) ) SP_NOAUDIT_OBJECT ( TYPE VARCHAR(30), USERNAME VARCHAR (128), SCHNAME VARCHAR (128), TVNAME VARCHAR (128), COLNAME VARCHAR (128), WHENEVER VARCHAR (20) ) |
参数说明:
TYPE 对象级审计选项,即上表中的第一列 USERNAME 用户名 SCHNAME 模式名,为空时置‘null’ TVNAME 表、视图、存储过程名不能为空 COLNAME 列名 WHENEVER 审计时机,可选的取值为: ALL:所有的 SUCCESSFUL:操作成功时 FAIL:操作失败时 |
例 1,取消对 SYSDBA 对表 PERSON.ADDRESS 进行的添加和修改的成功操作的审计。
SP_NOAUDIT_OBJECT('INSERT', 'SYSDBA', 'PERSON', 'ADDRESS', 'SUCCESSFUL');
SP_NOAUDIT_OBJECT('UPDATE', 'SYSDBA', 'PERSON', 'ADDRESS', 'SUCCESSFUL');
例 2,取消对 SYSDBA 对表 PERSON.ADDRESS 的 ADDRESS1 列进行的修改成功操作的审计。
SP_NOAUDIT_OBJECT('UPDATE','SYSDBA','PERSON','ADDRESS','ADDRESS1','SUCCESSFUL
');
3.语句序列审计
DM 还提供了语句序列审计功能,作为语句级审计和对象级审计的补充。语句序列审计
需要审计员预先建立一个审计规则,包含 N 条 SQL 语句( SQL1,SQL2……),如果某个会话依次执行了这些 SQL 语句,就会触发审计
建立语句序列审计规则的过程:
SP_AUDIT_SQLSEQ_START( NAME VARCHAR (128) ) SP_AUDIT_SQLSEQ_ADD( NAME VARCHAR (128), SQL VARCHAR (8188) ) SP_AUDIT_SQLSEQ_END( NAME VARCHAR (128) ) |
参数说明:
NAME 语句序列审计规则名 SQL 需要审计的语句序列中的 SQL 语句 |
例如,建立一个语句序列审计规则 AUDIT_SQL1。
SP_AUDIT_SQLSEQ_START('AUDIT_SQL1');
SP_AUDIT_SQLSEQ_ADD(' AUDIT_SQL1', 'SELECT NAME FROM TEST1;');
SP_AUDIT_SQLSEQ_ADD(' AUDIT_SQL1', 'SELECT ID ROM TEST2;');
SP_AUDIT_SQLSEQ_ADD(' AUDIT_SQL1', 'SELECT * FROM TEST3;');
SP_AUDIT_SQLSEQ_END(' AUDIT_SQL1');
系统过程删除指定的语句序列审计规则
SP_AUDIT_SQLSEQ_DEL( NAME VARCHAR (128) ) |
参数说明:
例如, 删除语句序列审计规则 AUDIT_SQL1。
SP_AUDIT_SQLSEQ_DEL(' AUDIT_SQL1');
随着系统的运行,审计记录将会不断增加,审计文件需要更多的磁盘空间。在极限情况
下,审计记录可能会因为磁盘空间不足而无法写入审计文件,最终导致系统无法正常运行。
对这种情况的处理有两种策略,通过设置 DM 的 INI 参数 AUDIT_FILE_FULL_MODE 进行配置。当将 AUDIT_FILE_FULL_MODE 置为 1 时,将删除最老的审计文件,直至有足够的空间创建新审计文件;当将 AUDIT_FILE_FULL_MODE 置为 2 时,将不再写审计记录,默认值为 1。 AUDIT_FILE_FULL_MODE 为静态参数,可通过系统过程SP_SET_PARA_VALUE 进行修改,但是修改需要重新启动 DM 数据库服务器才能生效。
DM 审计信息存储在审计文件中。审计文件存放在数据库的 SYSTEM_PATH 指定的路径,即数据库所在路径。审计文件命名格式为“AUDIT_GUID_创建时间.log”,其中“GUID”为DM 给定的一个唯一值。
审计文件的大小可以通过 DM 的 INI 参数 AUDIT_MAX_FILE_SIZE 指定。 当单个审
计文件超过指定大小时,系统会自动切换审计文件,自动创建新的审计文件,审计记录将写入新的审计文件中。 AUDIT_MAX_FILE_SIZE 为动态系统级参数,缺省值为 100M, DBA用户可通过系统过程 SP_SET_PARA_VALUE 对其进行动态修改,有效值范围为 1~4096M。
1.2.3审计信息查阅
当使用 DM 提供的审计机制进行了审计设置后,这些审计设置信息都记录在数据字典表
SYSAUDITOR.SYSAUDIT 中
审计用户可以通过动态视图 SYSAUDITOR.V$AUDITRECORDS 查询系统默认路径下的审计文件的审计记录
1.2.4审计告警工具 dmamon
dmamon_ctl FILE=c:\dmamon.ini
当需要创建 dmamon.ini 时,可以不指定 FILE 参数,则 dmamon_ctl 工具会一步
步引导用户配置 dm.ini 所在目录、发送和接收邮件的电子邮箱等信息,创建一个新的
dmamon.ini 文件。 配置项如下表所示
项目 | 项目意义 | 字段 | 字段意义 | [PATH] | 实时审计警报记录文 件所在的文件目录 | PATH | 实时审计警报记录文件所在的文件目录 | [SENDER] | 发件人 | EMAIL | 发件人邮箱 | SMTP | 发件人邮箱 SMTP 服务器 | | | USERNAME | 发件人用户名 | | | PASSWORD | 发件人密码 | | | [RECEIVER] | 收件人 | EMAIL | 收件人邮箱 | [INTERVAL] | 时间间隔 | INTERVL | 检查审计警报记录文件的时间间隔,单 |
配置好 dmamon.ini 后,就可以使用 dmamon 工具进行实时审计告警了。 启动
dmamon 工具的命令格式为:
dmamon USERID=value1 FILE=value2
例如:
dmamon USERID=SYSAUDITOR/SYSAUDITOR FILE=c:\dmamon.ini
|