什么是sp_attach_db过程

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么是sp_attach_db过程相关的知识,希望对你有一定的参考价值。

在SQL Server里,如果不小心把数据库给删了 怎么样才能恢复过来呢

恐怕不能回复吧,不过如果你安装了一键恢复功能的软件的话,那可以点一下,重新启动,就可以了。
如果你没有安装,那恐怕得重新安装系统才行。
当使用 sp_attach_db 系统存储过程附加数据库时- -
Tag: 当使用 sp_attach_db 系统存储过程附加数据库时
//附加数据库
sp_attach_db
当使用 sp_attach_db 系统存储过程附加数据库时。

sp_attach_db:将数据库附加到服务器。
语法
sp_attach_db [ @dbname = ] 'dbname' , [ @filename1 = ] 'filename_n' [ ,...16 ]

参数
[@dbname =] 'dbname'
要附加到服务器的数据库的名称。该名称必须是唯一的。dbname 的数据类型为 sysname,默认值为 NULL。

[@filename1 =] 'filename_n'

数据库文件的物理名称,包括路径。filename_n 的数据类型为 nvarchar(260),默认值为 NULL。最多可以指定 16 个文件名。
参数名称以 @filename1 开始,递增到 @filename16。文件名列表至少必须包括主文件,主文件包含指向数据库中其它文件的系统表。
该列表还必须包括数据库分离后所有被移动的文件。

返回代码值:0(成功)或 1(失败)

eg:下面的示例将 pubs 中的两个文件附加到当前服务器。

EXEC sp_attach_db @dbname = N'pubs',
@filename1 = N'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs.mdf',
@filename2 = N'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs_log.ldf'

EXEC sp_attach_db @dbname = N'Ty20051029101451aaa',
@filename1 = N'd:\5屏幕\Ty20051029101451aaa_data.mdf',
@filename2 = N'd:\5屏幕\Ty20051029101451aaa_log.ldf'
---解决问题了

//删除数据库
DROP DATABASE
从Microsoft? SQL Server? 删除一个或多个数据库。删除数据库将删除数据库所使用的数据库文件和磁盘文件。

语法 :DROP DATABASE database_name [ ,...n ]

参数 :database_name 指定要删除的数据库名称。从 master 数据库中执行 sp_helpdb 以查看数据库列表。
eg: exec sp_helpdb database_name

exec Drpo DataBase [Ty20051029101451aaa]

//分离数据库
可以使用 sp_detach_db 存储过程分离该数据库,然后使用带有 FOR ATTACH 子句的 CREATE DATABASE 重新附加。
sp_detach_db Archive
GO
CREATE DATABASE Archive
ON PRIMARY (FILENAME = 'c:\program files\microsoft sqlserver\mssql\data\archdat1.mdf')
FOR ATTACH
GO

//显示当前数据库信息
--select * from Master..sysDatabases

//新建---不行啊
CREATE DATABASE TestOA
ALTER DATABASE TestOA SET OFFLINE WITH ROLLBACK IMMEDIATE
RESTORE DATABASE TestOA From disk='C:\Documents and Settings\Administrator\桌面\帐套\data\Template.Dat'
ALTER DATABASE TestOA SET OFFLINE WITH ROLLBACK IMMEDIATE

exec sp_detach_db Km20051030011601 --分离数据库
exec sp_attach_single_file_db km20051030011601,'D:\TestDatabase\Km20051030011601.mdf'--只附加.mdf文件
参考技术A drop database_name 还是delete database_name?前者无法恢复!后者,类似回收站,可还原。

oracle中raise_application_error自定义错误。

raise_application_error(-20001,'Rom is ready booked!');能详细讲解下这方法的使用场景吗?这方法能把错误码和提示文字赋给返回变量吗?

create index t_idx on t(nvl(x,-1));请问下这个索引,表t的x列什么查询条件时才会用到这个索引。

RAISE_APPLICATION_ERROR错误的原因:

