2013/12/13

SQL Server 備份還原 - 備份組包含現有的資料庫以外的資料庫備份

今天嘗試做資料庫的移機

做法是從A電腦的資料庫,按右鍵備份(選完整備份)

然後把備份檔複製到B電腦,在B電腦開一個新的資料庫,按右鍵還原

還原的時候遇到了這樣的錯誤訊息:備份組包含現有的資料庫以外的資料庫備份

爬了一下 google 文章

大部分的人是這樣解的:

===以下節錄其中一篇===

1.先執行以下的SQL

USE [master]
GO

restore database #資料庫名稱
from disk = '#備份資料庫檔路徑及檔名'
with
move '資料庫檔案邏輯名稱' to '資料庫mdf檔案所在位置',
move '資料庫記錄檔邏輯名稱' to '資料庫記錄檔ldf檔案所在位置',
NoRecovery,
Replace
go

執行完畢資料庫會呈現「還原中」

2.到要還原的資料庫上按右鍵→[工作]→[還原]→[資料庫]→[來源裝置]→瀏覽備份檔→勾選還原→確定
如此就完工了

===以上節錄其中一篇===

我看了覺得很怪 認為這個做法很不正常

於是繼續爬 Google 發現到另一個解法

===以下節錄另一個解===

SQL SERVER 資料庫備份:

  => 在資料庫上點右鍵 -> 工作 -> 備份 來建立備份。

 (第一次建完整,第二次以後就建差異備份)

 (一陣子可以重新再建立一次完整的備份)

 若出現“無法開啟備份裝置 'C:\123'。作業系統錯誤 5(存取被拒。)。"”

 -> 檢查SQL SERVER 組態管理員,SQL SERVER 的登入身份是否為LOCALSYSTEM

還原:

  => 在資料庫上右鍵 -> 工作 -> 還原 -> 資料庫

 若出現“備份組包含現有的xx資料庫以外的資料庫備份”時,

 在選項,勾選 覆寫現有的資料庫

===以上節錄另一個解===

這個看起來就很合理

但很多人搜尋到第一個解之後就寫一篇文紀念他

結果造成第一篇文的解法被發揚光大

所以我寫一篇文章 希望大家以後遇到這個問題可以選用第二個解

2013/12/6

閱讀 jquery 原始碼的筆記 - Array.slice 的妙用

在 jquery v1.10.2 裡面的第 232行寫到 :

toArray: function() {
return core_slice.call( this );
}

他的功能是把 jquery 物件從物件 {} 轉換成陣列 []
在這裡的 this 是個 jquery 物件
而 core_slice 是宣告在第 55 行 :

core_deletedIds = [],
core_slice = core_deletedIds.slice,

以上來自第48行和第55行
我們知道他宣告了一個變數  core_slice 把陣列的 slice 函數拿來用
 slice 能作什麼事呢?

從這裡我們知道執行

var fruits = ["Banana", "Orange", "Lemon", "Apple", "Mango"];
var citrus = fruits.slice(1,3);

會得到

citrus = ["Orange","Lemon"];

的結果

根據測試我發現 core_slice.call(A) 的運作模式是先判斷 A 有無 length 屬性
如果有就 new 一個新的陣列 然後把對應的元素丟進新的陣列裡,如果沒有傳入參數的話就是全丟進去
嘗試實作看看 :

function slice(A, start, end) {
    var output = [];
    if (start == undefined) start = 0;
    if (end == undefined) end = A.length;
    if (start < 0) start = A.length + start;
    if (end < 0) end = A.length + end;
    for (var i = start; i < end; i++) {
        output.push(A[i]);
    }
    return output;

}

試用起來跟內建的一樣
可以測試以下程式碼

var o = {};
o.length = 5;
o[0] = 1;
slice(o);
[].slice.call(o);

閱讀 jquery 原始碼的筆記 - && 和 || 運算子的妙用


在 jquery v1.10.2 裡面的第 153行寫到:

