SQL Server实用经验技巧集(2)

SQL Server实用经验技巧集(2),第1张

删除数据中重复数据的几个方法 数据库的使用过程中由于程序方面的问题有时候会碰到重复数据 重复数据导致了数据库部分设置不能正确设置…… 方法一 declare @max integer @id integerdeclare cur_rows cursor local for select 主字段 count() from 表名 group by 主字段 having count() > open cur_rowsfetch cur_rows into @id @maxwhile @@fetch_status= beginselect @max = @max set rowcount @maxdelete from 表名 where 主字段 = @idfetch cur_rows into @id @maxendclose cur_rowsset rowcount 方法二 有两个意义上的重复记录 一是完全重复的记录 也即所有字段均重复的记录 二是部分关键字段重复的记录 比如Name字段重复 而其他字段不一定重复或都重复可以忽略 对于第一种重复 比较容易解决 使用select distinct from tableName就可以得到无重复记录的结果集 如果该表需要删除重复的记录(重复记录保留 条) 可以按以下方法删除select distinct into #Tmp from tableNamedrop table tableNameselect into tableName from #Tmpdrop table #Tmp发生这种重复的原因是表设计不周产生的 增加唯一索引列即可解决 这类重复问题通常要求保留重复记录中的第一条记录 *** 作方法如下假设有重复的字段为Name Address 要求得到这两个字段唯一的结果集select identity(int ) as autoID into #Tmp from tableNameselect min(autoID) as autoID into #Tmp from #Tmp group by Name autoIDselect from #Tmp where autoID in(select autoID from #tmp )最后一个select即得到了Name Address不重复的结果集(但多了一个autoID字段 实际写时可以写在select子句中省去此列) 更改数据库中表的所属用户的两个方法 大家可能会经常碰到一个数据库备份还原到另外一台机器结果导致所有的表都不能打开了 原因是建表的时候采用了当时的数据库用户…… 更改某个表 exec sp_changeobjectowner tablename dbo 存储更改全部表 CREATE PROCEDURE dbo User_ChangeObjectOwnerBatch@OldOwner as NVARCHAR( ) @NewOwner as NVARCHAR( )ASDECLARE @Name  as NVARCHAR( )DECLARE @Owner as NVARCHAR( )DECLARE @OwnerName as NVARCHAR( )DECLARE curObject CURSOR FORselect Name = name Owner = user_name(uid)from sysobjectswhere user_name(uid)=@OldOwnerorder by nameOPEN curObjectFETCH NEXT FROM curObject INTO @Name @OwnerWHILE(@@FETCH_STATUS= )BEGINif @Owner=@OldOwnerbeginset @OwnerName = @OldOwner + + rtrim(@Name)exec sp_changeobjectowner @OwnerName @NewOwnerend select @name @NewOwner @OldOwnerFETCH NEXT FROM curObject INTO @Name @OwnerENDclose curObjectdeallocate curObjectGOSQL SERVER中直接循环写入数据没什么好说的了 大家自己看 有时候有点用处declare @i intset @i= while @i< begininsert into test (userid) values(@i)set @i=@i+ end 无数据库日志文件恢复数据库方法两则 数据库日志文件的误删或别的原因引起数据库日志的损坏 方法一 新建一个同名的数据库 再停掉sql server(注意不要分离数据库) 用原数据库的数据文件覆盖掉这个新建的数据库 再重启sql server 此时打开企业管理器时会出现置疑 先不管 执行下面的语句(注意修改其中的数据库名) 完成后一般就可以访问数据库中的数据了 这时 数据库本身一般还要问题 解决办法是 利用数据库的脚本创建一个新的数据库 并将数据导进去就行了 USE MASTERGOSP_CONFIGURE ALLOW UPDATES RECONFIGURE WITH OVERRIDEGOUPDATE SYSDATABASES SET STATUS = WHERE NAME= 置疑的数据库名 Gosp_dboption 置疑的数据库名 single user true GoDBCC CHECKDB( 置疑的数据库名 )Goupdate sysdatabases set status = where name= 置疑的数据库名 Gosp_configure allow updates reconfigure with overrideGosp_dboption 置疑的数据库名 single user false 方法二 事情的起因 昨天 系统管理员告诉我 我们一个内部应用数据库所在的磁盘空间不足了 我注意到数据库事件日志文件XXX_Data ldf文件已经增长到了 GB 于是我决意缩小这个日志文件 经过收缩数据库等 *** 作未果后 我犯了一个自进入行业以来的最大最愚蠢的错误 竟然误删除了这个日志文件!后来我看到所有论及数据库恢复的文章上都说道 无论如何都要保证数据库日志文件存在 它至关重要 甚至微软甚至有一篇KB文章讲如何只靠日志文件恢复数据库的 我真是不知道我那时候是怎么想的?!这下子坏了!这个数据库连不上了 企业管理器在它的旁边写着 (置疑) 而且最要命的 这个数据库从来没有备份了 我唯一找得到的是迁移半年前的另外一个数据库服务器 应用倒是能用了 但是少了许多记录 表和存储过程 真希望这只是一场噩梦! 没有效果的恢复步骤 附加数据库_Rambo讲过被删除日志文件中不存在活动日志时 可以这么做来恢复 分离被置疑的数据库 可以使用sp_detach_db 附加数据库 可以使用sp_attach_single_file_db但是 很遗憾 执行之后 SQL Server质疑数据文件和日志文件不符 所以无法附加数据库数据文件 DTS数据导出不行 无法读取XXX数据库 DTS Wizard报告说 初始化上下文发生错误 紧急模式怡红公子讲过没有日志用于恢复时 可以这么做 把数据库设置为emergency mode 重新建立一个log文件 把SQL Server 重新启动一下 把应用数据库设置成单用户模式 做DBCC CHECKDB 如果没有什么大问题就可以把数据库状态改回去了 记得别忘了把系统表的修改选项关掉我实践了一下 把应用数据库的数据文件移走 重新建立一个同名的数据库XXX 然后停掉SQL服务 把原来的数据文件再覆盖回来 之后 按照怡红公子的步骤走 但是 也很遗憾 除了第 步之外 其他步骤执行非常成功 可惜 重启SQL Server之后 这个应用数据库仍然是置疑!不过 让我欣慰的是 这么做之后 倒是能够Select数据了 让我大出一口气 只不过 组件使用数据库时 报告说 发生错误 未能在数据库 XXX 中运行 BEGIN TRANSACTION 因为该数据库处于回避恢复模式 最终成功恢复的全部步骤 设置数据库为紧急模式停掉SQL Server服务 把应用数据库的数据文件XXX_Data mdf移走 重新建立一个同名的数据库XXX 停掉SQL服务 把原来的数据文件再覆盖回来 运行以下语句 把该数据库设置为紧急模式 运行 Use MasterGosp_configure allow updates reconfigure with overrideGo 执行结果 DBCC 执行完毕 如果 DBCC 输出了错误信息 请与系统管理员联系 已将配置选项 allow updates 从 改为 请运行 RECONFIGURE 语句以安装 接着运行 update sysdatabases set status = where name = XXX 执行结果 (所影响的行数为 行)重启SQL Server服务 运行以下语句 把应用数据库设置为Single User模式 运行 sp_dboption XXX single user true 执行结果 命令已成功完成 ü 做DBCC CHECKDB 运行 DBCC CHECKDB( XXX ) 执行结果 XXX 的 DBCC 结果 sysobjects 的 DBCC 结果 对象 sysobjects 有 行 这些行位于 页中 sysindexes 的 DBCC 结果 对象 sysindexes 有 行 这些行位于 页中 syscolumns 的 DBCC 结果 ……… lishixinzhi/Article/program/SQLServer/201311/22060

