今天在navicat上操作mysql數據庫表,突然沒有響應了。隨後重啟,mysql服務也終止了。隨後啟動服務,檢查表,發現一張表卡沒了,就重新添加一張表。報了一個錯:
Error : Tablespace for table '`database`.`temp`' exists. Please DISCARD the tablespace before IMPORT.
可是show databases看了一下根本就沒有這張表啊。網上查了半天都沒有找到類似的情況,花了好幾個小時。
最後終於找到解決辦法如下:
1、關閉所有mysql操作,停止mysql服務。
2、找到安裝目錄下的數據庫文件,應該在你安裝目錄下的data文件夾下,然後打開你對應的數據庫名的文件夾。找到那個表對應的文件,還有損壞的文件,一並刪除。
數據庫中的文件名,應該是和你的表名一一對應的,一個表,兩個文件,一個數據文件,一個是日志文件,除了這個還有一個“db.opt”文件不要刪除。其他的亂碼的文件,和原來你出錯的文件全部刪除。
3、完了以後重新啟動mysql服務,重新添加那個同樣名字的表就可以添加成功了。
注意本腳本是應用於archive log模式下的,另外數據庫的用戶名密碼,自己在腳本裡改一下,腳本是帶參數的,參數是備份的目標目錄,注意要有寫權限。#!/bin/sh
mypath=$1
if [ -z $mypath ] ; then
echo 'Please Use This Command Like ./backup /u01/backup'
else
if [ -d $mypath ] ; then
ORACLE_SID=dzzd; export ORACLE_SID
ORAENV_ASK=NO; export ORAENV_ASK
rm -Rf aa.txt
sqlplus -s "system/oracle9i"<<EOF
set head off
set feedback off
spool aa.txt
select tablespace_name from dba_tablespaces;
spool off
EXIT
EOF
for spacename in `cat aa.txt`
do
echo $spacename |grep "^TEMP"
if [ "$?" -eq "0" ]
then
echo TEMP no need backup else
else
echo begin backup $spacename
sqlplus -s system/oracle9i<<SETSTA
alter tablespace $spacename begin backup;
EXIT
SETSTA
rm -Rf bb.txt
sqlplus -s system/oracle9i<<DATAFILE1
set head off
set feedback off
spool bb.txt
SELECT 'cp '||file_name||' $mypath'||SUBSTR(FILE_NAME,INSTR(FILE_NAME,'/',-1,1))
FROM dba_data_files where tablespace_name=trim('$spacename');
spool off
EXIT
DATAFILE1
sh bb.txt
sqlplus -s system/oracle9i<<SETSTA
alter tablespace $spacename end backup;
EXIT
SETSTA
echo end backup $spacename
fi
done
else
echo "Please Input a Right Direction"
fi
fi
mhere 回復於:2003-11-07 15:07:05
好!
能不能有一個純文本的附件?
txfy 回復於:2003-11-07 15:18:13
不能上傳文本文件,把內容沾出來放到backup文件中,chmod 755 backup, 就可以運行了 ./backup /u01
steal 回復於:2003-11-07 15:27:42......余下全文>>