注册

数据文件删掉之后还能插入数据?

codePanda 2025/11/18 83 0

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:
【操作系统】:
【CPU】:
【问题描述】:数据文件删掉之后还能插入数据
今天做DCA实验发现数据文件删除之后还能正常插入数据
[dmdba@panda51:/dm/data/DMDB]$ rm -rf TBS0

[dmdba@panda51:/dm/data/DMDB]$ rm -rf MAIN.DBF
[dmdba@panda51:/dm/data/DMDB]$ rm -rf DMHR.DBF
[dmdba@panda51:/dm/data/DMDB]$ ll
总用量 8605896
drwxr-xr-x 2 dmdba dinstall 6 11月 14 22:22 bak
drwxr-xr-x 2 dmdba dinstall 4096 11月 15 00:59 ctl_bak
-rw-r--r-- 1 dmdba dinstall 337 11月 14 23:14 dmarch.ini
-rw-r--r-- 1 dmdba dinstall 7168 11月 15 00:59 dm.ctl
-rw-r--r-- 1 dmdba dinstall 4294967296 11月 15 01:39 DMDB01.log
-rw-r--r-- 1 dmdba dinstall 4294967296 11月 15 00:59 DMDB02.log
-rw-r--r-- 1 dmdba dinstall 85018 11月 15 00:59 dm.ini
-rw-r--r-- 1 dmdba dinstall 85024 11月 14 23:14 dm.ini.dmbak
-rw-r--r-- 1 dmdba dinstall 900 11月 14 22:22 dminit_DMDB_20251114222219.log
-rw-r--r-- 1 dmdba dinstall 633 11月 14 22:22 dm_service.prikey
-rw-r--r-- 1 dmdba dinstall 3072 11月 14 22:22 dmtemp.ctl
drwxr-xr-x 2 dmdba dinstall 6 11月 14 22:22 HMAIN
-rw-r--r-- 1 dmdba dinstall 134217728 11月 15 01:38 ROLL.DBF
-rw-r--r-- 1 dmdba dinstall 714 11月 14 22:22 sqllog.ini
-rw-r--r-- 1 dmdba dinstall 77594624 11月 15 01:32 SYSTEM.DBF
-rw-r--r-- 1 dmdba dinstall 10485760 11月 15 00:59 TEMP.DBF
drwxr-xr-x 2 dmdba dinstall 6 11月 14 22:22 trace

SQL> select TABLESPACE_NAME from dba_tables where table_name='T1'; 行号 TABLESPACE_NAME ---------- --------------- 1 MAIN SQL> select * from dmhr.t1; 未选定行 已用时间: 0.498(毫秒). 执行号:2204. SQL> insert into dmhr.t1 values(1); 影响行数 1 已用时间: 1.808(毫秒). 执行号:2205. SQL> SQL> commit; 已用时间: 22.112(毫秒). 执行号:2215. SQL> SQL> insert into dmhr.t1 values (2); 影响行数 1 已用时间: 3.834(毫秒). 执行号:2216. SQL> commit; 操作已执行 已用时间: 2.886(毫秒). 执行号:2217. SQL> select * from dmhr.t1; 行号 ID ---------- ----------- 1 1 2 2

image.png
但是此时已经没有办法联机备份了
SQL> backup database full to "backup_set_2_full_20251118" backupset '/dm/backup/backup_set_2_full_20251118';
backup database full to "backup_set_2_full_20251118" backupset '/dm/backup/backup_set_2_full_20251118';
[-3432]:使用了不可修改的表空间,该表空间处于离线状态或数据文件被删除.
已用时间: 00:00:02.070. 执行号:0.
在此过程中的事务在数据库重启之后会全部丢失,使用之前的全量备份+增量也会丢数据。为什么操作系统在数据库文件被删除之后还能继续写操作呢?可能是操作系统有数据缓存或者打开的文件句柄还没有释放,基于这样的原理可以在操作系统层面利用IO重定向尝试恢复

dmserver 175629 175698 dm_osio_t dmdba 11u REG 253,0 134217728 74125449 /dm/data/DMDB/MAIN.DBF (deleted)
dmserver 175629 175698 dm_osio_t dmdba 12u REG 253,0 134217728 74125453 /dm/data/DMDB/DMHR.DBF (deleted)
dmserver 175629 175698 dm_osio_t dmdba 13u REG 253,0 67108864 74125496 /dm/data/DMDB/TBS01.DBF (deleted)
dmserver 175629 175698 dm_osio_t dmdba 14u REG 253,0 67108864 74125497
。。。。。。
[dmdba@panda51:/dm/data/DMDB]$ lsof | grep delete | grep DBF|wc -l
lsof: WARNING: can't stat() tracefs file system /sys/kernel/debug/tracing
Output information may be incomplete.
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/0/gvfs
Output information may be incomplete.
484

