標籤

2021年1月27日 星期三

嘗試在資料庫5 中提取邏輯頁() 失敗。該邏輯頁屬於分配單元xxx而非xxx

症狀:
問題:MS SQL Server 資料庫損毀,需要修復才能維持穩定性和一致性。

原因:
MS SQL Server 資料庫、記錄和應用程式檔案的軟體損毀。

解法:
DBCC 是 Microsoft SQL Server 的原生工具,旨在檢查和修復 Microsoft SQL Server 資料庫。

詳見: https://docs.microsoft.com/en-us/sql/t-sql/database-console-commands/dbcc-checkdb-transact-sql?view=sql-server-ver15

執行 DBCC CHECKDB 的步驟

開啟 SQL Server Management Studio
開啟 查詢視窗
輸入 DBCC CHECKDB [資料庫名稱] (如下圖)
檢查查詢結果底部附近,查看分配和一致性錯誤
如果結果中出現分配和一致性錯誤,資料庫應從備份還原,或使用 DBCC CHECKDB 執行資料庫修復。

使用 DBCC CHECKDB 執行資料庫修復 如下:

REPAIR_REBUILD:以下命令可讓資料庫處於可修復的模式。
複製以下命令,然後貼至輸入正確資料庫名稱的查詢工作階段:

USE Master;
GO

ALTER DATABASE 資料庫名稱
SET SINGLE_USER
WITH ROLLBACK IMMEDIATE;
GO

DBCC CHECKDB (資料庫名稱,REPAIR_REBUILD)
GO

ALTER DATABASE 資料庫名稱
SET MULTI_USER;
Go

REPAIR_ALLOW_DATA_LOSS:以下命令可執行資料庫修復,並可能導致數據遺失,無法完成修復程式。
複製以下命令,然後貼至輸入正確資料庫名稱的查詢工作階段:

USE Master;
GO

ALTER DATABASE 資料庫名稱
SET SINGLE_USER
WITH ROLLBACK IMMEDIATE;
GO

DBCC CHECKDB (資料庫名稱, REPAIR_ALLOW_DATA_LOSS)
GO

ALTER DATABASE 資料庫名稱
SET MULTI_USER;
Go

如果資料庫實體磁碟空間執行不足,以下命令會很有用。
複製以下命令,然後貼至輸入正確資料庫名稱的查詢工作階段:

USE Master;
GO

ALTER DATABASE 資料庫名稱
SET SINGLE_USER
WITH ROLLBACK IMMEDIATE;
GO

DBCC CHECKDB (資料庫名稱, REPAIR_REBUILD)
WITH ESTIMATEONLY;
GO

ALTER DATABASE 資料庫名稱
SET MULTI_USER;
Go

複製以下命令,然後貼至輸入正確資料庫名稱的查詢工作階段:

--Command below will run DBCC CHECKDB without using TEMDB and creating a DB snapshot.
--When not using TEMPDB with a DB snapshot all data will be checked in the live database not not a database snapshot.

USE Master;
GO

ALTER DATABASE 資料庫名稱
SET SINGLE_USER
WITH ROLLBACK IMMEDIATE;
GO

DBCC CHECKDB (資料庫名稱, REPAIR_REBUILD)
WITH TABLOCK;
GO

ALTER DATABASE 資料庫名稱
SET MULTI_USER;
Go

2020年12月24日 星期四

ASP.NET 怎麼保存資訊?Application、Session、Cookie、Cache、ViewState

 摘錄https://ithelp.ithome.com.tw/articles/10222885

HTTP是 Stateless(沒有狀態) 的通訊協定(Protocol),Stateless(沒有狀態)含有以下特色:

  1. 每個Request 都是唯一且獨立的
  2. 不會記住之前的連線

也就是說,每次頁面載入彼此之間都沒有關係。但...這樣太沒感情了!!(不是啦!),這樣有時候其實不太方便。
為了蝦皮雙十一積了半年的購物車,如果從購物車頁面跳轉到結帳頁面,它就像失憶了一樣,完全不記得你的購物車內容!!!!!瞬間是不是非常崩潰!!!!

那有哪些方式可以儲存資訊,讓頁面間彼此共享?
本文將為大家介紹Application、Session、Cookie、Cache以及ViewState。

==============================================================