在MS

SQL

SERVER

中:

打开查询分析器,选择数据库,在脚本编辑窗口中输入SQL语句,点击保存,即可将扩展名为SQL的脚本文件存入磁盘(默认我的文档或选择的文件夹)中。

SQLServer创建数据库:

SQLServer创建数据库的方法有两种:一种是通过运行SQL脚本;另一种是直接使用SQLServer管理套件即可创建数据库,在本节中我们使用的是后一种方法。

本教程中建立了一个名为“TaskTracker”的数据库,工具该数据库的名字,我们可以知道它的主要作用是通过它来跟踪任务的,它可以作为一个任务跟踪器应用程序的后端。这样做的好处是可以将该数据库与其他数据库区分,因为一个SQLServer管理套件的数据库是不止一个的。

SQLSever系统数据库

在我们安装SQLServer的时候,会自动创建下面的四个数据库。

master

master数据库记录了所有的SQLServer数据库系统的系统级信息,如用户帐户,配置设置,并在所有其他数据库信息。

model

model数据库是一个模板数据库。每当创建一个新的数据库(包括系统数据库的TempDB),会创建一个以Model数据库为副本数据库,并更改成你创建数据库时所用的名称。

msdb

msdb数据库是SQLServer代理的数据库,用于配置警报使用SQLServer代理和预定作业等。

