全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:5148
推到 Plurk!
推到 Facebook!

如何複製資料庫

尚未結案
nick167
中階會員


發表:86
回覆:133
積分:53
註冊:2003-02-12

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-02-28 12:45:47 IP:61.228.xxx.xxx 未訂閱
各位大師,想請教 資料庫 複製問題: 使用MS SQL-2000建立一個 Public DataBase (HCDATA) 當user開立一家新單位成立時,需要將hcdata裡table,copy至該單位目錄 供user輸入資料,(而且每個單位所需table一樣),但資料各管各的,不共用 當我判斷該單位不存在,建一目錄後,如何將公用hcdata(table)複製至新單位 獨立使用 (我使用ADOQuery 連結 DataBase)
ddy
站務副站長


發表:262
回覆:2105
積分:1169
註冊:2002-07-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-03-01 21:31:37 IP:211.74.xxx.xxx 未訂閱
可以試試看 此指令於新產生的資料庫執行 (從HCDATA 讀取 hcdata 寫入新產生的資料庫) select * into hcdata from HCDATA.dbo.hcdata 或是於 HCDATA 執行此指令 select * into newUnit.dbo.hcdata from hcdata        
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-03-03 10:58:45 IP:61.219.xxx.xxx 未訂閱
引言: 可以試試看 此指令於新產生的資料庫執行 (從HCDATA 讀取 hcdata 寫入新產生的資料庫) select * into hcdata from HCDATA.dbo.hcdata 或是於 HCDATA 執行此指令 select * into newUnit.dbo.hcdata from hcdata
補充說明: select into ... 好像只會 create table/column and insert data, index/rule/default 都不 create/bind. 因為新的 table 須供編輯, 有可能會有些和原 table 不太一樣的反應, 另外 select 權限也須注意一下喔 ! /* Free 和 Create 一樣重要 */
ddy
站務副站長


發表:262
回覆:2105
積分:1169
註冊:2002-07-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-03-03 11:18:44 IP:61.218.xxx.xxx 未訂閱
Mickey 兄不愧是資料庫高手 提醒得好!! 小弟我也忽略此狀況了 src="http://delphi.ktop.com.tw/loadfile.php?TOPICID=8147403&CC=182217">
nick167
中階會員


發表:86
回覆:133
積分:53
註冊:2003-02-12

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-03-03 20:47:03 IP:61.228.xxx.xxx 未訂閱
引言: 謝謝ddy,Mickey 大師指點 我還是有點腦筋不通,舉例實作: procedure TForm1.Button1Click(Sender: TObject); var CFound:String; begin CFound:='\Program Files\Microsoft SQL Server\MSSQL\HCData\00000000'; if DirectoryExists(CFound) then ShowMessage('已存在')else MkDir(Cfound); ??????? 不知怎麼寫????? 在SQL Server Enterprise Manager,有1個 Databases(mshc) mshc路徑:\Program Files\Microsoft SQL Server\MSSQL\HCData 完成建立目錄後,在程式中用何指令控制將\Program Files\Microsoft SQL Server\MSSQL\HCData\mhc.mdf,mshclog.ldf 覆製至\Program Files\Microsoft SQL Server\MSSQL\HCData\00000000 連結後供user獨立使用, ....\HCData\00000000 (有可能00000000至99999999之間目錄變數,user自定非固定的) 不好意思在麻煩大家
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-03-04 08:39:56 IP:61.219.xxx.xxx 未訂閱
抱歉, 之前沒仔細看你的問題.
1. MSSQL master database 中存在著各個 database 的 information
   ( size, data , log....一大堆 ), 不是 Copy data/log file 就可以的 !
   MSSQL 可不是 MySQL 喔.
2. 如果你確定要這麼做, 我想應該還是有辦法, 不過我心臟不夠強, 沒試過 :
  2.1 create database.
  2.2 shutdown MSSQL Server.
  2.3 copy and replace data/log file.(原 file backup 起來,以防...)
  2.4 boot MSSQL Server.... god bless you !
create database 時須注意 size 要 match
/* Free 和 Create 一樣重要 */
nick167
中階會員


