oracle中表進行還原,並且不覆蓋表中的新增資料,也就是老資料進行覆蓋,新增資料保留不動

2022-10-01 11:40:19 字數 5602 閱讀 7533

1樓:

如果你開啟了flashback,並且回滾段保留時間足夠,預設是一天,可以通過閃回查詢下你執行update之前的表資訊。如select * from king as of timestamp sysdate-5/1440;檢視king這張表五分鐘前的資料。

如果可以查詢到,你可以考慮利用閃回查詢得出的資訊重建表,

create table wang as select * from king as of timestamp sysdate-5/1440;

只是這重建的表不具備原來的一些索引約束。

當然,如果你滿足了flashback條件,就不必重建表,直接閃回這張表即可。

如果你沒有開啟flashback的話,只能考慮不完全恢復了,利用歸檔和備份恢復到你update之前的資料。但這也導致之後的資料不復存在。

2樓:匿名使用者

這個很簡單 還原一個資料庫 然後更新過來就可以了 你也只能用這個方法 因為你沒有備份日誌

以後你更新單表的話 可以把表備份 會省很多事的

create table tbnamebak as select * from tbname

怎麼能還原oracle在某個時間點的表資料,資料庫是oracle 10g,操作是新增,但是資料找不到想把資料刪除掉 10

3樓:匿名使用者

使用閃回,flashback

4樓:紅楓葉隨風

oracle太強大了,太博大精深了, 頂一個

oracle將一張表的資料複製到另一張表中並追加資料

5樓:匿名使用者

你好:你的問題得分類,樓上說了,欄位和型別都一樣的情況,還有要是不一樣的時候也是有辦法的

insert into tab2(id,num) select id, num, from tab1 where id>12;

如果是全部複製的話 ,這個where 條件可以省略。

其實你簡單的而理解後面的select是一個view或者是一箇中間表都ok;

只要你知道他們的欄位什麼的設定都一樣就完全可以insert 。條件是他們的欄位必須對應

6樓:任好慕

首先看兩張表的表結構是不是一樣的。關鍵看欄位名 ,欄位的資料型別,欄位的 長度。

還要看目標表的約束,如果有唯一約束,要剃重。

sql很簡單:insert into 目標表 select * from 源表

7樓:匿名使用者

這個問題很簡單!insertintotab2(id,num,pnum,time)

selectid,

num,

pnum,

to_date('2012-07-1115:56:11','yyyy-mm-ddhh24:mi:ss')

fromtab1

wherepnum='1234567890'

8樓:匿名使用者

insert into b (select * from a)

oracle中,如何在一張表插入資料,使得插入資料的某些欄位為其他表中的資料

9樓:

最直接的:

insert into tablea (col_1,col_2,.....)

select col3,col4....

from tableb

where ......;

如果是插入一行記錄,在values裡面使用單行子查詢

insert into tablea (col_1,col_2,.....)

values (v1,(select col1 from tableb where .....),.....);

如果tablea裡面已經有一些資料,希望可以根據tablea中的現有資料從tableb中將相關資料更新進來。

可以與tableb進行關聯,使用關聯子查詢,可以一次更新多行

update tablea set (col_1,col_2......)=(select col_3,col_4...... from tableb where tableb.

col_b=tablea.col_a)

oracle的一個資料表被刪除,如何恢復資料,以及查詢是誰進行了操作 10

10樓:

不知道的oracle資料表是drop 掉是還是其他,如果是drop可以通過如下恢復:

1. select object_name,original_name,partition_name,type,ts_name,createtime,droptime from recyclebin;

2. flashback table tab_test to before drop;

如果是刪除資料的可以通過scn來恢復。

11樓:匿名使用者

如果是10g,可以從oracle**站裡恢復。10g以下的只能從備份裡恢復了。

你可以從$oracle_home/network/log/listener.log裡可以找到誰登入過資料庫。

oracle如何備份單表並在新資料庫恢復? 10

12樓:折柳成萌

oracle10g資料庫中,資料庫檔案的備份與恢復可以有很多的方式來實現,這裡介紹一種基於使用者管理的備份與恢復。

基於使用者管理的備份是指使用os命令來備份資料庫物理檔案。

sql中,如何查詢存在一個表而不在另一個表中的資料記錄 20

13樓:匿名使用者

首先,在sql中(以sql server為例),查詢存在一個表而不在另一個表中的資料記錄的方法有很多,介紹其中4種:

1、方法一(僅適用單個欄位):使用 not in ,比較容易理解,缺點是效率低

如:select a.id from a where a.id not in (select id from b);

2、方法二(適用多個欄位匹配):使用 left join...on... , "b.id isnull" 表示左連線之後在b.id 欄位為 null的記錄。