context && context.nodeType ? context.ownerDocument || context : document,

它的實際意義是
如果 context 不存在 或者 context 沒有 nodeType 屬性時,傳回 document
如果 context 存在,而且 context 具有 nodeType 屬性時,嘗試傳回 context.ownerDocument ,如果 context.ownerDocument 不存在就改成傳回 context

為什麼可以這樣寫 ?

運算子 && 的功能

執行 A && B 假如A可以轉換為 false 就 return A 否則 return B

試著實作 function and(A,B){ if(Boolean(A) === false) return A; return B;}

結果發現 A && B 跟 and(A, B) 的運作結果完全相同

運算子 || 的功能

執行 A || B 假如 A 可以轉換為 true 就 return A 否則 return B

試著實作 function or(A,B){ if(Boolean(A) === true) return A; return B;}

結果發現 A || B 跟 or(A, B) 的運作結果完全相同



附上可以轉換為 false 的物件列表 (從這裡找到的)
0
-0
null
""
false
undefined
NaN
除了這些東西之外 丟進 Boolean 都會傳回 true


2013/11/28

爐石戰記的配卡參數-先手卡與後手卡的比例

爐石戰記遊戲中玩家可以做兩件事
1. 配卡
2. 對戰
本文講的是關於配卡時的觀念

生物卡帶有各種能力,就觸發時機可分為上場時觸發(戰吼),存活在場上時生效,死亡之聲等時機不一一列舉。

就發動效果可分為聖盾、謿諷、衝鋒、抽牌等效果不一一列舉。

本文針對卡片效果,將效果大致分為三類:
1. 觸發能力不需要友軍在場,也不需要敵軍在場
例如:
召喚生物 → 機械幼龍技師(只有我跟咬咬)
抽牌 → 見習工程師
嘲諷 → 森金禦盾大師(卡死丁狗)

2. 觸發能力需要友軍在場
例如:
友軍死亡抽牌 → 教派宗師
友軍增加能力 → 破碎之日教士、阿古斯防衛者、火舌圖騰

3. 觸發能力需要敵軍在場
例如:
心控 → 精神控制技師
摧毀 → 奔竄的科多獸
沉默 → 破法者(也可以放友軍)

第一種卡是先手卡,任何時間點都可以打出卡,這種卡通常不太能改變戰況。

第二、三種卡則是後手卡,遊戲肯定會把後手卡的效果做得比先手卡強,而當後手卡的效果越強,觸發條件越嚴格。(酷拉皮卡:我的能力只能用在幻影旅團上)

我們可以對第二、三種卡作細分:第二種是順風卡、第三種是逆風卡,第二種卡適合順風時擴大優勢,第三種卡適合逆風時逆轉戰況

有些後手卡可以直接打出來,不一定需要發動,但有些卡必須發動才可以出牌 (黑鐵矮人)。

若牌組全放後手卡,就很容易卡手牌(除非你願意放棄觸發效果)。若全放先手卡,則難以逆轉戰況。

所以,一個牌組內,先手卡和後手卡的比例是需要考量的參數之一
當然,順風卡跟逆風卡的比例也是需要考量的參數之一

2013/11/11

勇敢去做

一件做了可能會後悔的事情,需要鼓起勇氣才能做到

選擇做,可能會後悔

選擇不做,就變成遺憾

那麼做與不做該如何選擇

我們考慮後悔和遺憾的影響

通常遺憾是越老越遺憾,而後悔是越老越不後悔

離事情的時間點越遠,我們會覺得越遺憾

因為時間越長,可能造成的改變越大

但做了某件事後悔,隨著時間越久

做與不做好像就沒什麼差別了

因為時間越久,那件事的實際影響力就越小

所以我選擇做,你呢



以上文章使用的詞彙定義可能與一般字典不同

後悔:做了某件事情,如果可以重來的話會選擇不做
遺憾:沒做某件事情,如果可以重來的話會選擇做