调用DBMS_STANDARD(ORACLE提供的包)包所定义的RAISE_APPLICATION_ERROR过程,可以重新定义异常错误消息,将应用程序专有的错误从服务器端转达到客户端应用程序。它为应用程序提供了一种与ORACLE交互的方法。

用户定义的异常错误是通过显式使用RAISE语句来触发。

在PL/SQL 块的定义部分定义异常情况 ;RAISE <异常情况>;在PL/SQL 块的异常情况处理部分对异常情况做出相应的处理。

语法如下:

1、RAISE_APPLICATION_ERROR(error_number,error_message,[keep_errors]);

2、error_number是从–20,000到–20,999之间的参数,这样就不会与ORACLE的任何错误代码发生冲突;

3、error_message 是相应的提示信息(< 2048 字节)。

keep_errors为可选,如果keep_errors=TRUE,则新错误将被添加到已经引发的错误列表中。如果keep_errors=FALSE(缺省),则新错误将替换当前的错误列表。

扩展资料:

ORACLE数据库系统为具有管理ORACLE数据库功能的计算机系统。每一个运行的ORACLE数据库与一个ORACLE实例(INSTANCE)相联系。

一个ORACLE实例为存取和控制一数据库的软件机制。每一次在数据库服务器上启动一数据库时,称为系统全局区(SYSTEMGLOBALAREA)的一内存区(简称SGA)被分配,有一个或多个ORACLE进程被启动。

该SGA 和 ORACLE进程的结合称为一个ORACLE数据库实例。一个实例的SGA和进程为管理数据库数据、为该数据库一个或多个用户服务而工作。

该SGA 和 ORACLE进程的结合称为一个ORACLE数据库实例。一个实例的SGA和进程为管理数据库数据、为该数据库一个或多个用户服务而工作。

参考资料:百度百科-Oracle系统

参考技术A 看一个例子吧!
eg:
CREATE OR REPLACE TRIGGER change_teacher
BEFORE INSERT OR UPDATE OR DELETE ON teachers
BEGIN
IF (TO_CHAR(SYSDATE, 'HH24') NOT BETWEEN '8' AND '17')
OR (TO_CHAR(SYSDATE, 'DY',
'nls date_langudage = american') IN ('SAT', 'SUN'))
THEN
CASE
WHEN INSERTING THEN
RAISE_APPLICATION_ERROR
(-20001, '在非工作时间不能增加教师信息。');
WHEN UPDATING THEN
RAISE_APPLICATION_ERROR
(-20002, '在非工作时间不能修改教师信息。');
WHEN DELETING THEN
RAISE_APPLICATION_ERROR
(-20003, '在非工作时间不能删除教师信息。');
END CASE;
END IF;
END change_teacher;

DELETE FROM teachers;本回答被提问者采纳
参考技术B RAISE_APPLICATION_ERROR 是将应用程序专有的错误从服务器端转达到客户端应用程序(其他机器上的SQLPLUS或者其他前台开发语言)

RAISE_APPLICATION_ERROR 的声明:

PROCEDURE RAISE_APPLICATION_ERROR( error_number_in IN NUMBER, error_msg_in IN VARCHAR2);
里面的错误代码和内容,都是自定义的。说明是自定义,当然就不是系统中已经命名存在的错误类别,是属于一种自定义事务错误类型,才调用此函数。error_number_in 之容许从 -20000 到 -20999 之间,这样就不会与 ORACLE 的任何错误代码发生冲突。error_msg_in 的长度不能超过 2k,否则截取 2k。

以上是关于什么是sp_attach_db过程的主要内容,如果未能解决你的问题,请参考以下文章

谁能帮我说下C语言中的堆栈

如何在查询分析器里面写SQL语句来附加数据库

SQL语句中,查询一个结果,满足表1的A条件,满足表2的B条件,怎么写?

什么是叫WINDOWS SP2,SP2是什么意思

求英文高手翻译---租约协议

对象的 _ 属性在程序运行过程中,只能被引用,不能被修改。