如:select a.id from a left join b on a.id=b.id where b.id is null ;

3、方法三(適用多個欄位匹配)

如:select * from b where (select count(1) as num from a where a.id = b.id) = 0;

4、方法四(適用多個欄位匹配)

如:select * from a where not exists(select 1 from b where a.id=b.id)

接著,我們來分析你的sql語句為什麼返回資料不準確的原因。

從你的sql基礎語句來看,你使用了方法一和方法四這兩種,兩種語法本身都是正確的,但是卻沒有達到預期的效果,初步分析,問題可能出在gsdj和swdj這兩張表的qymc欄位的判斷比較上。

舉個例子:'企業名稱'和'企業名稱  '這兩個字串看似相同,實際卻並不相同,因為第二個「企業名稱 」的後面跟了一個空格字元。就因為這個空格字元導致這個"'企業名稱'='企業名稱 '"等式不成立。

考慮到你qymc這個欄位的型別是字元型,建議你在原有sql基礎上做一個微調如下:

select * from gsdj  gs where not exists (select * from swdj sw where rtrim(ltrim(sw.qymc )) )=rtrim(ltrim(gs.qymc )));

其中ltrim()可以去除左側空格,rtrim()可以去除右側的空格,也就是說我們是對去除空格後的企業名稱進行比較,排除了空格的干擾。

擴充套件資料:

在sql中,對於字元型文字資料,經常需要用到去空格的操作,對oracle資料來說可以通過trim()函式來簡單實現,而sql server中並沒有trim()函式,只有ltrim()和rtrim()兩個函式。

sql 中使用ltrim()去除左邊空格 ,rtrim()去除右邊空格 ,沒有同時去除左右空格的函式,要去除所有空格可以用replace(字串,' ',''),將字串裡的空格替換為空。

例:去除空格函式

declare @temp char(50)

set @temp = ' hello sql '

print ltrim(@temp)     --去除左邊空格

print rtrim(@temp)     --去除右邊空格

print replace(@temp,' ','') --去除字串裡所有空格

print @temp

>> 輸出結果

hello sql

hello sql

hellosql

hello sql

14樓:妗妗歘歘

我有兩張表如何查詢在一個表姑在另一個表中的資料

15樓:煙染暖陽

select * from swdj where qymc not in (select qymc from gsdj)

16樓:匿名使用者

select * from gsdj t1 where not exists (select * from swdj where qymc=t1.qymc )

17樓:匿名使用者

select * from gsdj gsdj where gsdj.qymc not in (select swdj.qymc from swdj swdj) 或者

select * from gsdj gs where not exists (select * from swdj sw where sw.qymc=gs.qymc )

試試加上表別名

18樓:丶我是週週

select * from gsdj where gsdj.qymc =swdj.qymc and gsdj.

qymc not in (select swdj.qymc from swdj )這兩個表之間必須要有一個相連線的列

19樓:匿名使用者

select * from gsdj where not exists (select * from swdj where gsdj.qymc=swdj.qymc)

20樓:鎖映僪鶴騫

只需判斷一下即可,根據你的題目意思應該是a表的id和b表的id相關聯。

select *, case when (select count(*) from b where id = a.id)>0 then 1 else 0 end as flag from a如果你是想a表和b表的欄位和id這兩列都一樣,才將flag顯示為1的話,用下面的查詢:

select *, case when (select count(*) from b where id = a.id and 欄位 = a.欄位)>0 then 1 else 0 end as flag from a

在oracle資料庫中表空間和資料庫什麼區別

ms sql使用者登入就能建立資料庫的意思是她本身就有一個資料庫,你連的是預設資料庫。oracle安裝的時候也會問你是否在安裝資料庫軟體的時候建立一個例項,如果你同意建立例項那麼你連線進來的時候也會有個預設的資料庫給你去建立表之類的東西。所以根本上這些都是差不多,都是因為他們裡面有例項在執行了。再說...

oracle如何將使用者與表空間進行關聯

先建立表空間,然後建立使用者的時候,指定這個表空間!或者 切換使用者預設表空間 alter user username default tablespace tbsname 1.建立使用者的時候定義預設表空間 sql create user username identified by passwo...

u盤中毒後進行碎片處理如何還原檔案

1全部點開始,執行,輸入cmd.然後如果你的 在g盤的話,就輸入 g 回車 g後冒號千萬不要少 然後輸入attrib s h s d 回車,關閉cmd,就行了,如果不行,再重複.注意上面的字元之間有空格,你最好把上面的複製到cmd去.這時再次進入該移動裝置,如果直接能在丟失檔案的原來位置找到最好,如...