跨平臺備份sybase數據庫

 工作中,常要將linux的數據備份到windows下備用。

總結出一條最簡潔路線。

如下:

一、在linux建一個臨時數據庫,單用戶模式,sp_dboption XXdb,"single user",true

二、將要備份的庫備份出來,dump database xx_db_bk to '備份路徑'。

三、將備份庫恢復到臨時數據庫中 load database xx_db_temp from '備份路徑\xx_db_bk',並onlie database XX_db

四、將臨時數據庫備份出,並恢復到window數據庫中。(以上步驟主要是因爲跨平臺操作,需要庫是靜態的)

五:依次執行以下語句:

use master

dbcc fix_text(spt_jtext)
dbcc checkdb("xx_database")(此步需要很長時間),有錯誤對話框可以無視,或者根據我的經驗可以找到某張表重建約束索引。
dbcc checkalloc
sp_flushstats
use xx_database

sp_post_xpload(此步需要很長時間)

其實,經過以上

六、備份完的數據庫,最大的問題是,很多大數據量表因爲索引等破壞打不開。是sysstatistics表造成的原因。

跑以下存儲過程:

 

create procedure appuser.stateDelete
/* [ (@param_name datatype [= default] [output] ), ... ] */
as
    declare cur_ins CURSOR for 
    select sysobjects.name from sysobjects where name like '%' and type='U'
    declare @tableName varchar(200)
    declare @sql varchar(255)
begin
    open cur_ins
    fetch cur_ins into @tableName
    while @@sqlstatus=0
        begin
	set @sql = 'DELETE 
FROM sysstatistics WHERE id IN
(SELECT id FROM sysobjects WHERE name = ' + char(39) +@tableName + char(39) +') go'
              print@sql

        fetch cur_ins into @tableName
        end
    close cur_ins
end

 

建立並執行如上存儲過程,將打印出來的sql拷貝下來,執行一遍。

 

 

create procedure stateUpdate
/* [ (@param_name datatype [= default] [output] ), ... ] */
as
    declare cur_ins CURSOR for 
    select sysobjects.name from sysobjects where name like '%' and type='U'
    declare @tableName varchar(200)
    declare @sql varchar(255)
begin
    open cur_ins
    fetch cur_ins into @tableName
    while @@sqlstatus=0
        begin
	set @sql = 'update statistics  appuser.' + @tableName
              EXEC @sql

        fetch cur_ins into @tableName
        end
    close cur_ins
end

建立並執行如上存儲過程,將打印出來的sql拷貝下來,執行一遍。


 

然後

發佈了52 篇原創文章 · 獲贊 15 · 訪問量 36萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章