發表:86
回覆:133
積分:53
註冊:2003-02-12

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-03-04 09:59:21 IP:61.228.xxx.xxx 未訂閱
引言: 多謝大師指點 [code] A: 1. MSSQL master database 中存在著各個 database 的 information ( size, data , log....一大堆 ), 不是 Copy data/log file 就可以的 ! MSSQL 可不是 MySQL 喔. (謝謝,讓我對SQL-2000多一份認識) 2. 如果你確定要這麼做, 我想應該還是有辦法, 不過我心臟不夠強, 沒試過 : 2.1 create database. 2.2 shutdown MSSQL Server.(shutdown MSSQL Server 其他User正在使用 showdown會不會影響到其他人) B.曾想過同一個DataBases(MSHC) 例如:有好幾個不同系統(人事3個*.dbo, 薪資 5 個*.dbo,稅6個*.dbo,總帳3個*.dbo,製造庫存7個*.dbo,....其它系 統),同一個*.dbo,存入1-300家公司筆數大小不同資料 例:Property.dbo 欄位有公司統編(8碼),cno,cname,cqty,cmoney...... 00000000 001 電腦,1,50000 00000000 002 汽車,1,80000.......多筆 11111111 001 機械,1,300000 11111111 002 挖土機,1,1500000 ....多筆 .......約300家資料存放同一個property.dbo 這樣會不會影響database速度 C.另一方法就是同一個DataBases(MSHC),property.dbo 覆製 property.00000000.dbo 覆製 property.11111111.dbo .... (這樣以後要備份出單一家公司資料比較方變) A,B,C三個規化有請大師指點,何者可行性較優 謝謝您 Mickey是否有尚好建議, code] /* Free 和 Create 一樣重要 */
ddy
站務副站長


發表:262
回覆:2105
積分:1169
註冊:2002-07-13

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-03-04 10:08:13 IP:61.218.xxx.xxx 未訂閱
你若是要針對不同的單位,產生相同的資料庫 那麼開立一家新單位,就是產生一個資料庫嗎?    那麼可善用 MSSQL 裡的model 資料庫 在model 裡所建立的資料表,在產生任何新的資料庫時,就會包含model 所建立的資料表,你只要建立新的資料庫,就會擁有相同的資料表了(含資料)    那麼如何新增資料庫 參考語法:
CREATE DATABASE database_name 
[ ON 
    [ < filespec > [ ,...n ] ] 
    [ , < filegroup > [ ,...n ] ] 
] 
[ LOG ON { < filespec > [ ,...n ] } ] 
[ COLLATE collation_name ]
[ FOR LOAD | FOR ATTACH ]     < filespec > ::=     [ PRIMARY ]
( [ NAME = logical_file_name , ]
    FILENAME = 'os_file_name'
    [ , SIZE = size ]
    [ , MAXSIZE = { max_size | UNLIMITED } ]
    [ , FILEGROWTH = growth_increment ] ) [ ,...n ]    < filegroup > ::=     FILEGROUP filegroup_name < filespec > [ ,...n ]
例:
USE model
GO
CREATE DATABASE Sales
ON 
( NAME = Sales_dat,
   FILENAME = 'c:\program files\microsoft sql server\mssql\data\saledat.mdf',
   SIZE = 10,
   MAXSIZE = 50,
   FILEGROWTH = 5 )
LOG ON
( NAME = 'Sales_log',
   FILENAME = 'c:\program files\microsoft sql server\mssql\data\salelog.ldf',
   SIZE = 5MB,
   MAXSIZE = 25MB,
   FILEGROWTH = 5MB )