Application

  • 介紹
    • Application存放在server的記憶體中,當IIS或網頁伺服器重新啟動、修改Global.asax、修改 web.config時, Application的值便會遺失。
    • 因為儲存在伺服器的記憶體中,因此與在資料庫中存儲和檢索資訊相比,它的執行速度更快。
    • Application 的內容所有user都能夠存取,且都存取同一個,是所有user共用的,全域變數的概念,因此可以用來存放少量經常使用,但不會因為使用者不同而變更的資料。
    • 存放的資料內容為Object資料型別,讀取時需要轉換為適當的型別使用。例如:Conver.ToInt32(Application["名稱"])。
    • 資料量大小無限制,以server的記憶體大小而定
    • 使用頻率較低,在Asp.Net中類似的資料可以儲存在Web.config檔案中
  • 範例:
    網頁瀏覽次數,無論是誰造訪這個網頁都共同存取同一個變數並+1
  • 相關語法
    由於大家都共用這個變數,避免同一時間有多人同時存取,所以存取Application 狀態資料前,須將Application鎖定,修改後再打開
Application.Lock();//先把Application固定
Application["yoyo"]="大家都看得到這段字喔!";//對Application賦值
Application.UnLock();//把Application打開
string yoyo =Convert.ToString( Application["yoyo"]);//存取時要記得轉型

==============================================================

Session

  • 介紹
    • 存放在server的記憶體中
    • Session的內容鎖定同一瀏覽器,並不是所有user都共用。你打開第一次chrome使用這個網頁,跟把它關掉再用Chrome再開一次,對Session還說是不同user。或者你同時開了Chrome還有IE造訪同一個網頁,也是代表不同user。
    • 預設生命週期為20分鐘(若是持續使用不閒置,可以一直存在),或是直到瀏覽器被關閉才消失。同一瀏覽器只是關掉分頁Session不會消失,換頁面也不會消失,故類似跨網頁的全域變數
    • 存放的資料內容為Object資料型別,讀取時需要轉換為適當的型別使用。例如:Conver.ToInt32(Session["名稱"])。
    • 資料量大小無限制,以server的記憶體大小而定
      -範例:
      傳統的購物車網站傳遞資料的方法。可以把選好的紀錄存在session裡,當跳到結帳頁面時也不會消失。
  • 相關語法
Session["yoyo"]="Hiyoyo";//賦值Session["yoyo"]
Session.Timeout = 30;//更改Session過期時間
Session.Remove("yoyo");//移除 Session["yoyo"]的值
Session.RemoveAll();//移除所有Session變數
Session.Clear(); //移除所有Session變數
Session.Abandon();//移除 session 的所有變數,且會觸發 Session_End 事件,把 Session["yoyo"]整個砍了

你可以試試把值存到Session以及Application,然後開啟不同瀏覽器看看畫面變化喔~

==============================================================

Cookie

  • 介紹
    • 是放在Web Server和瀏覽器之間,伴隨request和網頁傳送的一小段文字
    • 存放在使用者電腦
    • cookies存在時間通常為1000分鐘,也可以自行設定
    • 資料量大小最大為4096 bytes,實際一個瀏覽器可以儲存的cookie數量及大小受限於瀏覽器設定
    • 每個Cookie需要有唯一的名稱,若名稱相同會覆蓋過去
    • String格式存放
    • 使用者"每次"發請求都會夾帶 Cookie,會影響訪問網站的速度
  • 相關語法
HttpCookie yoCookie = new HttpCookie("test");//用new宣告一個型別為HttpCookie的yocookie
yoCookie.Value = Server.UrlEncode("我是內容");//通常寫入cookie的值會加密,所以加密後賦值
yoCookie.Expires = DateTime.Now.AddDays(2);//設定2天後過期
Response.Cookies.Add(yoCookie);//寫到用戶端

HttpCookie readCookie = Request.Cookies["test"];//用request讀取
Response.Write("cookie內容 : " + Server.UrlDecode(readCookie.Value));

也可以在單一cookie中儲存多的名稱/值組。增加設定方便性以及減少cookie的數量及大小

//方法一
Response.Cookies["test"]["username"] = "I'm Cynthia";
Response.Cookies["test"]["gender"] = "女";
//方法二           
HttpCookie yoCookie = new HttpCookie("test");
yoCookie.Values["username"] = "I'm Cynthia";
yoCookie.Values["gender"] = "女";

==============================================================

Cache

  • 介紹
    • 儲存在伺服器記憶體
    • 所有瀏覽者在同一時間共用同一個變數
    • Cache自己設定時間,時間到消失,不受網頁關閉或關機影響
    • 通常應用在靜態網頁快取以及入口型網站
    • 目的是希望可以減少對資料庫的存取

