db2表空间自动存储
A. Windows db2 做restore恢复 出现“SQL20319N 不允许在自动存储器表空间上执行 SET TABLESPACE CONTAINE”
解决办法:在最初开始恢复的时候就需要设置个路径
例如:db2 restore db movies from d taken at 20021006213640 on d: redirect
其中d:为windows下的d盘,即自动表空间存放的地址,若你需要在aix上或者windows下其它盘符恢复,替换成相应路径即可~
B. db2 查看表空间是否自动扩展
db2pd -d 数据库名 -tablespace 在现实结果中如下就是 AS是automaitc storage自动存储的缩写,AR是autoresize的缩写 AS是yes证明表空间是自动存储的 AR是yes证明表空间是自动扩展的
statistics
AS AR
YES NO
C. 求问DB2关于查看表空间是否启动了自动存储功能
可以通过三种方式查看进入命令行模式db2 connect to sample1. db2 get snapshot for tablespaces on sample 使用自动存储器 = 是可确定该表空间启用了自动存储器。2 db2 "select char((TBSP_NAME),30) as TBSP_NAME,TBSP_ID,TBSP_USING_AUTO_STORAGE from table(snap_get_tbsp('sample',-1)) as tbsp"TBSP_USING_AUTO_STORAGE 为1 可确定该表空间启用了自动存储器。
D. db2有表空间的LRG跟FLG文件,能恢复出来吗
在弄明白什么是重定向恢复之前,需要知道数据库的文件构成,如果您对这一块比较熟悉,可以直接跳到第一条分割线:
首先,一个DB2数据库的文件是由两分部构成的:表空间容器和数据库文件,容器就是真正存放用户数据的地方,是创建表空间时定义的;数据库文件则包括了缓冲池信息文件、数据库配置文件、历史文件、日志控制文件等。
问题是,如何定义表空间容器以及数据库文件所在的路径呢?答:是create database以及create tablespace的时候的参数决定的:
1. 如果CREATE DATABASE的时候指定了 AUTOMATIC STORAGE NO:
没有指定ON path,那么数据库文件会被创建在数据库管理器配置文件dftdbpath指定的目录里;
若指定了ON path,那么数据库文件会被创建在ON指定的path里。
2. 如果CREATE DATABASE的时候指定了 AUTOMATIC STORAGE YES或者根本没有指定AUTOMATIC STORAGE:
2.1 没有指定ON path, 那么数据库文件和IBMSTOGROUP都会被创建/指定在dftdbpath指定的目录里
2.2 若指定了ON path, 这个path可以指定多个路径。 IBMSTOGROUP就使用这些路径,表空间容器路径解决了,数据库文件在哪里呢?这取决于DBPATH ON 参数:
没有指定DBPATH ON,数据库文件会被放在ON path指定的第一个路径里。
若指定了DBPATH ON, 数据库文件会放在这个路径下。
下面正式进入重定向复原,首先是什么情况下需要重定向恢复?
在下列任何情况下,请使用重定向复原操作:
--如果要将备份映像复原到不同于源机器的目标机器
--如果要将表空间容器复原到另一个物理位置
--如果复原操作由于一个或多个容器不可访问而失败
--如果要重新定义已定义的存储器组的路径
这儿我举一个例子,尽可能地将上面几种情况都包括了,假设我们有如下创建数据库以及表空间的命令:
dbm cfg: Default database path (DFTDBPATH) = /home/db2users/e105q6a
$ db2 "create db test"
$ db2 "connect to test"
$ db2 "create STOGROUP MQSGROUP ON '/home/db2users/e105q6a/conpath1', '/home/db2users/e105q6a/conpath2'"
$ db2 "create user temporary tablespace usrtmp1 managed by automatic storage"
$ db2 "create regular tablespace rglrtbs1 managed by automatic storage USING STOGROUP MQSGROUP"
$ db2 "create tablespace tbs1 managed by system using ('/home/db2users/e105q6a/path1')"
$ db2 "create tablespace tbs2 managed by database using (file 'con2' 4000)"
那么数据库文件、storage group以及各个表空间的容器路径如下:
数据库文件/数据库目录:
/home/db2users/e105q6a
Storage Group:
$ db2 "SELECT VARCHAR(STORAGE_GROUP_NAME, 15) AS STOGROUP, STORAGE_GROUP_ID, VARCHAR(DB_STORAGE_PATH, 40) AS STORAGE_PATH FROM TABLE(ADMIN_GET_STORAGE_PATHS('',-1)) AS T"
STOGROUP STORAGE_GROUP_ID STORAGE_PATH
---------------- ---------------- ----------------------------------------
IBMSTOGROUP 0 /home/db2users/e105q6a
MQSGROUP 1 /home/db2users/e105q6a/conpath1
MQSGROUP 1 /home/db2users/e105q6a/conpath2
3 record(s) selected.
表空间容器(我精简了输出):
$ db2pd -db test -tab
Database Member 0 -- Database TEST -- Active -- Up 0 days 00:16:02 -- Date 2017-02-25-10.28.54.331489
Tablespace Configuration:
Id AS AR Type Content SGID Name Type Container
0 Yes Yes DMS Regular 0 SYSCATSPACE File /home/db2users/e105q6a/e105q6a/NODE0000/TEST/T0000000/C0000000.CAT
1 Yes No SMS SysTmp 0 TEMPSPACE1 Path /home/db2users/e105q6a/e105q6a/NODE0000/TEST/T0000001/C0000000.TMP
2 Yes Yes DMS Large 0 USERSPACE1 File /home/db2users/e105q6a/e105q6a/NODE0000/TEST/T0000002/C0000000.LRG
3 Yes Yes DMS Large 0 SYSTOOLSPACE File /home/db2users/e105q6a/e105q6a/NODE0000/TEST/T0000003/C0000000.LRG
4 Yes No SMS UsrTmp 0 USRTMP1 Path /home/db2users/e105q6a/e105q6a/NODE0000/TEST/T0000004/C0000000.UTM
5 Yes Yes DMS Regular 1 RGLRTBS1 File /home/db2users/e105q6a/conpath1/e105q6a/NODE0000/TEST/T0000005/C0000000.USR
5 Yes Yes DMS Regular 1 RGLRTBS1 File /home/db2users/e105q6a/conpath2/e105q6a/NODE0000/TEST/T0000005/C0000001.USR
6 No No SMS Regular - TBS1 Path /home/db2users/e105q6a/path1
7 No No DMS Large - TBS2 File /home/db2users/e105q6a/e105q6a/NODE0000/SQL00001/con2
----
以上面的数据库为例,假设想要通过重定向恢复达到以下目的:
1.)把数据库文件路径换为/home/db2users/e105q6a/targetdbdir
2.) 把IBMSTOGROUP的路径换为/home/db2users/e105q6a/targetstgrpsystem
3.)把MQSGROUP的路径换为/home/db2users/e105q6a/targetstgrpuser1, /home/db2users/e105q6a/targetstgrpuser2 和/home/db2users/e105q6a/targetstgrpuser3
4.)把表空间tbs1路径换为:/home/db2users/e105q6a/targetpath1
5.)把表空间tbs2路径换为:/home/db2users/e105q6a/targetcon2, 并将大小改为5000
要先通过"db2 drop db test"删掉数据库(模拟恢复到另一个机器上),之后针对上面这几个需求,相应的操作如下:
1.)$ db2 "restore db test to '/home/db2users/e105q6a/targetdbdir' redirect without prompting"
2.)$ db2 "SET STOGROUP PATHS FOR IBMSTOGROUP ON '/home/db2users/e105q6a/targetstgrpsystem'"
3.)$ db2 "SET STOGROUP PATHS FOR MQSGROUP ON '/home/db2users/e105q6a/targetstgrpuser1', '/home/db2users/e105q6a/targetstgrpuser2', '/home/db2users/e105q6a/targetstgrpuser3' "
4.)$ db2 "set tablespace containers for 6 using (path '/home/db2users/e105q6a/targetpath1')"
5.)$ db2 "set tablespace containers for 7 using (file '/home/db2users/e105q6a/targetcon2' 5000)"
最后发出db2 restore db test continue的命令,完成重定向恢复。
E. 我把DB2数据库安装完了,谁能告诉我如何创建数据库
在发出 CREATE DATABASE 命令时,DB2 会创建许多文件,这个在前面已经见过。这些文件包括日志文件、配置信息、历史文件和三个表空间。这些表空间是:
SYSCATSPACE:这是保存 DB2 系统编目的地方,系统编目跟踪与 DB2 对象相关联的所有元数据。 TEMPSPACE1:DB2 用来放置中间结果的临时工作区域。 USERSPACE1:默认情况下存放所有用户对象(表、索引)的地方。所有这些文件都放在默认驱动器上的 DB2 目录中。默认驱动器通常是安装 DB2 产品的卷。
对于简单的应用程序,这个默认配置应该可以满足需要。但是,可能希望改变数据库文件的位置,或者改变 DB2 管理这些对象的方式。接下来,我们将更详细地研究 CREATE DATABASE 命令。
对于从 DB2 8 进行迁移的用户,有一个特殊的注意事项:在 DB2 9 之前,CREATE DATABASE 命令会为上面列出的所有对象创建 SMS 表空间。在 DB2 9 中,所有表空间都将定义为自动存储(DMS)表空间。
以下的 CREATE DATABASE 命令将数据库放在 Windows 操作系统下的 D: 驱动器上的 TEST 目录中:
CREATE DATABASE MYDB ON D:\TEST
选择 Automatic storage(默认设置)允许 DBA 为数据库设置在创建所有表空间容器时可以使用的存储路径。DBA 不必显式地定义表空间的位置和大小,系统将自动地分配表空间。例如,下面的数据库创建语句将为数据库中的所有表空间设置自动存储。
CREATE DATABASE TEST
AUTOMATIC STORAGE ON /db2/storagepath001,
/db2/storagepath002,
/db2/storagepath003
AUTORESIZE YES
INITIALSIZE 300 M
INCREASESIZE 75 M
MAXSIZE NONE
在 AUTOMATED STORAGE ON 选项后面,给出了三个文件目录(路径)。这三个路径是一个表空间的容器的位置。其他的选项是:
AUTORESIZE YES 当表空间用光空间时,系统将自动地扩展容器的大小。 INITIALSIZE 300 M 没有定义初始大小的任何表空间的大小默认为 300 MB。每个容器是 100 MB(有三个存储路径)。 INCREASESIZE 75 M (或百分数) 当表空间用光空间时,表空间的总空间增加 75 MB。还可以指定一个百分数,在这种情况下,表空间会增长它的当前大小的百分数。 MAXSIZE NONE 表空间的最大大小没有限制。如果 DBA 希望限制一个表空间可以占用的存储空间,那么可以指定一个最大值。
当使用 AUTOMATIC STORAGE 定义表空间时,不需要提供其他参数: CREATE TABLESPACE TEST MANAGED BY AUTOMATIC STORAGE;
在这个命令中,可以提供与表空间相关联的任何参数;但是,使用自动存储可以大大简化日常的表空间维护。与重要的大型生产表相关联的表空间可能需要 DBA 更多地干预。 在没有启用自动存储的数据库中创建表空间时,必须指定 MANAGED BY SYSTEM 或 MANAGED BY DATABASE 子句。使用这些子句会分别创建 SMS 表空间和 DMS 表空间。在这两种情况下,都必须提供容器的显式列表。
如果数据库启用了自动存储,那么有另一个选择。可以指定 MANAGED BY AUTOMATIC STORAGE 子句,或者完全去掉 MANAGED BY 子句(这意味着自动存储)。在这种情况下,不提供容器定义,因为 DB2 会自动地分配容器。
代码页和整理次序
所有 DB2 字符数据类型(CHAR、VARCHAR、CLOB、DBCLOB)都有一个相关联的字符代码页。可以认为代码页是一个对照表,用来将字母数字数据转换为数据库中存储的二进制数据。一个 DB2 数据库只能使用一个代码页。代码页是在 CREATE DATABASE 命令中使用 CODESET 和 TERRITORY 选项设置的。代码页可以使用单一字节表示一个字母数字字符(单一字节可以表示 256 个独特元素),也可以使用多个字节。
英语等语言包含的独特字符相当少;因此单字节代码页对于存储数据足够了。日语等语言需要超过 256 个元素才能表示所有的独特字符;因此需要多字节代码页(通常是双字节代码页)。
在默认情况下,数据库的整理次序根据 CREATE DATABASE 命令中使用的代码集进行定义。如果指定选项 COLLATE USING SYSTEM,就根据为数据库指定的 TERRITORY 对数据值进行比较。如果使用选项 COLLATE USING IDENTITY,那么以逐字节的方式使用二进制表示来比较所有值。
DB2 Administration Guide 列出了创建数据库时可用的各种代码页。在大多数情况下,DBA 会让这个设置保持为数据库所在的操作系统的默认代码页。
对于需要使用 XML 数据的应用程序,有一个特殊的注意事项。当前,DB2 只在定义为 Unicode(UTF-8)的数据库中支持 XML 列。如果数据库在创建时没有启用 Unicode 支持,就不能在其中创建 XML 列。
F. 怎样查看表空间是否自动扩展
第一个是db2的日志问题。db2数据库的日志有两种模式,一种是循环日志,一种是归档模式。你的说法有问题,如果是循环日志的话,根据你的数据库里配置的三个参数,主日志文件和辅助日志文件数及日志大小文件,总的日志大小不会超过(总日志文件数与日志大小的乘积),然后是循环使用的,也就是说,如果数据库进行一次事务操作时,先生成第一个主日志文件(受日志文件大小参数)控制,不足时生成第二个主日志文件,当一次事务超过所有的主日志文件时,才会创建辅助日志文件),然后下次覆盖第一个,依次循环,所以循环日志模式,日志文件大小不是无限增大的。只有在归档模式下才会不断产生日志文件,这种模式的好处是数据库可以恢复到任意时点。查看数据库日志的模式时,可以在db2=>命令行下connect to db name 然后 db2=> get db cfg for dbname
会看到有如下几个参数与日志有关系:
启用的恢复的日志保留 (LOGRETAIN) = OFF
启用的日志记录的用户出口 (USEREXIT) = OFF
日志文件大小(4KB) (LOGFILSIZ) = 1024
主日志文件的数目 (LOGPRIMARY) = 13
辅助日志文件的数目 (LOGSECOND) = 4
已更改的至日志文件的路径 (NEWLOGPATH) =
日志文件路径 = D:\DB2\NODE0000\SQL00002\SQLOGDIR\
溢出日志路径 (OVERFLOWLOGPATH) =
镜像日志路径 (MIRRORLOGPATH) =
首个活动日志文件 =
可以看出这里的数据库是运行于循环日志模式,第一个参数是off,如果是on则处于归档模式。下边有日志文件的路径,如果是归档模式,还可以查看到首个活动日志文件,则可以备份归档日志后,删除活动日志以前的归档日志文件。因此你说的按天的日志不知道是什么意思。更改上述参数采用 update db cfg using ....
第二个问题:db2的数据库数据是存储在表里的,表是位于表空间的,表空间对应的表空间容器物理文件存储在文件系统上。随着数据量的增大,分区容量不够时,一种方法是备份数据库,然后使用[重定向]还原数据库,将数据库的表空间容器重定向到一个存储量大的目录或者磁盘上。另一种方法是,直接为该表空间增加新的表空间容器,就可以了。比较简单,在此不在详述。
查看表空间信息时db2=>connect to dbname
db2=>list tablespaces
看到用户定义的表空间的编号,一般是3以后的。
然后
db2=>list tablespace containers for 3
可以查看3号表空间对应的表空间容器信息,一个表空间可以有多个表空间容器,这些表空间容器可以位于不同的磁盘和文件目录上,这样可以解决某个硬盘或者目录容量不足的问题。
给表空间增加容器的方法就不用讲了,直接alter tablespace语句就行了。
G. DB2表空间扩容方法(裸设备,多容器)有哪些
根据表空间的类型不同,扩容方法不同。DB2一般分SMS和DMS两种类型表空间,一个是系统管理表空间,一个是数据库管理表空间。
1、SMS表空间的container是文件系统目录或文件,一般container是自动扩展的,这种情况下你需要扩容文件系统。
查看表空间类型和container
$db2listtablespacesshowdetail
$<tablespaceid>
2、DMS表空间也有自动扩展类型和使用裸设备的情况(container是文件或裸设备),如果是自动扩展则扩容文件系统。非自动扩展的扩容方式是增加container。
DMS+文件
$db2connectto<dbname>
$db2"altertablespace<tablespaceName>beginnewstripeset(file'<filePath>/<fileName>'655360)"
DMS+裸设备
$db2connectto<dbname>
$db2"altertablespace<tablespaceName>beginnewstripeset(device'/dev/rLR_XXXXXX'671088640)"
语句中使用了begin new stripe set,表示新的数据直接写到新的container上,不进行数据reblance。否则替换为add,表示在container间进行数据reblance(会在后台执行,可用list utilities查看进度)
括号中的数字表示container的page个数(表空间pagesize×这个数字即是container的大小)。
H. 怎么查看DB2数据库的表是否是自动扩展的
db2pd -d 数据库名 -tablespace 在现实结果中如下就是 AS是automaitc storage自动存储的缩写,AR是autoresize的缩写 AS是yes证明表空间是自动存储的 AR是yes证明表空间是自动扩展的
statistics
AS AR
YES NO