签到成功

知道了

CNDBA社区CNDBA社区

DM 达梦 MAIN 表空间 无法ONLINE 解决方法

2023-03-22 22:51 874 0 原创 DM 达梦
作者: dave

1 现象说明

公司内部培训,演示达梦表空间备份还原时翻车了。 主要是操作的时候使用了MAIN 表空间。http://www.cndba.cn/dave/article/116503

[dave@www.cndba.cn ~]$ disql SYSDBA/SYSDBA@localhost:5237

服务器[localhost:5237]:处于普通打开状态
登录使用时间 : 3.396(ms)
disql V8
SQL> select * from v$version;

行号     BANNER                   
---------- -------------------------
1          DM Database Server 64 V8 
2          DB Version: 0x7000c

已用时间: 1.004(毫秒). 执行号:7601.
SQL> 

SQL> backup database backupset '/dm/backup/backup1';
操作已执行
已用时间: 00:00:01.299. 执行号:284501.
SQL> BACKUP TABLESPACE MAIN BACKUPSET '/dm/backup/backup2';
操作已执行
已用时间: 975.195(毫秒). 执行号:284502.
SQL> ALTER TABLESPACE MAIN OFFLINE;
操作已执行
已用时间: 164.038(毫秒). 执行号:284503.
SQL> RESTORE TABLESPACE MAIN FROM BACKUPSET '/dm/backup/backup2';
RESTORE TABLESPACE MAIN FROM BACKUPSET '/dm/backup/backup2';
[-2004]:不支持的语句类型.
已用时间: 16.341(毫秒). 执行号:0.

因为达梦8 里不支持联机恢复表空间了,所以打算把表空间ONLINE起来,结果拉不起来:

SQL>  ALTER TABLESPACE MAIN ONLINE;
 ALTER TABLESPACE MAIN ONLINE;
[-3408]:表空间[MAIN]处于脱机状态.
已用时间: 1.312(毫秒). 执行号:0.


SQL> select tablespace_name,status from dba_tablespaces;

行号     TABLESPACE_NAME STATUS     
---------- --------------- -----------
1          SYSTEM          0
2          ROLL            0
3          TEMP            0
4          MAIN            1
5          DMHR            0
6          HMAIN           NULL

6 rows got

已用时间: 4.409(毫秒). 执行号:7606.
SQL>

准备在创建其他表空间测试下,结果因为MAIN 表空间脱机无法执行:

SQL> create tablespace ustc datafile '/dm/dmdbms/data/dave/ustc01.DBF' size 64;
create tablespace ustc datafile '/dm/dmdbms/data/dave/ustc01.DBF' size 64;
[-3408]:表空间[MAIN]处于脱机状态.
已用时间: 14.068(毫秒). 执行号:0.
SQL>

2 换个实例测试

因为MAIN 表空间起不来,所以其他操作也不了。 因为上小节offline 之前有备份的操作,担心是备份的影响,所以换了个实例,直接offline,结果直接起不来:http://www.cndba.cn/dave/article/116503

[dave@www.cndba.cn bin]$ disql SYSDBA/'"dameng@123"'

服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间 : 2.835(ms)
disql V8
SQL> select tablespace_name,status from dba_tablespaces;

行号     TABLESPACE_NAME STATUS     
---------- --------------- -----------
1          SYSTEM          0
2          ROLL            0
3          TEMP            0
4          MAIN            0
5          HMAIN           NULL

已用时间: 5.105(毫秒). 执行号:140900.
SQL> ALTER TABLESPACE MAIN OFFLINE;
操作已执行
已用时间: 157.614(毫秒). 执行号:140901.
SQL> select tablespace_name,status from dba_tablespaces;

行号     TABLESPACE_NAME STATUS     
---------- --------------- -----------
1          SYSTEM          0
2          ROLL            0
3          TEMP            0
4          MAIN            1
5          HMAIN           NULL

已用时间: 1.171(毫秒). 执行号:140902.
SQL>  ALTER TABLESPACE MAIN ONLINE;
 ALTER TABLESPACE MAIN ONLINE;
[-3408]:表空间[MAIN]处于脱机状态.
已用时间: 1.213(毫秒). 执行号:0.
SQL> 
SQL> ALTER TABLESPACE SYSTEM OFFLINE;
 ALTER TABLESPACE SYSTEM OFFLINE;
第1 行附近出现错误[-3409]:表空间[SYSTEM]不能置为脱机状态.
已用时间: 0.381(毫秒). 执行号:0.
SQL>

所以基本确定,应该是这个版本的bug。 SYSTEM 为系统表空间,直接提示不能不能脱机,MAIN 允许脱机,但又不能ONLINE,关键库的运行还依赖该表空间,所以一旦执行脱机,这个实例就废了。

3 继续测试表空间

前面干废了2个达梦实例,在第三个实例上,又重新测试了一把业务表空间,可以正常操作。

[dave@www.cndba.cn bin]$ disql SYSDBA/SYSDBA@localhost:15236

服务器[localhost:15236]:处于普通打开状态
登录使用时间 : 7.204(ms)
disql V8
SQL> select tablespace_name,status from dba_tablespaces;

行号     TABLESPACE_NAME STATUS     
---------- --------------- -----------
1          SYSTEM          0
2          ROLL            0
3          TEMP            0
4          MAIN            0
5          HMAIN           NULL