[dmdba@panda51:/dm/data/DMDB]$ ps -ef | grep dmserver dmdba 175629 1 0 00:59 pts/0 00:00:06 /dm/bin/dmserver path=/dm/data/DMDB/dm.ini -noconsole dmdba 178545 167359 0 01:55 pts/4 00:00:00 grep --color=auto dmserver [dmdba@panda51:/dm/data/DMDB]$ DM_PID=175629 [dmdba@panda51:/dm/data/DMDB]$ lsof -p $DM_PID | grep DBF | grep deleted lsof: WARNING: can't stat() tracefs file system /sys/kernel/debug/tracing Output information may be incomplete. lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/0/gvfs Output information may be incomplete. dmserver 175629 dmdba 11u REG 253,0 134217728 74125449 /dm/data/DMDB/MAIN.DBF (deleted) dmserver 175629 dmdba 12u REG 253,0 134217728 74125453 /dm/data/DMDB/DMHR.DBF (deleted) dmserver 175629 dmdba 13u REG 253,0 67108864 74125496 /dm/data/DMDB/TBS01.DBF (deleted) dmserver 175629 dmdba 14u REG 253,0 67108864 74125497 /dm/data/DMDB/TBS02.DBF (deleted) [dmdba@panda51:/dm/data/DMDB]$ vi restore.sh DM_PID=$(ps -ef | grep dmserver | grep -v grep | awk '{print $2}') RESTORE_DIR="/dm/data/DMDB" lsof -p $DM_PID | grep DBF | grep deleted | while read line do FD=$(echo $line | awk '{print $4}' | tr -d 'u') FILE=$(echo $line | awk '{print $9}' | sed 's/(deleted)//') BASENAME=$(basename $FILE) cp /proc/$DM_PID/fd/$FD $RESTORE_DIR/$BASENAME done chown dmdba:dinstall $RESTORE_DIR/*.DBF chmod 660 $RESTORE_DIR/*.DBF [dmdba@panda51:/dm/data/DMDB]$ sh restore.sh lsof: WARNING: can't stat() tracefs file system /sys/kernel/debug/tracing Output information may be incomplete. lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/0/gvfs Output information may be incomplete. [dmdba@panda51:/dm/data/DMDB]$ ll -lrt 总用量 8999116 drwxr-xr-x 2 dmdba dinstall 6 11月 14 22:22 bak -rw-r--r-- 1 dmdba dinstall 714 11月 14 22:22 sqllog.ini -rw-r--r-- 1 dmdba dinstall 633 11月 14 22:22 dm_service.prikey drwxr-xr-x 2 dmdba dinstall 6 11月 14 22:22 HMAIN -rw-r--r-- 1 dmdba dinstall 900 11月 14 22:22 dminit_DMDB_20251114222219.log -rw-r--r-- 1 dmdba dinstall 3072 11月 14 22:22 dmtemp.ctl drwxr-xr-x 2 dmdba dinstall 6 11月 14 22:22 trace -rw-r--r-- 1 dmdba dinstall 85024 11月 14 23:14 dm.ini.dmbak -rw-r--r-- 1 dmdba dinstall 337 11月 14 23:14 dmarch.ini -rw-r--r-- 1 dmdba dinstall 85018 11月 15 00:59 dm.ini -rw-rw---- 1 dmdba dinstall 10485760 11月 15 00:59 TEMP.DBF -rw-r--r-- 1 dmdba dinstall 4294967296 11月 15 00:59 DMDB02.log -rw-r--r-- 1 dmdba dinstall 7168 11月 15 00:59 dm.ctl drwxr-xr-x 2 dmdba dinstall 4096 11月 15 00:59 ctl_bak -rw-rw---- 1 dmdba dinstall 77594624 11月 15 01:50 SYSTEM.DBF -rw-r--r-- 1 dmdba dinstall 433 11月 15 01:56 restore.sh -rw-rw---- 1 dmdba dinstall 134217728 11月 15 01:56 ROLL.DBF -rw-r--r-- 1 dmdba dinstall 4294967296 11月 15 01:56 DMDB01.log -rw-rw---- 1 dmdba dinstall 134217728 11月 15 01:56 MAIN.DBF -rw-rw---- 1 dmdba dinstall 134217728 11月 15 01:56 DMHR.DBF -rw-rw---- 1 dmdba dinstall 67108864 11月 15 01:56 TBS01.DBF -rw-rw---- 1 dmdba dinstall 67108864 11月 15 01:56 TBS02.DBF ## 全量备份 SQL> backup database full to "backup_set_2_full_20251118" backupset '/dm/backup/backup_set_2_full_20251118'; 操作已执行 已用时间: 00:00:04.546. 执行号:3404. ## 重启 [dmdba@panda51:/dm/bin]$ DmServicePROD stop Stopping DmServicePROD: [ OK ] [dmdba@panda51:/dm/bin]$ DmServicePROD start Starting DmServicePROD: [ OK ] SQL> select * from dmhr.t1; 行号 ID ---------- ----------- 1 1 2 2 已用时间: 5.555(毫秒). 执行号:601.

社区地址:

https://eco.dameng.com

回答 0
暂无回答
扫一扫
联系客服