1. 資料庫恢復可以用哪些方法實現
資料庫恢復的三種方式
資料庫可能因為硬體或軟體(或兩者同時)的故障變得不可用,不同的故障情況需要不同的恢復操作。我們必須決定最適合業務環境的恢復方法。在資料庫中恢復有3種類型或方法,即應急(crash)恢復、版本(version)恢復和前滾(rool forward)恢復。
應急恢復
應急恢復用於防止資料庫處於不一致或不可用狀態。資料庫執行的事務(也稱工作單元)可能被意外中斷,若在作為工作單位一部分的所有更改完成和提交之前發生故障,則該資料庫就會處於不一致和不可用的狀態。這時,需要將該資料庫轉化為一致和可用的狀態。
為此,需要回滾未完成的事務,並完成當發生崩潰時仍在內存中的已提交事務。如在COMMIT語句之前發生了電源故障,則在下一次重新啟動並再次訪問該資料庫時,需要回滾到執行COMMMIT語句前的狀態。回滾語句的順序與最初執行時的順序相反。
版本恢復
版本恢復指的是使用備份操作期間創建的映象來復原資料庫的先前版本。這種恢復是通過使用一個以前建立的資料庫備份恢復出一個完整的資料庫。一個資料庫的備份允許你把資料庫恢復至和這個資料庫在備份時完全一樣的狀態。而從備份建立後到日誌文件中最後記錄的所有工作事務單位將全部丟失。
前滾恢復
這種恢復技術是版本恢復的一個擴展,使用完整的資料庫備份和日誌相結合,可以使一個資料庫或者被選擇的表空間恢復到某個特定時間點。如果從備份時刻起到發生故障時的所有日誌文件都可以獲得的話,則可以恢復到日誌上涵蓋到的任意時間點。前滾恢復需要在配置中被明確激活才能生效。
2. 啟動和關閉資料庫以什麼身份連接資料庫
對於大多數Oracle DBA來說,啟動和關閉Oracle資料庫最常用的方式就是在命令行方式下的Server Manager。從Oracle 8i以後,系統將Server Manager的任何功能都集中到了SQL*Plus中,也就是說從8i以後對於資料庫的啟動和關閉能夠直接通過SQL*Plus來完成,而不再另外需要Server Manager,但系統為了保持向下兼容,依舊保留了Server Manager工具。另外也可通過圖像用戶工具(GUI)的Oracle Enterprise Manager來完成系統的啟動和關閉,圖像用戶界面Instance Manager很簡單,這里不再詳述。
要啟動和關閉資料庫,必須要以具備Oracle 管理員許可權的用戶登陸,通常也就是以具備SYSDBA許可權的用戶登陸。一般我們常用INTERNAL用戶來啟動和關閉資料庫(INTERNAL用戶實際上是SYS用戶以SYSDBA連接的同義詞)。Oracle資料庫的新版本將逐步淘汰INTERNAL這個內部用戶,所以我們最好還是配置DBA用戶具備SYSDBA許可權。
二、資料庫的啟動(STARTUP)
啟動一個資料庫需要三個步驟:
1、 創建一個Oracle實例(非安裝階段)
2、 由實例安裝資料庫(安裝階段)
3、 打開資料庫(打開階段)
在Startup命令中,能夠通過不同的選項來控制資料庫的不同啟動步驟。
1、STARTUP NOMOUNT
NONOUNT選項僅僅創建一個Oracle實例。讀取init.ora初始化參數文檔、啟動後台進程、初始化系統全局區(SGA)。Init.ora文檔定義了實例的配置,包括內存結構的大小和啟動後台進程的數量和類型等。實例名根據Oracle_SID配置,不一定要和打開的資料庫名稱相同。當實例打開後,系統將顯示一個SGA內存結構和大小的列表,如下所示:
SQL> startup nomount
ORACLE 常式已啟動。
Total System Global Area 35431692 bytes
Fixed Size 70924 bytes
Variable Size 18505728 bytes
Database Buffers 16777216 bytes
Redo Buffers 77824 bytes
2、STARTUP MOUNT
該命令創建實例並且安裝資料庫,但沒有打開資料庫。Oracle系統讀取控制文檔中關於數據文檔和重作日誌文檔的內容,但並不打開該文檔。這種打開方式常在資料庫維護操作中使用,如對數據文檔的更名、改變重作日誌連同打開歸檔方式等。在這種打開方式下,除了能夠看到SGA系統列表以外,系統還會給出"資料庫裝載完畢"的提示。
3、STARTUP
該命令完成創建實例、安裝實例和打開資料庫的任何三個步驟。此時資料庫使數據文檔和重作日誌文檔在線,通常還會請求一個或是多個回滾段。這時系統除了能夠看到前面Startup Mount方式下的任何提示外,還會給出一個"資料庫已打開"的提示。此時,資料庫系統處於正常工作狀態,能夠接受用戶請求。
假如採用STARTUP NOMOUNT或是STARTUP MOUNT的資料庫打開命令方式,必須採用ALTER DATABASE命令來執行打開資料庫的操作。例如,假如您以STARTUP NOMOUNT方式打開資料庫,也就是說實例已創建,但是資料庫沒有安裝和打開。這是必須運行下面的兩條命令,資料庫才能正確啟動。
ALTER DATABASE MOUNT;
ALTER DATABASE OPEN;
而假如以STARTUP MOUNT方式啟動資料庫,只需要運行下面一條命令即能夠打開資料庫:
ALTER DATABASE OPEN.
4、其他打開方式
除了前面介紹的三種資料庫打開方式選項外,更有另外其他的一些選項。
(1) STARTUP RESTRICT
這種方式下,資料庫將被成功打開,但僅僅允許一些特權用戶(具備DBA角色的用戶)才能夠使用資料庫。這種方式常用來對資料庫進行維護,如數據的導入/導出操作時不希望有其他用戶連接到資料庫操作數據。
(2) STARTUP FORCE
該命令其實是強行關閉資料庫(shutdown abort)和啟動資料庫(startup)兩條命令的一個綜合。該命令僅在關閉資料庫碰到問題不能關閉資料庫時採用。
(3) ALTER DATABASE OPEN READ ONLY;
該命令在創建實例連同安裝資料庫後,以只讀方式打開資料庫。對於那些僅僅提供查詢功能的產品資料庫能夠採用這種方式打開。
三、資料庫的關閉(SHUTDOWN)
對於資料庫的關閉,有四種不同的關閉選項,下面對其進行一一介紹。
1、SHUTDOWN NORMAL
這是資料庫關閉SHUTDOWN命令的確省選項。也就是說假如您發出SHUTDOWN這樣的命令,也即是SHUTDOWN NORNAL的意思。
發出該命令後,任何新的連接都將再不允許連接到資料庫。在資料庫關閉之前,Oracle將等待現在連接的任何用戶都從資料庫中退出後才開始關閉資料庫。採用這種方式關閉資料庫,在下一次啟動時無需進行任何的實例恢復。但需要注意一點的是,採用這種方式,也許關閉一個資料庫需要幾天時間,也許更長。
2、SHUTDOWN IMMEDIATE
這是我們常用的一種關閉資料庫的方式,想很快地關閉資料庫,但又想讓資料庫干凈的關閉,常採用這種方式。
當前正在被Oracle處理的SQL語句立即中斷,系統中任何沒有提交的事務全部回滾。假如系統中存在一個很長的未提交的事務,採用這種方式關閉資料庫也需要一段時間(該事務回滾時間)。系統不等待連接到資料庫的任何用戶退出系統,強行回滾當前任何的活動事務,然後斷開任何的連接用戶。
3、SHUTDOWN TRANSACTIONAL
該選項僅在Oracle 8i後才能夠使用。該命令常用來計劃關閉資料庫,他使當前連接到系統且正在活動的事務執行完畢,運行該命令後,任何新的連接和事務都是不允許的。在任何活動的事務完成後,資料庫將和SHUTDOWN IMMEDIATE同樣的方式關閉資料庫。
4、SHUTDOWN ABORT
這是關閉資料庫的最後一招,也是在沒有任何辦法關閉資料庫的情況下才不得不採用的方式,一般不要採用。假如下列情況出現時能夠考慮採用這種方式關閉資料庫。
1、 資料庫處於一種非正常工作狀態,不能用shutdown normal或shutdown immediate這樣的命令關閉資料庫;
2、 需要立即關閉資料庫;
3、 在啟動資料庫實例時碰到問題;
任何正在運行的SQL語句都將立即中止。任何未提交的事務將不回滾。Oracle也不等待現在連接到資料庫的用戶退出系統。下一次啟動資料庫時需要實例恢復,因此,下一次啟動可能比平時需要更多的時間。
3. oracle如何查看當前有哪些用戶連接到資料庫
用超級管理員許可權登錄系統(conn / as sysdba)後通過如下語句查看:
select distinct username from v$session where username is not null group by username;
解釋:在視圖v$session中如果此時用戶連接到資料庫的話,會生成相應的視圖信息。因為一個用戶可能進行多種操作,所有記錄是多條的,通過「distinct 」命令即可查出「唯一」的用戶。
4. 當恢復資料庫的時候,用戶還可以使用這些正在恢復的資料庫嗎
不可以的。恢復資料庫時資料庫不應該有其它用戶在用,如果有其它用戶在用,恢復資料庫無法進行
5. SQL Server查看有哪些用戶連接資料庫
1、通過系統的「性能」來查看:
開始->管理工具->性能(或者是運行裡面輸入 mmc)然後通過
添加計數器添加 SQL 的常用統計 然後在下面列出的項目裡面選擇用戶連接就可以時時查詢到sql server資料庫連接數了。
不過此方法的話需要有訪問那台計算機的許可權,就是要通過windows賬戶登陸進去才可以添加此計數器。
2、通過系統表來查詢:
SELECT * FROM
[Master].[dbo].[SYSPROCESSES] WHERE [DBID]
IN
(
SELECT
[DBID]
FROM
[Master].[dbo].[SYSDATABASES]
WHERE
NAME='databaseName'
)
databaseName 是需要查看的資料庫,然後查詢出來的行數,就是當前的sql server資料庫連接數。不過裡面還有一些別的狀態可以做參考用。
3、通過系統過程來查詢:
SP_WHO 'loginName'
loginName 是當然登陸Sql的用戶名,一般程序裡面都會使用一個username來登陸SQL這樣通過這個用戶名就能查看到此用戶名登陸之後佔用的連接了。
如果不寫loginName,那麼返回的就是所有的sql server資料庫連接。