<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        ArcSDEforOracle怎么恢復誤刪除的要素類和要素

        來源:懂視網 責編:小采 時間:2020-11-09 07:18:00
        文檔

        ArcSDEforOracle怎么恢復誤刪除的要素類和要素

        ArcSDEforOracle怎么恢復誤刪除的要素類和要素:其實并不希望用戶都來瀏覽這篇文章,如果是自己學習還好,如果是出現問題了,可能就比較麻煩了。 經常會有用戶咨詢我們,我不小心刪除了ArcSDE里面的相關表,或者刪除了相關記錄,導致ArcSDE服務、連接、編輯等出現的相關問題,先不說這些問題怎么解決, 對
        推薦度:
        導讀ArcSDEforOracle怎么恢復誤刪除的要素類和要素:其實并不希望用戶都來瀏覽這篇文章,如果是自己學習還好,如果是出現問題了,可能就比較麻煩了。 經常會有用戶咨詢我們,我不小心刪除了ArcSDE里面的相關表,或者刪除了相關記錄,導致ArcSDE服務、連接、編輯等出現的相關問題,先不說這些問題怎么解決, 對

        其實并不希望用戶都來瀏覽這篇文章,如果是自己學習還好,如果是出現問題了,可能就比較麻煩了。 經常會有用戶咨詢我們,我不小心刪除了ArcSDE里面的相關表,或者刪除了相關記錄,導致ArcSDE服務、連接、編輯等出現的相關問題,先不說這些問題怎么解決, 對

        其實并不希望用戶都來瀏覽這篇文章,如果是自己學習還好,如果是出現問題了,可能就比較麻煩了。


        經常會有用戶咨詢我們,我不小心刪除了ArcSDE里面的相關表,或者刪除了相關記錄,導致ArcSDE服務、連接、編輯等出現的相關問題,先不說這些問題怎么解決,對出現這種現象就應該堅決杜絕,老有許多用戶屬于那種不知道事大事小,什么都敢親身實踐,雖然他們知道“實踐是檢驗真理的唯一途徑”,但是如果你不了解數據庫或者ArcSDE的相關原理,你就自認為的操作,出現問題負責任的肯定是自己。之所以說這些還是希望用戶不要擅自操作,數據庫一旦掛了,前端再高效再炫的客戶端也是白搭啊。


        雖然這篇文章的題目是恢復ArcSDE的要素類和要素,但是我并沒有真正的在ArcSDE里面做例子,或者但是我以oracle的刪除表和刪除記錄為例作測試,至于ArcSDE,那么就需要用戶了解ArcSDE的表結構之后,做相關的解決了,我也會給用戶進行相關的說明。


        刪除記錄的恢復

        測試場景:我刪除sde用戶下table_locks里面的若干記錄,然后恢復


        操作步驟:

        需要用戶以管理員身份登錄

        1:查看table_locks,然后刪除,提交

        SQL> select * from sde.table_locks;
        
         SDE_ID REGISTRATION_ID LO
        ---------- --------------- --
         2031 179 S
         2031 192 S
         2010 179 S
         2010 192 S
        
        
        SQL> delete from sde.table_locks where sde_id=2010;
        
        已刪除2行。
        
        SQL> commit;
        
        提交完成。
        
        SQL> select * from sde.table_locks;
        
         SDE_ID REGISTRATION_ID LO
        ---------- --------------- --
         2031 179 S
         2031 192 S
        相關原理:SCN

        SCN: System Change Number
        SCN是順序遞增的一個數字,在Oracle 中用來標識數據庫的每一次改動,及其先后順序。SCN的最大值是0xffff.ffffffff。

        Oracle對SCN的管理(RAC環境就由DBA來管理吧)
        單節點的instance中,SCN值存在SGA區,由system commit number latch保護。任何進程要得到當前的SCN值,都要先得到這個latch。


        SCN的機制
        數據庫運行時的SCN
        我們先看下oracle事務中的數據變化是如何寫入數據文件的:
        1、 事務開始;
        2、 在buffer cache中找到需要的數據塊,如果沒有找到,則從數據文件中載入buffer cache中;
        3、 事務修改buffer cache的數據塊,該數據被標識為“臟數據”,并被寫入log buffer中;
        4、 事務提交,LGWR進程將log buffer中的“臟數據”寫入redo log file中;
        5、 當發生checkpoint,CKPT進程更新所有數據文件的文件頭中的信息,DBWr進程則負責將Buffer Cache中的臟數據寫入到數據文件中。
        Redo log中的high scn和low scn
        Oracle的Redo log會順序紀錄數據庫的各個變化。一組redo log文件寫滿后,會自動切換到下一組redo log文件。則上一組redo log的high scn就是下一組redo log的low scn。在current log中high scn為無窮大。
        可通過查詢v$log_history查看 low scn和 high scn。


        更多了解:

        http://czmmiao.iteye.com/blog/1010267

        http://www.cnblogs.com/daduxiong/archive/2010/08/19/1803764.html

        2:通過SCN的方法來恢復

        --獲得當前的SCN
        SQL> select current_scn from v$database;
        
        CURRENT_SCN
        -----------
         19078853
        
        --select * from sde.table_locks as of scn 19078843;
        --確定刪除的數據是否存在,如果存在,則恢復數據;如果不是,則繼續縮小scn號
        
        SQL> select * from sde.table_locks as of scn 19078830;
        
         SDE_ID REGISTRATION_ID LO
        ---------- --------------- --
         2031 179 S
         2031 192 S
         2010 179 S
         2010 192 S
        
        --將table_locks閃回到前面的scn
        SQL> flashback table sde.table_locks to scn 19078830;
        flashback table sde.table_locks to scn 19078830
         *
        第 1 行出現錯誤:
        ORA-08189: cannot flashback the table because row movement is not enabled
        
        --這個命令的作用是,允許Oracle 修改分配給行的rowid。在Oracle 中,插入一行時就會為它分配一個rowid,而且這一行永遠擁有這個rowid。閃回表處理會對EMP 完成DELETE,并且重新插入行,這樣就會為這些行分配一個新的rowid。要支持閃回就必須允許Oracle 執行這個操作
        SQL> alter table sde.table_locks enable row movement;
        
        表已更改。
        
        
        
        SQL> flashback table sde.table_locks to scn 19078830;
        
        閃回完成。
        
        SQL> select * from sde.table_locks;
        
         SDE_ID REGISTRATION_ID LO
        ---------- --------------- --
         2031 179 S
         2031 192 S
         2010 179 S
         2010 192 S
        

        3:使用時間恢復刪除數據

        以下信息僅供參考

        1、查詢當前系統時間
         
            select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
         
          2、查詢刪除數據的時間點的數據
         
            select * from 表名 as of timestamp to_timestamp('2013-05-29 15:29:00','yyyy-mm-dd hh24:mi:ss'); (如果不是,則繼續縮小范圍)
         
          3、恢復刪除且已提交的數據
         
            flashback table 表名 to timestamp to_timestamp('2013-05-29 15:29:00','yyyy-mm-dd hh24:mi:ss');


        ArcSDE的建議:

        我們上面演示的只針對單個表的記錄刪除的恢復,那么對ArcSDE來說

        1:如果是非版本數據的編輯,就可以完全結合上面的例子直接恢復

        2:如果是版本編輯的話,這個就需要用戶去了解ArcSDE的版本表了。

        至少用戶需要對:基表、增量表、版本表(States、State_lineages、Versions等)進行閃回,而且如果是多用戶并發編輯的話,狀態表里面的數據就不僅僅是一個版本的信息,所以這個就比較麻煩。


        可能有用戶來說,其實版本編輯,誤刪除了,大不了重新編輯,或者不要這個版本的信息,反正我的default版本的數據并沒有變化,恭喜你,如果你想到這一點,說明你對版本原理比較了解。


        刪除表的恢復

        測試場景:drop一個數據庫中的表對象,然后進行恢復


        操作步驟:

        對誤刪的表,只要沒有使用PURGE永久刪除選項,那么從flash back區恢復回來希望是挺大的。

        1:刪除一個表對象

        SQL> select count(*) from test.a;
        
         COUNT(*)
        ----------
         33769
        
        SQL> drop table test.a;
        
        表已刪除。
        
        SQL> commit;
        
        提交完成。
        
        SQL> select count(*) from test.a;
        select count(*) from test.a
         *
        第 1 行出現錯誤:
        ORA-00942: ???????
        2:使用閃回方法來恢復

        原理:在Oracle數據庫,用戶刪除的對象會存儲在一個類似回收站的表里面,這些信息會在這個表里面進行存儲,但是如果用戶的刪除操作比較多,這個表里面的信息會類似非歸檔日志,重新寫入新的信息,如果那樣的話就不好恢復了,所以出現問題,趕緊解決才是正道。

        用戶需要連接test用戶,因為刪除的表a屬于該用戶,查看回收表信息

        SQL> select original_name,operation,type from recyclebin;
        
        ORIGINAL_NAME OPERATION TYPE
        ---------------------------------------------------------------- ------------------ --------------
        D138 DROP TABLE
        D138_IDX1 DROP INDEX
        D138_PK DROP INDEX
        KEYSET_1247 DROP TABLE
        KEYSET_1300 DROP TABLE
        KEYSET_1301 DROP TABLE
        KEYSET_1316 DROP TABLE
        ARCGIS_SECURITY_USER_ROLE DROP TABLE
        SYS_C0018056 DROP INDEX
        ARCGIS_SECURITY_ROLES DROP TABLE
        SYS_C0018067 DROP INDEX
        
        ORIGINAL_NAME OPERATION TYPE
        ---------------------------------------------------------------- ------------------ --------------
        ARCGIS_SECURITY_USER_ROLE DROP TABLE
        SYS_C0018070 DROP INDEX
        ARCGIS_SECURITY_ROLES DROP TABLE
        SYS_C0018074 DROP INDEX
        ARCGIS_SECURITY_USER_ROLE DROP TABLE
        SYS_C0018077 DROP INDEX
        A DROP TABLE
        BIN$3fw3ulkOXtPgQKjApdwLHg==$0 DROP INDEX
        SYS_LOB0000094656C00018$$ DROP LOB
        SYS_IL0000094656C00018$$ DROP LOB INDEX
        
        我們可以看到有A名稱的表,然后進行恢復即可
        SQL> flashback table test.a to before drop;
        
        閃回完成。
        
        SQL> select count(*) from test.a;
        
         COUNT(*)
        ----------
         33769


        但注意oracle( Release 10.2.0.1.0)回收站不支持系統表空間,如果刪除的這個在系統表空間,這個表是不能閃回的


        對表數據更新一段時間后,只有在初始化參數UNDO_RETENTION設置的時間內才可以查詢到表flashback_transaction_query的數據更改記錄。而且,只有初始化參數UNDO_MANAGEMENT設置為AUTO后才能使用閃回查詢。


        ArcSDE的建議:對ArcSDE來說也是一樣

        1:如果沒有注冊版本,如果使用ArcGIS客戶端對要素類進行刪除,我們可以看到數據庫里面有

        SQL> select original_name,operation,type from recyclebin where droptime='2013-05-31:12:25:41';
        
        ORIGINAL_NAME OPERATION TYPE
        ---------------------------------------------------------------- ------------------ --------------
        A DROP TABLE
        SYS_LOB0000094656C00018$$ DROP LOB
        SYS_IL0000094656C00018$$ DROP LOB INDEX
        BIN$3fxefjQC5+rgQKjApdwUEQ==$2 DROP INDEX
        所以說,使用ArcMap刪除不僅僅是要素類,還包含相關的索引對象還有其他,所以使用上面的方法可以只恢復同名表A,對ArcGIS10.1是沒有問題的,完全可以通過桌面進行注冊即可,對10版本之前的可能就有點小問題了,但是最主要的同名表恢復過來,我們可以通過sdelayer -o register方法注冊也可以。


        2:如果是注冊版本

        還是老樣子,基表、增量表,ArcSDE的其他表的管理信息需要恢復記錄(比如sde用戶下table_regisertry會注冊SDE庫里面存儲的要素類),那么使用數據庫的方法閃回刪除的要素類的同名表,類似這些注冊信息的表的記錄也需要進行操作。

        也就是說,需要用戶考慮基本和增量表的回復,其他的可以通過sdetable -o register將數據注冊到ArcSDE中,通過Register as geodatabase將數據注冊到Geodatabase中。


        以上方法都是根據數據庫的方式對ArcSDE的誤操作進行一些簡單的補救措施,僅供參考!


        -------------------------------------------------------------------------------------------------------

        -------------------------------------------------------------------------------------------------------


        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        ArcSDEforOracle怎么恢復誤刪除的要素類和要素

        ArcSDEforOracle怎么恢復誤刪除的要素類和要素:其實并不希望用戶都來瀏覽這篇文章,如果是自己學習還好,如果是出現問題了,可能就比較麻煩了。 經常會有用戶咨詢我們,我不小心刪除了ArcSDE里面的相關表,或者刪除了相關記錄,導致ArcSDE服務、連接、編輯等出現的相關問題,先不說這些問題怎么解決, 對
        推薦度:
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 日韩视频在线免费| 亚洲白色白色永久观看| 亚洲国产成人久久精品99 | 国产一级理论免费版| 又黄又爽的视频免费看| 国产成人精品亚洲精品| 久久久亚洲欧洲日产国码二区| 亚洲国产精品久久久久秋霞影院| 亚洲第一精品福利| 亚洲日韩AV无码一区二区三区人| 高潮毛片无遮挡高清免费| 日韩视频在线观看免费| 男女超爽刺激视频免费播放| 亚洲国产综合精品中文字幕| 亚洲影院在线观看| 久久国产乱子免费精品| 亚洲成av人在线视| 毛片亚洲AV无码精品国产午夜| 秋霞人成在线观看免费视频| 国产AV无码专区亚洲AV漫画| 亚洲日本乱码卡2卡3卡新区| 伊人久久大香线蕉免费视频| 成人啪精品视频免费网站| 亚洲精品高清国产一线久久| 亚洲熟妇无码八V在线播放| 无码国产精品一区二区免费模式| 国产精品成人四虎免费视频| 久久久亚洲裙底偷窥综合| 大片免费观看92在线视频线视频| 日本黄网站动漫视频免费| 丝袜熟女国偷自产中文字幕亚洲| 久久国产精品免费| 日本高清免费aaaaa大片视频| 亚洲av永久无码精品秋霞电影秋 | 亚洲综合图片小说区热久久| 亚洲一区二区三区免费观看| 国产精品亚洲自在线播放页码| 国产一级a毛一级a看免费视频 | 免费无码av片在线观看 | 久草免费福利视频| 国产亚洲精品免费|