tempdb

tempddb数据库是由SQLServer用于暂时存储数据的,这其中包含所有临时表,临时存储过程,并通过SQLServer生成任何其他临时存储需求。

开始创建一个新的数据库

下述步骤将展示如何使用SQLServer管理套件在SQLServer2014创建数据库。

在对象资源管理器中,右键单击数据库文件夹/图标,然后选择Newdatabase:

创建目录

mkdir d:\oracle\product\ \database

mkdir e:\oracle\admin\Ora g\bdump

mkdir e:\oracle\admin\Ora g\cdump

mkdir e:\oracle\admin\Ora g\create

mkdir e:\oracle\admin\Ora g\pfile

mkdir e:\oracle\admin\Ora g\udump

mkdir e:\oracle\flash_recovery_area

mkdir e:\oracle\oradata

mkdir e:\oracle\oradata\Ora g

生成windows服务 创建密码文件 在cmd命令下运行

set ORACLE_SID=dbca 绿色部分设置oracle 实例名为 为ora g

d:\oracle\product\ \DB_ \bin\oradim exe new sid ORA G startmode manual spfile d:\oracle\product\ \DB_ \bin\oradim exe edit sid ORA G startmode a spfile

创建一个实例名为dbca 并且有手动启动方式改为自动启动

d:\oracle\product\ \DB_ \bin\orapwd exe file=d:\oracle\product\ \db_ \PWDOra g ora password=sysPassword force=y

用oracle自带的orapwd 为sys用户创建一个默认的密码为sysPassword

执行创建数据库脚本

D:\oracle\ora \bin\sqlplus /nolog @D:\oracle\admin\dbca\scripts\CreateDB sql

D:\oracle\ora \bin\sqlplus /nolog @D:\oracle\admin\dbca\scripts\CreateDBFiles sql

D:\oracle\ora \bin\sqlplus /nolog @D:\oracle\admin\dbca\scripts\CreateDBCatalog sql

D:\oracle\ora \bin\sqlplus /nolog @D:\oracle\admin\dbca\scripts\postDBCreation sql

黑体部分就是创建数据库要调用的脚本

第一 CreateDB sql

connect SYS/change_on_install as SYSDBA 这是刚刚我们设置的密码以sysdba身份连接到数据库

connect SYS/change_on_install as SYSDBA 这是刚刚我们设置的密码以sysdba身份连接到数据库

set echo on

spool D:\oracle\ora \assistants\dbca\logs\CreateDB log 写日志

startup nomount pfile= D:\oracle\admin\dbca\scripts\init ora ; 调用参数文件 启动数据库到只装载实例阶段

CREATE DATABASE dbca

MAXINSTANCES

MAXLOGHISTORY

MAXLOGFILES

MAXLOGMEMBERS

MAXDATAFILES 控制文件记录的相关最大日志数 日志组 最大数据文件数等限制

DATAFILE D:\oracle\oradata\dbca\system dbf SIZE M REUSE AUTOEXTEND ON NEXT K MAXSIZE UNLIMITED

EXTENT MANAGEMENT LOCAL

DEFAULT TEMPORARY TABLESPACE TEMP TEMPFILE D:\oracle\oradata\dbca\temp dbf SIZE M REUSE AUTOEXTEND ON NEXT K MAXSIZE UNLIMITED

