五、备份数据库
BACKUP DATABASE database_name TO <backup_device> [ WITH [ Differential ] [ [ , ] Format | Noformat ] [ [ ,] {Init | Noinit }]
<backup_device> ::= { { Disk | Tape } = 'physical_backup_device_name'}
// database_name:备份的数据库名称
// TO:关键字,指定备份设备
// <backup_device>:一个备份设备,用于存储备份数据,DISK表示在磁盘上存储备份数据, TAPE表示在磁带设备上存
储, 'physical_backup_device_name'表示磁盘或磁带上的物理路径,通常用于指定一个备份文件
// Differential:指定数据库备份或文件备份应该与上一次完整备份后改变的数据库或文件部分保持一致
// Format: 表示重写媒体头
// Noformat: 表示指定媒体头不应写入所有用于该备份操作的卷中,并且不重写该备份设备
// Init:表示重写所有备份集,但保留媒体头
// Noinit:表示备份集将追加到指定的磁盘或磁带设备上,以保留现有的备份集,该选项是默认设置
例:在JavaBean "ConnDB"中增加executeCall( ) 方法:
public int executeCall (String sql ){
int result=0;
try{
conn=DriverManager.getConnection
("jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=master:user=sa;password="");
CallableStatement cs=null;
cs=conn.prepareCall(sql);
cs.execute();
result=1;
}catch(SQLException e){
result=0;
System.out.println(e.getMessage());
}
return result;
}
在JSP中调用:
<jsp:useBean id="conn" class="com.ConnDB" scope="page" />
<%
request.setCharacterEncoding("gb2312");
String bakname=request.getParameter("bakname");
bakname=application.getRealPath("/")+"backup//"+bakname;
try{
String sql="BACKUP DATABASE db_jsdq11 TO DISK='"+bakname+" ' ";
int rtn=conn.executeCall(sql);
if(rtn==1){
out.print("<script language='javascript'>alert('Database backup complete!');
window.location.href='index.jsp';</script>");
System.out.println("Database backup location:"+bakname);
}else{
out.print("<script language='javascript'>alert('Database backup failed!");
window.location.href='index.jsp';</script>);
}
}catch(SQLException e){
System.out.println("Database backup failed reason: "+e.getMessage( ));
}
conn.close();
%>
对于备份到磁盘的情况,如果输入一个相对路径名,备份文件将存储到默认的备份目录中,该目录在安装时被设置并存储
在KEY_LOCAL_MACHINE/Software/Microsoft/MSSQLServer/MSSQLServer目录下的BackupDirection注册表键值中
六、还原数据库
RESTORE DATABASE database_name [ From <backup_device> [ , ... n]] [With [ File=file_number] ]
例:<jsp:useBean id="conn" class="com.ConnDB" scope="page" />
<%
request.setCharacterEncoding("gb2312");
String bakname=request.getParameter("bakname");
bakname=application.getRealPath("/")+"backup//"+bakname;
try{
String sql="RESTORE DATABASE db_jsdq11 FROM DISK=' "+bakname+" ' ";
System.out.println("SQL:"+sql);
int rtn=conn.executeCall(sql);
if(rtn==1){
out.print("<script type='javascript'> alert('Database restore complete!');
window.location.href='index.jsp'; </script>");
}else{
out.print("<script type='javascript'> alert('Database restore failed!');
window.location.href='index.jsp';</script>");
}
}catch(Excepton e){
System.out.println(e.getMessage());
}
conn.close();
%>
在进行还原时,保证当前没有用户访问要还原的数据库,否则会导致还原操作失败
七、附加数据库
sp_attach_db [ @dbname= ] 'dbname' , [ @filename1=] 'filename_n' [ , ... ]
// [ @dbname=] 'dbname':要附加到服务器的数据库的名称,该名称必须是唯一的
// dbname:数据类型为sysname, 默认值为null
// [ @filename1= ] 'filename_n':数据库文件的物理名称,包括路径。filename_n的数据类型为nvarchar(260),默认值为null。最多
可指定16个文件名,参数名称以@filename1开始,递增到@filename16。文件名列表必须包括
主文件,主文件包含指向数据库中其他文件的系统表。该列表还必须包括数据库分离后所有
被移动的文件。
例:<jsp:useBean id="conn" class="com.ConnDB" scope="page" />
<%
request.setCharacterEncoding("gb2312");
String dbname=request.getParameter("dbName");
String dbpath=request.getParameter("dbPath");
dbpath=application.getRealPath("/")+"Database//"+dbpath;
String logpath=request.getParameter("logPath");
logpath=application.getRealPath("/")+"Database//"+logpath;
try{
String sql="EXEC sp_attach_db @dbname=' "+dbname+" ',@filename1=' "+dbpath+" ',@filename2=' "+logpath+" ' ";
System.out.print("SQL: "+sql);
int rtn=conn.executeCall(sql);
if(rtn==1){
out.print("<script language='javascript'>alert('Database attach complete!');
window.location.href='index.jsp';</script>");
}else{
out.print("<script language='javascript'>alert('Database attach failed!');
window.location.href='index.jsp'; </script>");
}
}catch(Exception e){
System.out.println(e.getMessage());
}
conn.close();
%>
八、分离数据库
分离数据库只是将数据库从服务器上分离,而不是删除数据库文件,在需要时还可以将分离的数据库附加到服务器上。
sp_detach_db [ @dbname= ] 'dbname' [ , [ @skipchecks=] 'skipchecks' ]
// [ @skipchecks=] 'skipchecks' :skipchecks的数据类型为nvarchar(10),默认值为null.如果为true,则跳过UPDATE STATISTICS;
如果为False,则运行UPDATE STATISTICS。对于要移动到只读媒体上的数据库,此选项很有用。
只有sysadmin固定服务器角色的成员才能执行此功能。
例:<jsp:useBean id="conn" class="con.ConnDB" scope="page" />
<%
request.setCharacterEncoding("gb2312");
String detachname=request.getParameter("detachName");
try{
String sql="EXEC sp_detach_db ' "+detachname+" ', 'True' ";
System.out.println("SQL: "+sql);
int rtn=conn.executeCall(sql);
if(rtn==1){
out.print("<script type='javascritp'> alert('Database detach complete!");
window.location.href='index.jsp';</script>");
}else{
out.print("<script type='javascript'> alert('Database detach failed!");
window.location.href='index.jsp';</script>");
}
}catch(Exception e){
System.out.println(e.getMessage());
}
conn.close();
%>
九、创建视图
CREATE VIEW [<database_name>.][<owner>.]view_name[(column[,..n])] [ WITH ENCRYPTION ] AS select_statement
[WITH CHECK OPTION]
view_name:表示视图的名称
column:表示视图中的列名,如未指定,则视图列将获得Select语句中的列相同的名称。
with encryption:指定将create view语句文本存储到系统表时进行加密。加密后,可以使用任何人不能通过系统存
储过程或其他方法从系统表中检索视图定义文本。
select_statement:定义视图的select语句。
with check option:规定在视图上执行的所有数据修改语句都必须符合由select_statement设置的准则。
十、修改视图
ALERT VIEW view_name AS select_statement
十一、删除视图
DROP VIEW view_name [ , ... n]