資料遷移時在資料庫遇到的坑爹問題

2021-09-23 18:19:23 字數 3481 閱讀 7936

資料庫遇到的坑爹問題

資料庫資料遷移,涉及mysql、oracle資料庫;

問題如下:

1,oracle中不識別』』;空串必須在引號中間加空格』 『;另外不等於空串可寫成:!=』 』 或者 <>『 』;

2,oracle中select複雜的查詢語句帶的, 必須加表的別名,否則會報錯;很坑的,明明只有一張表,只是對查詢展示字段進行拓展新增兩個欄位就會報錯;

例:select * ,『0』 newstatus from usertable; 錯;

select t., 『0』 newstatus from usertable t ; 對;

3,oracle中查詢排序語句 order by 後面不能連續寫兩個字段【不知道是我寫的不對還是不知道怎麼寫,但是在mysql中卻完全ok,無語了!】;

4,oracle中建表語句加索引,不同表的索引欄位也不能相同,否則會報衝突;常出現在建立備份表,或臨時備份表中;

5,備份資料drop掉表之前,最好寫乙份備份表語句(表名隨時間動態拼接),以免造成資料丟失;

begin

execute immediate 『create table city_』||to_char(sysdate, 『yyyymmddhhmmss』)||』 as select * from wb_user』;

end;

6,mysql中再drop或者清除表資料之前,最好先備份乙份表資料,建立乙個隨時間動態生成表名的建表語句;

範例:set @pddl = concat(『select * from user』, @var);

prepare stmt from @pddl;/定義預處理語句/

execute stmt;/執行預處理語句/

deallocate prepare stmt;/釋放預處理語句/

例項:– 生成表名

set @sql_get_name = concat(「city_」, date_format(now(),』%y%m%d%h%i%s』));

– 建表

set @sql_create_table = concat(

'create table ',@sql_get_name,

「(city_idbigint(30) not null comment 『城市id』,

city_namevarchar(30) not null comment 『城市名稱』,

province_idvarchar(8) not null comment 『省id』,

city_short_namevarchar(20) default null comment 『簡稱』,

order_idbigint(10) default null comment 『排序(從1開始的正整數,null表示不排序,各level互不影響)』,

primary key (city_id)

) engine=innodb default charset=utf-8 comment=『城市表』」);

prepare sql_create_table from @sql_create_table;

execute sql_create_table;

– 插入資料

set @sql_insert_data = concat(

「insert into 「,@sql_get_name,」(select * from city)」);

prepare sql_insert_data from @sql_insert_data;

execute sql_insert_data;

deallocate prepare sql_create_table;/釋放預處理語句/

deallocate prepare sql_insert_data;/釋放預處理語句/

或者寫成函式呼叫:

create procedure temptabledata(

in tablename varchar(1000),

in tablebuild varchar(300000),

in tabledata varchar(1000)

)begin

set @sql_get_name = concat(tablename, date_format(now(),』%y%m%d%h%i%s』));

set @sql_create_table = concat(

'create table ',@sql_get_name,tablebuild);

prepare sql_create_table from @sql_create_table;

execute sql_create_table;

– deallocate prepare sql_create_table;/釋放預處理語句/

set @sql_insert_data = concat(

"insert into ",@sql_get_name,tabledata);

prepare sql_insert_data from @sql_insert_data;

execute sql_insert_data;

– deallocate prepare sql_insert_data;/釋放預處理語句/

end;

call temptabledata(「city_」,"(

city_idbigint(30) not null comment 『城市id』,

city_namevarchar(30) not null comment 『城市名稱』,

province_idvarchar(8) not null comment 『省id』,

city_short_namevarchar(20) default null comment 『簡稱』,

order_idbigint(10) default null comment 『排序(從1開始的正整數,null表示不排序,各level互不影響)』,

primary key (city_id)

) engine=innodb default charset=utf-8 comment=『城市表』","(select * from city)");

!!!這裡的函式temptabledata(v1,v2,v3)不能重複呼叫,只能重寫乙個重寫呼叫,包括begin/end語句;

7,oracle中引用指令碼語句,**現了begin和end操作,要在end;後面轉行加上\ 反斜槓進行提交操作;』

8,orcale中進行資料回滾操作時,會出現部分表無法正常被drop掉。可以先對要執行drop操作的表進行delete或者truncate操作清掉資料,然後進行commit操作,再進行drop操作即可正常;』

以上僅是個人總結,僅供參考!具體以實際操作驗證為準!!

記一次資料庫遷移遇到的坑

因為一開始專案中用的是oracle的資料庫,後來因為一些原因需要換成mysql的。由於oracle中所有庫表 欄位名都是大小不敏感的,所以專案中各種大寫小寫都有人用,但是遷移到mysql上面,他是區分的,然後就把mysql也設定成不區分大小寫了,並且字符集也設定成了utf8 general ci。後...

Oracle資料庫中遇到的坑

最近在幫別人忙寫程式,用的是oracle資料庫,寫一篇文章來說說在oracle中遇到的一些坑 1.pl sql develop的坑 由於在這裡工作環境是內網完全,無奈只能使用pl sql 工具,由於之前都是使用dbvisualizer連線。2.select 查詢的話,其sql視窗預設只顯示前幾行,並...

切換資料庫 如何在資料庫遷移中保證資料一致性?

當乙個系統存在很長一段時間後,經常會使用更新的技術來提高效能 可維護性或新增新特性。其中乙個變化可能會是使用哪個資料庫。這可能是最困難的改變。在遷移過程中,有兩個資料來源,這使得該系統成為乙個分布式系統。在分布式系統中,保持資料一致非常困難,而且很容易出錯。在本文中,我們將探索一種在遷移期間保持資料...