UNDO TABLESPACE UNDOTBS DATAFILE D:\oracle\oradata\dbca\undotbs dbf SIZE M REUSE AUTOEXTEND ON NEXT K MAXSIZE UNLIMITED 创建系统 临时 回滚 表空间ITPUB个人空间!dJ l {!i W r f

CHARACTER SET ZHS GBK

NATIONAL CHARACTER SET AL UTF 字符集

LOGFILE GROUP ( D:\oracle\oradata\dbca\redo log ) SIZE K

GROUP ( D:\oracle\oradata\dbca\redo log ) SIZE K

GROUP ( D:\oracle\oradata\dbca\redo log ) SIZE K; 创建日志文件租和成员

spool off

exit;

第二 CreateDBFiles sql

connect SYS/change_on_install as SYSDBA

set echo on

spool D:\oracle\ora \assistants\dbca\logs\CreateDBFiles log

CREATE TABLESPACE INDX LOGGING DATAFILE D:\oracle\oradata\dbca\indx dbf SIZE M REUSE AUTOEXTEND ON NEXT K MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO ;

CREATE TABLESPACE TOOLS LOGGING DATAFILE D:\oracle\oradata\dbca\tools dbf SIZE M REUSE AUTOEXTEND ON NEXT K MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO ;

CREATE TABLESPACE USERS LOGGING DATAFILE D:\oracle\oradata\dbca\users dbf SIZE M REUSE AUTOEXTEND ON NEXT K MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO ; 创建相关用户要用到的表空间

spool off

第三:CreateDBCatalog sql

创建system数据字典 存放到system表空间 相关表 视图等

connect SYS/change_on_install as SYSDBA

set echo on

spool D:\oracle\ora \assistants\dbca\logs\CreateDBCatalog log

@D:\oracle\ora \rdbms\admin\catalog sql;

@D:\oracle\ora \rdbms\admin\catexp sql;

@D:\oracle\ora \rdbms\admin\catblock sql;

@D:\oracle\ora \rdbms\admin\catproc sql;

@D:\oracle\ora \rdbms\admin\catoctk sql;

@D:\oracle\ora \rdbms\admin\owminst plb;

connect SYSTEM/manager

@D:\oracle\ora \sqlplus\admin\pupbld sql;

connect SYSTEM/manager

set echo on

spool D:\oracle\ora \assistants\dbca\logs\sqlPlusHelp log

@D:\oracle\ora \sqlplus\admin\help\hlpbld sql helpus sql;

spool off

spool off

exit;

第四: postDBCreation sql

connect SYS/change_on_install as SYSDBA

set echo on

spool D:\oracle\ora \assistants\dbca\logs\postDBCreation log

@D:\oracle\ora \rdbms\admin\utlrp sql; 编译相关视图 包对象等

shutdown ; 关闭数据库

connect SYS/change_on_install as SYSDBA

set echo on

spool D:\oracle\ora \assistants\dbca\logs\postDBCreation log

create spfile= D:\oracle\ora \database\spfiledbca ora FROM pfile= D:\oracle\admin\dbca\scripts\init ora ;

创建服务器参数文件代替文件初始化参数文件 方便有时在不重启数据库的情况下可以使参数生效

从上面可以看到spfile文件的存放位置

startup ; 启动数据库 创建数据库完成 从上面可以看出 创建数据库有以下 个步骤

Step : 创建相关trace目录文件夹

Step :创建实例 密码 启动方式

Step :创建初始化参数文件 init ora

Step : 连接到实例

Step : 启动实例到nomount状态

Step :创建数据库

Step :创建表空间

Step : 运行脚本创建数据字典

Step : 创建服务器参数文件(这步不是必须的 但oracle建议做这步) 好处会在以后的总结中列出

下面也贴出linux下脚本 和windows下几乎差不多

#!/bin/sh

mkdir /oradata/ora i

mkdir /oradata/ora i/controlfile

mkdir /oradata/ora i/redofile

mkdir /orasys/oracle/admin

mkdir /orasys/oracle/admin/ora i

mkdir /orasys/oracle/admin/ora i/bdump

mkdir /orasys/oracle/admin/ora i/cdump

mkdir /orasys/oracle/admin/ora i/create

mkdir /orasys/oracle/admin/ora i/udump

mkdir /orasys/oracle/admin/ora i/pfile

cp init ora /orasys/oracle/product/ /dbs/

export ORACLE_BASE=/orasys/oracle

export ORACLE_HOME=$ORACLE_BASE/product/

export ORACLE_SID=ora i

export ORA_NLS =$ORACLE_HOME/omon/nls/admin/data

LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib

LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib

export LD_LIBRARY_PATH

export PATH=$PATH:$ORACLE_HOME/bin

echo Add this entry in the oratab: ora i:/orasys/oracle/product/ :Y

/orasys/oracle/product/ /bin/orapwd file=/orasys/oracle/product/ /dbs/orapwora i password=change_on_install

/orasys/oracle/product/ /bin/sqlplus /nolog @/home/oracle/create_script/CreateDB sql

/orasys/oracle/product/ /bin/sqlplus /nolog @/home/oracle/create_script/CreateDBFiles sql

/orasys/oracle/product/ /bin/sqlplus /nolog @/home/oracle/create_script/CreateDBCatalog sql

lishixinzhi/Article/program/Oracle/201311/17648

以上就是关于SQL Server实用经验技巧集(2)全部的内容,包括:SQL Server实用经验技巧集(2)、如何创建sql语句脚本、怎样使用SQLSERVER新建立一个数据库(sqlserver如何建立数据库)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/9677901.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存