-範例:
當有一個入口網站,內容不會頻繁變動,但是頁面上有許多資訊需要從資料庫抓取,每個人點進來就要重新抓取並載入一次,其實非常消耗流量跟資源。於是我們將輸出結果存到Cache裡,並設定6小時或合適的時間。當第一個人進到頁面時,(被迫)佛心的幫大家把結果載完並存到cache,接下來6個小時內進來這個頁面的人都不用重新載入就能看到跟第一個人一模一樣的頁面。一直到6小時時間到,下一個人再繼續扮演(被迫)佛心的好孩子。有客怨也只有第一個人會抱怨呵呵

  • 相關語法
//存放資訊
Cache["yoyo"] = "1000";
//存放資訊
Cache.Insert("yoyo", "1000");
//讀取資訊
String UserNameID = Cache["yoyo"].ToString();

==============================================================

ViewState

  • 介紹

    • ViewState 屬性提供一個字典物件,用於在對同一頁的多個請求(request)之間保留值。
    • 用來存放ASP.NET頁面上控制項的狀態值給兩個連續的postback使用
    • 要傳遞的變數會存放在隱藏表單欄位(hidden field)的值(Value)屬性中( _ VIEWSTATE)
      <input Type="Hidden"...>
      
    • 不需要伺服器資源,ViewState包含在頁面程式碼的結構中
    • ViewState的值會經過雜湊、壓縮,並且透過Base-64編碼後才存入欄位內
    • 只能在同一頁面裡存在,無法跨網頁
    • 可存放可序列化的Object
    • 不是用存放大量資料,網頁載入可能會太久
    • 若要關閉ViewState,需關閉 @page 裡面設定EnableViewState=false
  • 相關語法

ViewState["Text"] = "123";//賦值
string myValue = ViewState["Text"].ToString();//取值

==============================================================

比較表

變數變數儲存位置生命週期資料量大小
Application所有瀏覽者共用同一個伺服器記憶體不關伺服器就一直存在任意
Session一個瀏覽器一個伺服器記憶體關掉瀏覽器就消失(關掉分頁不會)。也可設定存活時間(預設為20分鐘)小量
Cookie一個瀏覽者一個使用者電腦通常存在1000分鐘,也可以自己設時間小量
Page.Cache所有瀏覽者在同一時間共用同一個伺服器記憶體自己設定時間,時間到消失,不受網頁關閉或關機影響任意
ViewState一個頁面(aspx)同一個用戶端該頁面的生命週期小量

==============================================================

2020年12月7日 星期一

修改Windows的登入密碼


參考
Reset a Windows 10 password
Post author: Nat Lee
Post link: http://NatLee.github.io/Blog/2016/01/31/20160131_Crack_Windows_Password/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
# Windows

圖形化界面的置換修改法
  1. 插入Windows7安裝光碟
  2. 進入安裝畫面後,按下下一步再按修復您的電腦
  3. 按下載入驅動程式
  4. 進到windows\system32目錄底下
  5. 把Magnify.exe改名成Magnify1.exe
  6. 把cmd.exe改名成Magnify.exe



  7. 重新啟動電腦
  8. 進入登入畫面按左下角協助工具選擇放大鏡


  9. 輸入net user 你的帳戶 123後按Enter把密碼改成123
  10. 重新啟動進到光碟裡把放大鏡跟cmd改回原本名字




指令置換修改法
  1. 插入Windows7安裝光碟
  2. 進入安裝畫面後,按下Shift+F10
  3. 輸入cd\後按Enter跳至系統槽(可能C或D)
  4. 輸入cd windows\system32後按Enter跳到目錄底下
  5. 輸入ren Magnify.exe Magnify1.exe後按Enter把放大鏡改名
  6. 輸入ren cmd.exe Magnify.exe後按Enter把cmd改成放大鏡
  7. 關閉Command Window後重新啟動電腦
  8. 進入登入畫面按左下角協助工具選擇放大鏡
  9. 輸入net user 你的帳戶 123後按Enter把密碼改成123
  10. 輸入cd\後按Enter跳至系統槽(可能C或D)
  11. 重新啟動進到光碟後按下Shift+F10
  12. 輸入cd windows\system32後按Enter跳到目錄底下
  13. 輸入ren Magnify.exe cmd.exe後按Enter把cmd改回來
  14. 輸入ren Magnify1.exe Magnify.exe後按Enter把放大鏡改回來
  15. 重新啟動電腦即完成,密碼為123
重點:就是把放大鏡跟CMD互換