已用时间: 7.372(毫秒). 执行号:1231041.
SQL> create tablespace ustc datafile '/dm/dmdbms/data/dave/ustc01.DBF' size 64;
操作已执行
已用时间: 199.682(毫秒). 执行号:1231112.
SQL> select tablespace_name,status from dba_tablespaces;

行号     TABLESPACE_NAME STATUS     
---------- --------------- -----------
1          SYSTEM          0
2          ROLL            0
3          TEMP            0
4          MAIN            0
5          USTC            0
6          HMAIN           NULL

6 rows got

已用时间: 1.444(毫秒). 执行号:1231136.
SQL> ALTER TABLESPACE USTC OFFLINE;
操作已执行
已用时间: 170.201(毫秒). 执行号:1231235.
SQL>  ALTER TABLESPACE USTC ONLINE;
操作已执行
已用时间: 51.294(毫秒). 执行号:1231273.
SQL>  select tablespace_name,status from dba_tablespaces;

行号     TABLESPACE_NAME STATUS     
---------- --------------- -----------
1          SYSTEM          0
2          ROLL            0
3          TEMP            0
4          MAIN            0
5          USTC            0
6          HMAIN           NULL

6 rows got

已用时间: 3.154(毫秒). 执行号:1231293.
SQL>

4 重建控制文件拉起MAIN 表空间

上面的操作直接废了2个实例,所以不想放弃,决定在抢救一下,所以直接通过重建控制文件,修改控制文件中表空间的状态,把MAIN 表空间拉起来。http://www.cndba.cn/dave/article/116503http://www.cndba.cn/dave/article/116503

DM7 达梦数据库 查看并重建控制文件 操作示例
https://www.cndba.cn/dave/article/3574http://www.cndba.cn/dave/article/116503

[dave@www.cndba.cn bin]$ ./DmServicedave stop
Stopping DmServicedave:                                    [ OK ]


[dave@www.cndba.cn ~]$ cat /dm/dmdbms/data/dave/dm.ini|grep CTL
                CTL_PATH                        = /dm/dmdbms/data/dave/dm.ctl     #ctl file path
                CTL_BAK_PATH                    = /dm/dmdbms/data/dave/ctl_bak    #dm.ctl backup path
                CTL_BAK_NUM                     = 10                       #backup number of dm.ctl, allowed to keep one more backup file besides specified number.
                DSC_N_CTLS                      = 10000                 #Number Of LBS/GBS ctls
[dave@www.cndba.cn ~]$ 


[dave@www.cndba.cn ~]$ dmctlcvt type=1 SRC=/dm/dmdbms/data/dave/dm.ctl DEST=/tmp/dmct.txt
DMCTLCVT V8
convert ctl to txt success!

[dave@www.cndba.cn ~]$ vim /tmp/dmct.txt 

找到MAIN 表空间,将ts_state=0 改成0.
# table space name
ts_name=MAIN
 # table space ID
ts_id=4
# table space status
ts_state=0
# table space cache
ts_cache=
# DSC node number
ts_nth=0


[dave@www.cndba.cn ~]$ dmctlcvt type=2 SRC=/tmp/dmct.txt DEST=/dm/dmdbms/data/dave/dm.ctl
DMCTLCVT V8
convert txt to ctl success!
[dave@www.cndba.cn ~]$ 


[dave@www.cndba.cn bin]$ ./DmServicedave start
Starting DmServicedave:                                    [ OK ]
[dave@www.cndba.cn bin]$

验证表空间,已经ONLINE了:http://www.cndba.cn/dave/article/116503http://www.cndba.cn/dave/article/116503

[dave@www.cndba.cn ~]$ disql SYSDBA/SYSDBA@localhost:5237

服务器[localhost:5237]:处于普通打开状态
登录使用时间 : 3.760(ms)
disql V8
SQL>  select tablespace_name,status from dba_tablespaces;

行号     TABLESPACE_NAME STATUS     
---------- --------------- -----------
1          SYSTEM          0
2          ROLL            0
3          TEMP            0
4          MAIN            0
5          DMHR            0
6          HMAIN           NULL

6 rows got

已用时间: 6.031(毫秒). 执行号:401.
SQL>

5 小结

达梦数据库,慎重对MAIN 表空间执行OFFLINE 操作,常规SQL拉不起来,只能通过重建控制文件的方式来强制拉。

http://www.cndba.cn/dave/article/116503
http://www.cndba.cn/dave/article/116503http://www.cndba.cn/dave/article/116503

版权声明:本文为博主原创文章,未经博主允许不得转载。

用户评论
* 以下用户言论只代表其个人观点,不代表CNDBA社区的观点或立场
dave

dave

关注

人的一生应该是这样度过的:当他回首往事的时候,他不会因为虚度年华而悔恨,也不会因为碌碌无为而羞耻;这样,在临死的时候,他就能够说:“我的整个生命和全部精力,都已经献给世界上最壮丽的事业....."

  • 2235
    原创
  • 2
    翻译
  • 535
    转载
  • 185
    评论
  • 访问:6526963次
  • 积分:4223
  • 等级:核心会员
  • 排名:第1名
精华文章
    最新问题
    查看更多+
    热门文章
      热门用户
      推荐用户
        Copyright © 2016 All Rights Reserved. Powered by CNDBA · 皖ICP备2022006297号-1·

        QQ交流群

        注册联系QQ