GO
完整的說明如下:(取自SQL Server 2000 文件) CREATE DATABASE 建立新的資料庫和用來儲存資料庫的檔案,或是從先前建立的資料庫檔案來附加資料庫。 附註 如需關於與 DISK INIT 回溯相容性的詳細資訊,請參閱 Microsoft® SQL Server™ 回溯相容性相細資料中的裝置 (層級 3)。 語法 CREATE DATABASE database_name [ ON [ < filespec > [ ,...n ] ] [ , < filegroup > [ ,...n ] ] ] [ LOG ON { < filespec > [ ,...n ] } ] [ COLLATE collation_name ] [ FOR LOAD | FOR ATTACH ] < filespec > ::= [ PRIMARY ] ( [ NAME = logical_file_name , ] FILENAME = 'os_file_name' [ , SIZE = size ] [ , MAXSIZE = { max_size | UNLIMITED } ] [ , FILEGROWTH = growth_increment ] ) [ ,...n ] < filegroup > ::= FILEGROUP filegroup_name < filespec > [ ,...n ] 引數 database_name 新資料庫的名稱。資料庫名稱在伺服器中必須是唯一的,而且必須符合識別項的規則。database_name 最多可以有 128 個字元,除非沒有指定記錄的邏輯名稱。如果沒有指定邏輯記錄檔名稱,Microsoft® SQL Server™ 會在 database_name 後面附加一個字尾來產生邏輯名稱。這種情況會限制 database_name 為 123 個字元,這樣才能讓產生的邏輯記錄名稱不超過 128 個字元。 ON 指定用來儲存資料庫資料部分 (資料檔) 的磁碟檔必須明確定義。關鍵字後面跟隨著由逗號分隔、用來定義主要檔案群組資料檔的 項目清單。主要檔案群組中的檔案清單後面可以接一個由逗號分隔、用來定義使用者檔案群組及其檔案的選擇性 項目清單。 n 是一個替代符號,表示可為新資料庫指定多個檔案。 LOG ON 指定用來儲存資料庫記錄 (記錄檔) 的磁碟檔必須明確定義。關鍵字後面跟隨著由逗號分隔、用來定義記錄檔的 項目清單。如果沒有指定 LOG ON,便會自動建立一個由系統命名而大小為該資料庫所有資料檔大小總和 25 % 的記錄檔。 FOR LOAD 支援這個子句是為了與早期版本的 Microsoft SQL Server 相容。資料庫需要在 dbo use only 資料庫選項開啟而且狀態設定為載入中的情況下建立。這在 SQL Server 7.0 版是不需要的,因為 RESTORE 陳述式能夠重新建立資料庫作為還原作業的一部份。 FOR ATTACH 指定資料庫要從現有的作業系統檔案集附加。必須有一個 項目來指定第一個主要檔案。唯一需要其他 項目的是那些路徑與資料庫最初建立時或最後被附加時路徑不相同的檔案。這些檔案必須指定 項目。所附加的資料庫必須是使用與 SQL Server 相同的字碼頁和排序順序建立的。請使用 sp_attach_db 系統預存程序而不要直接使用 CREATE DATABASE FOR ATTACH。只有在您必須指定 16 個以上 項目時才使用 CREATE DATABASE FOR ATTACH。 如果您要附加資料庫的伺服器不是此資料庫當初卸離的伺服器,且卸離的資料庫啟用了複寫功能,您就必須執行 sp_removedbreplication,從資料庫中移除複寫。 collation_name 指定資料庫的預設定序。定序名稱可以是 Windows 定序名稱,也可以是 SQL 定序名稱。如果沒有指定,資料庫會被指派 SQL Server 執行個體的預設定序。 如需關於 Windows 和 SQL 定序名稱的詳細資訊,請參閱 COLLATE。 PRIMARY 指定關聯的 清單係定義主要檔案。主要檔案群組包含了所有資料庫系統資料表。也包含了所有未指定給使用者檔案群組的物件。主要檔案群組中的第一個 項目會成為主要檔案,它是含有資料庫及其系統資料表邏輯開始的檔案。每一資料庫只能有一個主要檔案。如果沒有指定 PRIMARY,那麼在 CREATE DATABASE 陳述式中列示的第一個檔案就會成為主要檔案。 NAME 指定由 所定義檔案的邏輯名稱。在已指定 FOR ATTACH 的時候不需要 NAME 參數。 logical_file_name 是用來參照資料庫建立之後所執行任何 Transact-SQL 陳述式中檔案的名稱。logical_file_name 在資料庫中必須是唯一的而且必須符合識別項的規則。這個名稱可以是字元或 Unicode 常數,也可以是一般或分隔識別項。 FILENAME 指定由 所定義檔案的作業系統檔案名稱。 'os_file_name' 是作業系統在建立由 所定義的實體檔案時使用的路徑和檔案名稱。os_file_name 中的路徑必須指定一個在 SQL Server 執行實體上的目錄。os_file_name 不能指定壓縮檔案系統中的目錄。 如果檔案是建立在原始資料分割上,os_file_name 必須僅指定現有原始資料分割上的磁碟機代號。每個原始資料分割上只能建立一個檔案。資料分割上的檔案不會自動成長;因此,當 os_file_name 指定資料分割時並不需要 MAXSIZE 和 FILEGROWTH 參數。 SIZE 指定 中所定義檔案的大小。如果 中沒有提供主要檔案的 SIZE 參數,SQL Server 會使用 model 資料庫中主要檔案的大小。如果 中沒有提供次要檔案或記錄檔的 SIZE 參數,SQL Server 會將它們的大小定為 1 MB。 size 是 中所定義檔案初始的大小。可以使用 KB、MB、GB 或 TB 等字尾。預設的單位為 MB。請指定完整的數字;不要包含小數點。size 的最小值為 512 KB。如果沒有指定 size,預設值為 1 MB。指定主要檔案的大小至少須與 model 資料庫中主要檔案的大小一樣。 MAXSIZE 指定 中所定義檔案所能增長的最大大小。 max_size 是 中所定義檔案所能增長的最大大小。可以使用 KB、MB、GB 或 TB 等字尾。預設的單位為 MB。請指定完整的數字;不要包含小數點。如果沒有指定 max_size ,則檔案可以一直增長到磁碟機填滿為止。 附註 Microsoft Windows NT® S/B 系統記錄會在磁碟快要滿的時候警告 SQL Server 系統管理員。 UNLIMITED 指定 中所定義檔案可以一直增長到磁碟機滿了為止。 FILEGROWTH 指定 中所定義檔案的增長遞增值。檔案的 FILEGROWTH 設定值不得超過其 MAXSIZE 設定值。 growth_increment 這是每次檔案需要新空間時所增加的空間大小。請指定完整的數字;不要包含小數點。數值 0 表示大小沒有增長。這項值可以用 MB、KB、GB、TB 來指定,也可以用百分比 (%) 來指定。如果指定的數字沒有加上 MB、KB 或 % 字尾時,預設單位是 MB。指定 % 時,增長遞增值的大小是在遞增發生時檔案大小的指定百分比。如果沒有指定 FILEGROWTH,則預設值為 10 % 而最小值為 64 KB。所指定的大小會取最接近 64 KB 的值四捨五入。 備註 您可以使用一個 CREATE DATABASE 陳述式來建立資料庫和儲存資料庫的檔案。SQL Server 在執行 CREATE DATABASE 陳述式時會分成兩個步驟: SQL Server 會使用 model 資料庫的複本來初始化資料庫及其中繼資料。 然後 SQL Server 會以空的分頁填滿其餘資料庫,但內部資訊記錄著空間在資料庫中應如何使用的分頁除外。 在 model 資料庫中的任何使用者定義物件也會因此而被複製到所有新建立的資料庫中。您可以將任何物件 (例如資料表、檢視表、預存程序、資料類型等) 新增到 model 資料庫,以便加入到所有資料庫中。 每一個新資料庫都會從 model 資料庫繼承資料庫的選項設定值 (除非指定了 FOR ATTACH)。例如,資料庫選項 select into/bulkcopy 在 model 資料庫及任何您所建立的新資料庫中是設定為 OFF。如果您用 ALTER DATABASE 來變更 model 資料庫的選項,那麼這些選項設定也會在您所建立的新資料庫中生效。如果在 CREATE DATABASE 陳述式中指定了 FOR ATTACH,新資料庫便會繼承原來資料庫的資料庫選項。 一個伺服器上最多可以指定 32,767 個資料庫。 用來儲存資料庫的檔案有三種類型: 主要檔案含有資料庫的啟始資訊。也可用來儲存資料。每個資料庫有一個主要檔案。 次要檔案包含了所有不適合放在主要資料檔中的資料。如果主要檔案大到足以包含資料庫中的所有資料,則資料庫並不需要次要資料檔。有些資料庫可能大到需要多個次要資料檔,或者可能使用不同磁碟機上的次要檔案,將資料分散到多個磁碟機上。 交易記錄檔包含了用來復原資料庫的記錄資訊。每一個資料庫至少有一個交易記錄檔,雖然也可能有一個以上交易記錄檔。交易記錄檔的大小最小為 512 KB。 每一資料庫至少有兩個檔案:一個主要檔案和一個交易記錄檔。 雖然 'os_file_name' 可以是任何有效的作業系統檔案名稱,但是如果您使用以下建議的副檔名的話,檔案名稱將能比較清楚地反映出該檔案的用途。 檔案類型 副檔名 主要資料檔 .mdf 次要資料檔 .ndf 交易記錄檔 .ldf 附註 建立使用者資料庫的時候應該將 master 資料庫備份起來。 在 SIZE、MAXSIZE 和 FILEGROWTH 等參數中不可指定分數 (小數)。若要在 SIZE 參數中指定有小數的 MB,請將它乘以 1,024 來轉換為 KB。例如,請指定 1,536 KB 來取代 1.5 MB (1.5 乘以 1,024 等於 1,536)。 如果指定沒有其他參數的簡單 CREATE DATABASE database_name 陳述式,則資料庫就會建立成與 model 資料庫相同的大小。 所有資料庫至少有一個主要檔案群組。所有的系統資料表都配置於主要檔案群組內。資料庫也可以有使用者定義的檔案群組。如果是以 ON filegroup 子句指定使用者檔案群組建立一物件,那麼該物件的所有分頁都會從所指定的檔案群組配置。所有不是以 ON filegroup 子句或 ON DEFAULT 子句建立的使用者物件的分頁,都會從預設的檔案群組配置。當資料庫最初被建立時,主要檔案群組為預設檔案群組。您可以使用 ALTER DATABASE 來指定某個使用者定義的檔案群組作為預設的檔案群組: ALTER DATABASE database_name MODIFY FILEGROUP filegroup_name DEFAULT 每一資料庫都有一位擁有人,能夠在該資料庫中執行特殊的活動。這位擁有人就是建立該資料庫的使用者。可以使用 sp_changedbowner 來變更資料庫擁有人。 若要顯示某一資料庫 (或某個 SQL Server 執行個體的所有資料庫) 的報表,請執行 sp_helpdb。如需資料庫已使用空間的報表,請使用 sp_spaceused。如需資料庫中檔案群組的報表,請使用 sp_helpfilegroup;而使用 sp_helpfile 則可獲得資料庫中檔案的報表。 早期版本的 SQL Server 使用 DISK INIT 陳述式在 CREATE DATABASE 陳述式執行之前為資料庫建立檔案。為了能與早期版本的 SQL Server 相容,CREATE DATABASE 陳述式也可以在以DISK INIT 陳述式所建立的檔案或裝置上建立新資料庫。 如需詳細資訊,請參閱SQL Server 回溯相容性詳細資料。 權限 CREATE DATABASE 權限是預設給 sysadmin 和 dbcreator 固定伺服器角色的成員。而 sysadmin 和 securityadmin 固定伺服器角色成員可以授予其他登入者 CREATE DATABASE 權限。sysadmin 和 dbcreator 固定伺服器角色成員可以新增其他登入者到 dbcreator 角色。CREATE DATABASE 權限必須被明確地授予;它不能夠由 GRANT ALL 陳述式來授予。 CREATE DATABASE 權限通常僅限授予少數登入者,以維持對於 SQL Server 執行個體上磁碟使用的控制。 範例 A. 建立一個指定資料檔和交易記錄檔的資料庫 這個範例會建立一個名為 Sales 的資料庫。因為沒有使用關鍵字 PRIMARY,所以第一個檔案 (Sales_dat) 便會成為主要檔案。因為 Sales_dat 檔案的 SIZE 參數沒有為指定 MB、也沒有指定 KB,所以會預設為 MB 並以百萬位元組來配置。Sales_log 檔會以百萬位元組來配置,因為 MB 字尾已經在 SIZE 參數中明確陳述。 USE master GO CREATE DATABASE Sales ON ( NAME = Sales_dat, FILENAME = 'c:\program files\microsoft sql server\mssql\data\saledat.mdf', SIZE = 10, MAXSIZE = 50, FILEGROWTH = 5 ) LOG ON ( NAME = 'Sales_log', FILENAME = 'c:\program files\microsoft sql server\mssql\data\salelog.ldf', SIZE = 5MB, MAXSIZE = 25MB, FILEGROWTH = 5MB ) GO B. 建立一個指定多個資料檔和交易記錄檔的資料庫 這個範例會建立一個名為 Archive 的資料庫,它有三個 100-MB 的資料檔和兩個 100-MB 的交易記錄檔。主要檔案是清單中的第一個檔案,並且已經用關鍵字 PRIMARY 明確指定。交易記錄檔指定是跟隨在關鍵字 LOG ON 後面。請注意在 FILENAME 選項中所使用檔案的副檔名:.mdf 是用於主要資料檔、.ndf 是用於次要資料檔,而 .ldf 是用於交易記錄檔。 USE master GO CREATE DATABASE Archive ON PRIMARY ( NAME = Arch1, FILENAME = 'c:\program files\microsoft sql server\mssql\data\archdat1.mdf', SIZE = 100MB, MAXSIZE = 200, FILEGROWTH = 20), ( NAME = Arch2, FILENAME = 'c:\program files\microsoft sql server\mssql\data\archdat2.ndf', SIZE = 100MB, MAXSIZE = 200, FILEGROWTH = 20), ( NAME = Arch3, FILENAME = 'c:\program files\microsoft sql server\mssql\data\archdat3.ndf', SIZE = 100MB, MAXSIZE = 200, FILEGROWTH = 20) LOG ON ( NAME = Archlog1, FILENAME = 'c:\program files\microsoft sql server\mssql\data\archlog1.ldf', SIZE = 100MB, MAXSIZE = 200, FILEGROWTH = 20), ( NAME = Archlog2, FILENAME = 'c:\program files\microsoft sql server\mssql\data\archlog2.ldf', SIZE = 100MB, MAXSIZE = 200, FILEGROWTH = 20) GO C. 建立一個簡單的資料庫 這個範例會建立一個名為 Products 的資料庫並且指定一個單一的檔案。被指定的檔案就成為主要檔案,並且會自動建立一個 1 MB 的交易記錄檔。因為主要檔案的 SIZE 參數沒有為指定 MB、也沒有指定 KB,所以主要檔案會以 MB來配置。因為交易記錄檔沒有 ,所以交易記錄檔沒有 MAXSIZE 並且可以增長到填滿所有可用磁碟空間為止。 USE master GO CREATE DATABASE Products ON ( NAME = prods_dat, FILENAME = 'c:\program files\microsoft sql server\mssql\data\prods.mdf', SIZE = 4, MAXSIZE = 10, FILEGROWTH = 1 ) GO D. 建立一個沒有指定檔案的資料庫 這個範例會建立一個名為 mytest 的資料庫,並且建立一個對應的主要檔案和交易記錄檔。因為陳述式沒有 項目,所以主要資料庫檔案的大小會和 model 資料庫主要檔案的大小相同。而交易記錄的大小也等於 model資料庫交易記錄檔的大小。因為沒有指定 MAXSIZE,所以檔案可以增長到填滿所有可用磁碟空間為止。 CREATE DATABASE mytest E. 建立一個沒有指定 SIZE 的資料庫 這個範例會建立一個名為 products2 的資料庫。檔案 prods2_dat 會成為主要檔案且其大小等於 model 資料庫中主要檔案的大小。交易記錄會自動被建立且其大小為主要檔案的 25 % 或者 512 KB,採用兩者中較大者。因為沒有指定 MAXSIZE,所以檔案可以增長到填滿所有可用磁碟空間為止。 USE master GO CREATE DATABASE Products2 ON ( NAME = prods2_dat, FILENAME = 'c:\program files\microsoft sql server\mssql\data\prods2.mdf' ) GO F. 建立一個具有檔案群組的資料庫 這個範例會建立一個名為 sales 且具有三個檔案群組的資料庫: 主要檔案群組擁有檔案 Spri1_dat 和 Spri2_dat。這些檔案的 FILEGROWTH 遞增值被指定為 15 %。 名為 SalesGroup1 的檔案群組擁有檔案 SGrp1Fi1 和 SGrp1Fi2。 名為 SalesGroup2 的檔案群組擁有檔案 SGrp2Fi1 和 SGrp2Fi2。 CREATE DATABASE Sales ON PRIMARY ( NAME = SPri1_dat, FILENAME = 'c:\program files\microsoft sql server\mssql\data\SPri1dat.mdf', SIZE = 10, MAXSIZE = 50, FILEGROWTH = 15% ), ( NAME = SPri2_dat, FILENAME = 'c:\program files\microsoft sql server\mssql\data\SPri2dt.ndf', SIZE = 10, MAXSIZE = 50, FILEGROWTH = 15% ), FILEGROUP SalesGroup1 ( NAME = SGrp1Fi1_dat, FILENAME = 'c:\program files\microsoft sql server\mssql\data\SG1Fi1dt.ndf', SIZE = 10, MAXSIZE = 50, FILEGROWTH = 5 ), ( NAME = SGrp1Fi2_dat, FILENAME = 'c:\program files\microsoft sql server\mssql\data\SG1Fi2dt.ndf', SIZE = 10, MAXSIZE = 50, FILEGROWTH = 5 ), FILEGROUP SalesGroup2 ( NAME = SGrp2Fi1_dat, FILENAME = 'c:\program files\microsoft sql server\mssql\data\SG2Fi1dt.ndf', SIZE = 10, MAXSIZE = 50, FILEGROWTH = 5 ), ( NAME = SGrp2Fi2_dat, FILENAME = 'c:\program files\microsoft sql server\mssql\data\SG2Fi2dt.ndf', SIZE = 10, MAXSIZE = 50, FILEGROWTH = 5 ) LOG ON ( NAME = 'Sales_log', FILENAME = 'c:\program files\microsoft sql server\mssql\data\salelog.ldf', SIZE = 5MB, MAXSIZE = 25MB, FILEGROWTH = 5MB ) GO G. 附加資料庫 範例 B 會建立一個擁有以下實體檔案名為 Archive 的資料庫: c:\program files\microsoft sql server\mssql\data\archdat1.mdf c:\program files\microsoft sql server\mssql\data\archdat2.ndf c:\program files\microsoft sql server\mssql\data\archdat3.ndf c:\program files\microsoft sql server\mssql\data\archlog1.ldf c:\program files\microsoft sql server\mssql\data\archlog2.ldf 這個資料庫可以用 sp_detach_db 預存程序來卸離,然後再使用具有 FOR ATTACH 子句的 CREATE DATABASE 來重新附加資料庫: sp_detach_db Archive GO CREATE DATABASE Archive ON PRIMARY (FILENAME = 'c:\program files\microsoft sql server\mssql\data\archdat1.mdf') FOR ATTACH GO H. 使用原始資料分割 這個範例會使用原始資料分割建立一個名為 Employees 的資料庫。當陳述式被執行時這個原始資料分割必須存在,而且每個原始資料分割上只能有一個檔案。 USE master GO CREATE DATABASE Employees ON ( NAME = Empl_dat, FILENAME = 'f:', SIZE = 10, MAXSIZE = 50, FILEGROWTH = 5 ) LOG ON ( NAME = 'Sales_log', FILENAME = 'g:', SIZE = 5MB, MAXSIZE = 25MB, FILEGROWTH = 5MB ) GO I. 使用掛載磁碟機 這個範例會使用指向原始資料分割的掛載磁碟機建立一個名為的 Employees 資料庫。這項功能只在 Microsoft® Windows® 2000 Server 中才有。當陳述式被執行時掛載磁碟機和原始資料分割必須存在,而且每個原始資料分割上只能有一個檔案。在掛載磁碟機上建立資料庫時,該磁碟機的路徑必須以反斜線 (\) 作為結束。 USE master GO CREATE DATABASE Employees ON ( NAME = Empl_dat, FILENAME = 'd:\sample data dir\', SIZE = 10, MAXSIZE = 50, FILEGROWTH = 5 ) LOG ON ( NAME = 'Sales_log', FILENAME = 'd:\sample log dir\', SIZE = 5MB, MAXSIZE = 25MB, FILEGROWTH = 5MB ) GO
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-03-04 10:18:10 IP:61.219.xxx.xxx 未訂閱
我覺得用同一個 Database 比較好管理. 建構 "資料分割" (partitions) 結構, 應該是可行的方向. /* Free 和 Create 一樣重要 */
ddy
站務副站長


發表:262
回覆:2105
積分:1169
註冊:2002-07-13

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-03-04 10:26:24 IP:61.218.xxx.xxx 未訂閱
引言: 我覺得用同一個 Database 比較好管理. 建構 "資料分割" (partitions) 結構, 應該是可行的方向.
Mickey 兄,何謂"資料分割" (partitions) 結構?? 我也來學一下…^^ < src="http://delphi.ktop.com.tw/loadfile.php?TOPICID=8147403&CC=182217">
Jeffrey
初階會員


發表:10
回覆:58
積分:38
註冊:2002-04-15

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-03-04 13:05:57 IP:61.59.xxx.xxx 未訂閱
如果小弟解讀沒錯的話,這好像是好幾家分店共用一台主機。 1.如果是在同一個SQL Server內,需要不同名稱的資料庫(資料結構相同): 可以先將所需要的資料庫作"備份",需要新資料庫時再建立,並以該備份檔作還原。 2.如果在不同的SQL Server,相同名稱的資料庫,可以直接Copy xxx.MDF及xxx.LDF,再附加之。 3.也可以在同一資料庫,但須再多加資料判別的功能,例如:資料表加入分店代號,我想這樣在以後的統計上會比較方便。 發表人 - jeffrey 於 2003/03/04 13:11:14
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-03-04 13:46:44 IP:61.219.xxx.xxx 未訂閱
引言:
引言: 我覺得用同一個 Database 比較好管理. 建構 "資料分割" (partitions) 結構, 應該是可行的方向.
Mickey 兄,何謂"資料分割" (partitions) 結構?? 我也來學一下…^^ < src="http://delphi.ktop.com.tw/loadfile.php?TOPICID=8147403&CC=182217">
因為我 MSSQL 這部分不太熟, 不過我知道 MSSQL 也有這種功能機制. MSSQL On Line Help 有一些說明. ddy 有興趣可看看. 這種結構大部分運用在資料倉儲(Data Warehouse)系統中, 以提昇 資料量極大時之 SQL 效能. 尤其是 Star Schema 中 之 Fact Table. 以 Oracle 為例 : CREATE TABLE FAT_ME (...) PARTITION BY RANGE (C1) (PARTITION FAT_ME_Def_Ptn VALUES LESS THAN (MAXVALUE)); ... 'FAT_ME' Table 依照 'C1' Column 分割資料. 日後當資料量變大時, 再將資料切割: alter table FAT_ME split partition FAT_ME_Def_Ptn at (to_date('2002/01/01','yyyy/mm/dd')) into (partition FAT_ME_2002,partition FAT_ME_Def_Ptn); 將資料切割成'塊狀',除可提升效能外, 還可單獨對一個 partition 做管理, 如 Dump / Load. 各個 partition 也可分別存放於不同的 tablespace/ datafile. 案例未加而已(懶得打字),真的要運用可是要
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#13 引用回覆 回覆 發表時間:2003-03-04 14:06:41 IP:61.219.xxx.xxx 未訂閱
引言: 2.如果在不同的SQL Server,相同名稱的資料庫,可以直接Copy xxx.MDF及xxx.LDF,再附加之。
MSSQL 有進步, 粉好 ! 我老了 /*
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#14 引用回覆 回覆 發表時間:2003-03-04 15:03:52 IP:61.219.xxx.xxx 未訂閱
真的耶 ! 我執行下面 T-SQL, 真的可以複製一整個資料庫耶, 太神了, 嗯 !今天有收穫 , 謝謝 Jeffrey ! 對不起 > 抱歉 > < class="code"> use master go /* detach database */ exec sp_detach_db 'OldDB' go /* copy database files */ xp_cmdshell 'copy e:\mssdata\OldDB_Data.MDF e:\mssdata\NewDB_Data.MDF' go xp_cmdshell 'copy e:\mssdata\OldDB_Log.LDF e:\mssdata\NewDB_Log.LDF' go /* attach Old Database */ EXEC sp_attach_db @dbname = N'OldDB', @filename1 = N'e:\mssdata\OldDB_Data.MDF', @filename2 = N'e:\mssdata\OldDB_Log.LDF' go /* attach New Database using copied files */ EXEC sp_attach_db @dbname = N'NewDB', @filename1 = N'e:\mssdata\NewDB_Data.MDF', @filename2 = N'e:\mssdata\NewDB_Log.LDF' go /* Free 和 Create 一樣重要 */ 發表人 - Mickey 於 2003/03/04 15:20:52
nick167
中階會員


發表:86
回覆:133
積分:53
註冊:2003-02-12

發送簡訊給我
#15 引用回覆 回覆 發表時間:2003-03-04 15:15:34 IP:61.228.xxx.xxx 未訂閱
引言: [quote] 多謝各位大師指點,給我另外一個構想,待我測式ok, 成功與失敗,在回來與大師free 此系統是真對"CPA"行業別,各單位資料是獨立不相關 謝謝大家寶貴指導
nick167
中階會員


發表:86
回覆:133
積分:53
註冊:2003-02-12

發送簡訊給我
#16 引用回覆 回覆 發表時間:2003-03-05 10:06:09 IP:61.228.xxx.xxx 未訂閱
引言:
引言: [quote] 各位大師我回來: 分享簡單結果,檢查DataBase is False,New Create DataBase,在程式中 active=False,用程式去table 多謝各位大師指點,謝謝大家寶貴意見
nick167
中階會員


發表:86
回覆:133
積分:53
註冊:2003-02-12

發送簡訊給我
#17 引用回覆 回覆 發表時間:2003-03-05 10:09:14 IP:61.228.xxx.xxx 未訂閱
引言:
引言: [quote] 各位大師我回來: 分享簡單結果,檢查DataBase is False,New Create DataBase,在程式中 active=False,用程式去table 大家幫忙,很難取捨給指定答題得分者,如有不公平地方 敬請大家原諒,在次謝謝大家 多謝各位大師指點,謝謝大家寶貴意見
ann0509
一般會員


發表:19
回覆:42
積分:12
註冊:2010-08-09

發送簡訊給我
#18 引用回覆 回覆 發表時間:2010-08-10 10:12:01 IP:60.248.xxx.xxx 訂閱

===================引 用 ddy 文 章===================
可以試試看此指令於新產生的資料庫執行 (從HCDATA 讀取 hcdata 寫入新產生的資料庫) select * into hcdata from HCDATA.dbo.hcdata 或是於 HCDATA 執行此指令 select * into newUnit.dbo.hcdata from hcdata

你好 我想複製一整個資料庫 就是建立一個新的一模一樣的資料庫

我使用了 select * into hcdata from HCDATA.dbo.hcdata
可是都一直是複製一個新的資料表hcdata到HCDATA這個資料庫
並沒有產生新的資料庫
不知道應該要怎麼寫呢
麻煩各位幫我解答一下
謝謝
系統時間:2024-04-25 22:54:33
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!