2014年8月24日 星期日

10年學號重複問題如何修正?

1轉學生轉入學號與10年前重複,無法輸入戶口資料並出現錯誤
2出現下列訊息
該學號已經有人使用
程式目前執行位置/var/www/html/sf3/modules/stud_move/stud_move.php的第111行

我們學校註冊組長說 101 年的新生資料會覆蓋 91 年的舊生資料,求救之後知道祇要復原舊資料 & 新增一個主鍵值即可。

方法如下:

mysql -u root -p
mysql>use sfs3;
mysql>show create table stud_base;
mysql>ALTER TABLE stud_base DROP PRIMARY KEY;
mysql>ALTER TABLE stud_base ADD PRIMARY KEY (`stud_id`, `stud_study_year`);

有遇到相同問題的組長請將資料表更新一下吧!

詳細說明請見:
解決學務系統學號重覆問題:修改資料表主鍵值

http://www.sfs.project.edu.tw/modules ... t_id=10996#forumpost10996

這問題在2007年4月就被注意到了
所以在2007/4/12就有發布一個系統自動更新
會有十年前資料被"覆蓋"的情形
都是學校的學務系統主機該更新失敗所致!

其實~~~狀況並不是被"覆蓋" 而是被刪
為何會被刪?
因為匯入新生資料使用了MySQL的replace指令
該指令會先把符合primary、unique索引的紀錄列先刪除
再新增新的紀錄!

由於這些學校的primary key並未被正確更新為 stud_id + stud_study_year
僅有stud_id
所以~~~國中101學年度匯入時 便會將91學年度的相同學號紀錄刪除!

如果其他資料尚未被建立
倒是可以用資料庫全部復原的方式處理
怕就是~~~現在已經開學 若學期初相關設定都已完成
會變成~~~~前人疏誤 後人承擔的情形

要解決這個兩難問題
步驟是~~~
(1).先把索引修正好 ( 利用SQL 或刪 data/upgrade/include/2007-4-12.txt 都可 )
(2).將備份的資料庫改名 移入mysql資料庫目錄內 並注意權限
(3).連入MySQL 執行 insert into `sfs3`.`stud_base` (select * from `aaa`.`stud_base` where stud_study_year=91 and stud_id<1xxx)

#####sttud_study_year=91#####學生入學年=91年######
###### from `aaa`.`stud_base`#######從資料庫aaa資料表stud_base
#######stud_id<1xxx############學號<10356-10400



執行
mysql> insert into `sfs3`.`stud_base` (select * from `aaa`.`stud_base` where stud_study_year=92 and stud_id<737);
出現
ERROR 1136 (21S01): Column count doesn't match value count at row 1


範例三:將範例一的檔案解壓縮
[root@www tmp]# gzip -d man.config.gz
# 不要使用 gunzip 這個指令,不好背!使用 gzip -d 來進行解壓縮!
# 與 gzip 相反, gzip -d 會將原本的 .gz 刪除,產生原本的 man.config 檔案。


新增欄位
ALTER TABLE  stud_base ADD `edu_key` varchar(65) DEFAULT NULL;

ALTER TABLE  stud_base ADD `ldap_password` varchar(60) DEFAULT NULL;



顯示90年入學生
select * from `sfs320101103`.`stud_base` where stud_study_year=88 ;

0 rows in set (0.02 sec)
select * from `sfs3`.`stud_base` where stud_study_year=88 ;


0 rows in set (0.02 sec)



select * from `sfs320101103`.`stud_base` where stud_study_year=89 ;
1 rows in set (0.02 sec)
select * from `sfs3`.`stud_base` where stud_study_year=89 ;
1 rows in set (0.02 sec)

select * from `sfs320101103`.`stud_base` where stud_study_year=90 ;
357 rows in set (0.02 sec)


select * from `sfs3`.`stud_base` where stud_study_year=90 ;
356 rows in set (0.02 sec)

select * from `sfs320101103`.`stud_base` where stud_study_year=91 ;
351 rows in set (0.02 sec)
select * from `sfs3`.`stud_base` where stud_study_year=91 ;
33 rows in set (0.02 sec)
351

select * from `sfs320101103`.`stud_base` where stud_study_year=92 ;
351 rows in set (0.02 sec)
select * from `sfs3`.`stud_base` where stud_study_year=92 ;
340 rows in set (0.02 sec)

select * from `sfs320101103`.`stud_base` where stud_study_year=93 ;
385 rows in set (0.02 sec)
select * from `sfs3`.`stud_base` where stud_study_year=93 ;
382 rows in set (0.02 sec)

select * from `sfs320101103`.`stud_base` where stud_study_year=94 ;
390 rows in set (0.02 sec)
select * from `sfs3`.`stud_base` where stud_study_year=94 ;
390 rows in set (0.02 sec)


2014年8月17日 星期日

使用Thick Eager Zeroed最快

Thick Lazy/Eager、Thin 虛擬磁碟效能評比

使用Thick  Eager  Zeroed最快

引述一篇關於 ESXi 下的硬碟模式的比較,參考看看,王偉任先生的資料! 不過我的做法還是只要有足夠的空間,就用 Thick 吧! 因為之前被宜佳的系統嚇到了,用 Thin 僅是讀全部學生的名單就花了近30秒,用 Thick 後,僅2秒就讀完了! 目前的二代校務行政還是用 Thick 的方式處理,上學期經過考驗,一切正常!

資料來源:
http://www.weithenn.org/2014/05/thick-lazy-eager-thin-performance.html

2014年8月12日 星期二

vmware复制centos虚拟机碰到Device eth0 does not seem to be present的问题

因为需要做集群测试,需要多台虚拟机作为测试机。如果每个虚拟机都要安装系统就很麻烦,幸好vmare可以通过复制虚拟机的物理文件直接生成一个新的虚拟机。只是复制的虚拟机网络会失效,重启网络服务器的时候会提示如下错误:
Device eth0 does not seem to be present,delaying initialization.  
网上搜索后才发现原因所在:原来vmware在复制了虚拟机后会自动生成一个新的网卡设备供该虚拟机使用,比如原先的网卡是eth0,复制虚拟机后后就会增加eth1。但是由于没有生成相应的/etc/sysconfig/network-scripts/ifcfg-eth1文件,导致网络连接失败,这个应该是vmware的一个bug。
查看网卡配置文件/etc/udev/rules.d/70-persistent-net.rules,可以看到多出了一个eth1的配置。
vmware复制虚拟机生成新网卡eth1
vmware复制虚拟机生成新网卡eth1
解决办法
编辑网卡配置文件/etc/udev/rules.d/70-persistent-net.rules,将eth0的网卡地址修改成eth1的网卡地址,而后删除eth1这一行。
编辑网卡IP地址配置文件/etc/sysconfig/network-scripts/ifcfg-eth0,修改网卡物理地址HWADDR为上面eth0的网卡地址。
修改完成后重启系统,就能正常启动网络服务了。