Windows 8/8.1/10

  1. 插入Windows10安裝光碟
  2. 進入安裝畫面後,按下Shift+F10
  3. 輸入以下指令後按Enter把utilman.exe改名加尾綴.bak
    move d:\windows\system32\utilman.exe d:\windows\system32\utilman.exe.bak
  4. 輸入以下指令後按Enter把cmd.exe改名成utilman.exe
    copy d:\windows\system32\cmd.exe d:\windows\system32\utilman.exe

  5. 關閉Command Window後重新啟動電腦

  6. 進入登入畫面按協助工具(左下角或右下角)
  7. 輸入net user 你的帳戶 123後按Enter把密碼改成123
  8. 重新啟動進到光碟後按下Shift+F10
  9. 依序輸入以下指令把檔案換回來
    move d:\windows\system32\utilman.exe d:\windows\system32\cmd.exe
    move d:\windows\system32\utilman.exe.bak d:\windows\system32\utilman.exe
  10. 重新啟動電腦即完成,密碼為123

這邊要注意一下,這個方法僅限系統管理員Account非Microsoft帳號
如果你的系統管理員身份是M$帳號的話
請在第七步時把指令改成net user 你要新增的帳戶 /add
這樣就可以進到有管理權限的帳戶來改掉原本進不去的帳戶密碼了

後記

Win10換完檔案後,其實可以用輸入wpeutil reboot重啟

不過改密碼的方法一樣都是置換法,總之能開cmd的話萬事都OK。
感謝收看


2020年11月20日 星期五

[系統]如何關閉Win10自動更新

 文章出處:http://www.ess.nthu.edu.tw/p/16-1351-152740.php?Lang=zh-tw
清華大學  工程與系統科學系暨研究所

自動一鍵關閉更新

網路上有人寫出快速進行以下設定的程式,若不放心也可以自行手動操作

手動關閉更新步驟

  1. Win鍵 + R,輸入  gpedit.msc 開啟群組原則編輯器,把[設定自動更新]跟[透過自動更新安裝建議的更新]停用



  2. 控制台\所有控制台項目\系統管理工具\電腦管理,找到 BITS 服務

  3. 停用該服務


  4. 去設定\更新與安全性



  5. 選擇進階選項\傳遞最佳化,關閉從其他電腦下載更新






2020年11月6日 星期五

SQL恢復[正在還原]資料庫

 -- 切換資料庫的狀態為:ONLINE。

RESTORE DATABASE [資料庫名稱] WITH RECOVERY GO

2020年10月29日 星期四

Robocopy常用方法說明

/E :: 複製子目錄,包括空的子目錄。
/XO :: 排除較舊的檔案。
/PURGE :: 刪除來源已經不存在的目的地檔案/目錄。

/MIR :: 鏡像樹狀目錄 (相當於 /E 加 /PURGE)。
/DCOPY:T :: 複製目錄時間戳記。加了目錄的時間就跟來源的時間是一樣的
/SEC :: 複製包含安全性的檔案 (相當於 /COPY:DATS)。非本機磁碟,好像會出現存取被拒
/XO :: 排除較舊的檔案。
/XF file [file]... :: 排除符合指定名稱/路徑/萬用字元的檔案。Thumbs.db 會自動產生,之前有遇過卡住,就忽略囉
/MT[:n] :: 以 n 個執行緒執行多執行緒複製 (預設值為 8)。這個我沒用,新版才有的功能


/COPYALL:Copy ALL file info (equivalent to /COPY:DATSOU)
/B:Copy files in Backup mode
/SEC:Copy files with SECurity (equivalent to /COPY:DATS)
/MIR:MIRror a directory tree - equivalent to /PURGE plus all subfolders (/E)
/R:Number of Retries on failed copies - default is 1 million
/W:Wait time between retries - default is 30 seconds
/LOG+:Output status to LOG file (append to existing log)
/NP:No Progress - don't display % copied(不加會顯示複製進度 %)
/NFL:No File List - don't log file names(不加會把所有的檔案列出)
/NDL: No File List - don't log file names(不加會把所有的目錄列出)

我的主要目的是要做資料備份,使用的語法如下:
robocopy D:DATA S:資料區 /COPYALL /B /SEC /MIR /R:0 /W:0 /LOG+:DataCopy.log /NP /NFL /NDL

下面有詳細說明

D槽變成OEM分割 原本的D槽消失,該如何還原?

Windows 7將D槽變成OEM分割 原本的D槽消失了

進到電腦管理裡去看

發現D槽變成OEM磁碟區而且完全無法對它做任何動作

解決方法


(1)用附屬應用程式內的命令提示字元 (cmd)

(2)輸入diskpart

(3) list disk 查出你要的磁碟之後 假設是磁碟0 那就 select disk 0

(2) list partition 查出是哪一個磁區 假設是磁碟分割2 那就 select partition 2

(3) 最後 set id=07 

消失的D槽變回來了

智慧型應用程式控制

現象: 解法