找回密码
 注册账号

QQ登录

只需一步,快速开始

手机号码,快捷登录

手机号码,快捷登录

初学者课程:T3自学|T6自学|U8自学软件下载课件下载工具下载资料:通资料|U8资料|NC|培训|年结积分规则 | 使用常见问题Q&A
知识库:U8 | | NC | U9 | OA | 政务U8|U9|NCC|NC65|NC65客开|NCC客开新手必读 | 任务 | 快速增金币用友QQ群[微信群]
查看: 559|回复: 13

[技巧] 免费的哈(命令)

[复制链接]
发表于 2024-1-3 16:42:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册账号

×

=======Oracle数据库sys密码修改=======
CMD运行:
sqlplus /nolog
conn /as sysdba
alter user sys identified by admin123;
alter user sys account unlock;

==========账号一直被锁==========
查看:
SELECT * FROM dba_profiles;
修改:
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;
ALTER PROFILE DEFAULT LIMIT FAILED_LOGIN_ATTEMPTS UNLIMITED;

=======Oracle数据库,局域网连接=======
修改
C:\app\product\11.2.0\dbhome_1\NETWORK\ADMIN\listener.ora

=======Oracle赋予用户sysdba权限=======
Navicat 使用 sys 账户连接数据库
编辑连接---高级---角色选择 SYSDBA
执行查询:
grant sysdba to username;

===========创建数据库===========
CREATE TABLESPACE NNC_DATA01 DATAFILE 'D:\NC_Data\NNC_DATA01.dbf' SIZE 512M AUTOEXTEND ON NEXT 64M EXTENT MANAGEMENT LOCAL UNIFORM SIZE 256K ;
CREATE TABLESPACE NNC_INDEX01 DATAFILE 'D:\NC_Data\NNC_INDEX01.dbf' SIZE 512M AUTOEXTEND ON NEXT 64M EXTENT MANAGEMENT LOCAL UNIFORM SIZE 128K ;
CREATE USER NC65 IDENTIFIED BY "lsxb@6323777" DEFAULT TABLESPACE NNC_DATA01 TEMPORARY TABLESPACE temp;
GRANT connect,dba to NC65;

查看临时表空间:
SELECT TABLESPACE_NAME,FILE_NAME,bytes/1024/1024 FILE_SIZE,AUTOEXTENSIBLE FROM DBA_TEMP_FILES;
结果
TABLESPACE_NAME                FILE_NAME                        FILE_SIZE                AUTOEXTENSIBLE
TEMP                        D:\APP\ORADATA\ORCL\TEMP01.DBF        29                YES

NC65临时表空间要求:
ALTER DATABASE TEMPFILE 'D:\APP\ORADATA\ORCL\TEMP01.DBF' AUTOEXTEND ON NEXT 256M MAXSIZE 10240M;




=======删除 用户 和 表空间=======
断开用户连接
select sid,serial#,USERNAME from v$session where username='NC65';
alter system kill session 'sid,serial'
alter system kill session '67,79';
alter system kill session '97,119';
alter system kill session '101,37';
alter system kill session '128,405';
alter system kill session '130,61';
alter system kill session '159,323';
alter system kill session '162,217';
alter system kill session '191,131';
alter system kill session '224,3';

步骤一:  删除用户
DROP USER NC65 CASCADE;
说明: 删除 NC65 用户,只是删除了该 NC65 用户下的schema objects,是不会删除相应的表空间。

步骤二: 删除表空间和物理文件
DROP TABLESPACE NNC_DATA01 INCLUDING CONTENTS AND DATAFILES;
DROP TABLESPACE NNC_INDEX01 INCLUDING CONTENTS AND DATAFILES;




========如何修改表空间名称=======
一、环境准备
操作前把使用到数据库的所有服务停止

二、修改表空间名称

1、 使用oracle用户登录执行
    $sqlplus / as sysdba
2、 执行修改表空间命令如下
    SQL> alter tablespace  NNC_DATA01 rename to NNC_DATA02;
    SQL> alter tablespace  NNC_INDEX01 rename to NNC_INDEX02;
    注:可连续对多个表空间进行重命名
4、 确认表空间名已经修改
    SQL>select name from v$tablespace;
    SQL>exit
三、启动数据相关服务



=======数据库导出导入=======
CMD下运行,不是 sqlplus 里面
导出:
expdp '/ as sysdba' schemas=NC65 directory=DATA_PUMP_DIR dumpfile=HJNC.dmp logfile=HJNC.log
导入:
impdp '/ as sysdba' remap_schema=NC65:NCTH directory=DATA_PUMP_DIR DUMPFILE=NC65.dmp logfile=12.log table_exists_action=replace content=all
说明:remap_schema=老用户名:新用户名











发表于 2024-1-10 22:57:02 | 显示全部楼层
看看先感谢分享!!
回复 点赞 1 拍砖 0

使用道具 举报

发表于 2024-1-3 18:46:39 | 显示全部楼层
看不懂,还是顶一下
回复 点赞 拍砖

使用道具 举报

发表于 2024-1-4 09:01:47 | 显示全部楼层
感谢分享!!努力学习
回复 点赞 拍砖

使用道具 举报

发表于 2024-1-4 09:27:15 | 显示全部楼层
学习了,多谢分享
回复 点赞 拍砖

使用道具 举报

发表于 2024-1-4 11:13:33 | 显示全部楼层
66666666        
回复 点赞 拍砖

使用道具 举报

发表于 2024-1-4 11:23:50 | 显示全部楼层
感谢分享
回复 点赞 拍砖

使用道具 举报

发表于 2024-1-9 09:15:09 | 显示全部楼层
感谢,虽然不会操作,但学习到了。
回复 点赞 拍砖

使用道具 举报

发表于 2024-1-9 13:01:10 | 显示全部楼层
感谢分享
回复 点赞 拍砖

使用道具 举报

 楼主| 发表于 2024-1-9 14:32:50 | 显示全部楼层
-----------------------------------------------------------------
--查询用友版本号
use ufsystem
go
select * from UA_Version
go
-----------------------------------------------------------------
--查看系统用户信息表
use ufsystem
select         cUser_Id as 操作员编码,
        cUser_Name as 操作员名称,
        nState as 是否停用 ,
        iAdmin as 是否帐套主管理,
        cDept as 所属部门,
        cBelongGrp as 所在组,
        nState as 是否停用
from UA_User
--查看具有帐套主管身份的操作员
select         cUser_Id as 操作员编码,
        cUser_Name as 操作员名称
from UA_User where iAdmin=1;
--查看被停用的操作员
select         cUser_Id as 操作员编码,
        cUser_Name as 操作员名称
from UA_User where nState=1;


--帐套主子表相关信息
use ufsystem
--帐套主表
select
  cAcc_Id as 账套号,
  cAcc_Name as 账套名称,
  cAcc_Path as 账套路径,
  iYear as 启用会计期年,
  iMonth as 启用会计期月,
  cAcc_Master as 账套主管,
  cCurCode as 本币代码,
  cCurName as 本币名称,
  cUnitName as 单位名称,
  cUnitAbbre as 单位简称,
  cUnitAddr as 单位地址,
  cUnitZap as  邮政编码,
  cUnitTel as  联系电话,
  cUnitFax as  传真,
  cUnitEMail as  电子邮件,
  cUnitTaxNo as  税号,
  cUnitLP as  法人,
  cEntType as  企业类型,
  cTradeKind as  行业类型,
  cIsCompanyVer as  是否集团版,
  cDomain as  域名,  
  cDescription as 备注,  
  cOrgCode as 机构编码,
  iSysID as 账套内部标识
from ua_account
--帐套子表
select cAcc_Id as 账套号,
iYear as 账套年度,
  cSub_Id as 模块标识,
  bIsDelete as 是否删除,
  bClosing as 是否关闭,
  iModiPeri as 会计期间,
  dSubSysUsed as 启用会计日期,
  cUser_Id as 操作员,
  dSubOriDate as 启用自然日期
from ua_account_sub

--当客户的数据在其它机器上做的升级然后拷回到原机器
/*拷回的数据,通过‘系统管理’在原机器上引入后,并不会在
ufsystem数据库中的ua_account_sub这个帐套子表中回写上一年度的bClosing字段来关闭上一年度
*/
--比如002帐套结转后年度为2010,则用于关闭上一(2009)年度的sql如下:
select * from ua_account_sub where cAcc_Id='002' and iYear=2008

update ua_account_sub set bclosing=0
where cAcc_Id='002' and iYear=2008
-----------------------------------------------------------------
--清除异常任务及单据锁定
use ufsystem
delete from ua_task
delete from ua_tasklog
go
delete from ufsystem..ua_task
delete from ufsystem..ua_tasklog
go

Select *
From ua_task
Where(cacc_id='***')  --注:(***为账套号)


--科目锁定的解决
/*XX科目已经被用户[XX]锁定”
或“科目(xxxxxx)正在被机器(xxxx)上的用户(xxx)进行(xxxx)操作锁定,请稍候再试”。
*/
use UFDATA_002_2008
select  ccode as 科目编码,
  cauth as 功能名称,
  cuser as 用户名,
  cmachine as 机器名  
from GL_mccontrol

delete from GL_mccontrol
-----------------------------------------------------------------
--如何取得一个数据表的所有列名
/*
方法如下:先从SYSTEMOBJECT系统表中取得数据表的SYSTEMID,然后再SYSCOLUMN表中取得该数据表的所有列名。
SQL语句如下:*/
/*(方法一*/
select * from ufsystem..ua_account
select * from syscolumns where id=object_id('ua_account')

declare @objid int,@objname char(40)
set @objname = 'ua_account'
select @objid = id from sysobjects where id = object_id(@objname)
select 'Column_name' = name from syscolumns where id = @objid order by colid

/*(方法二(邹建)*/
---跟踪程序的运行就可以了.   
/*   
   
  开始--程序--MS   SQLSERVER   
  --事件探察器(SQL   Profiler)   
  --文件   
  --新建--跟踪...   
  --设置要跟踪的服务器的信息(连接服务器)--确定   
  --设置跟踪的项目...   
  --然后数据库的调用情况就会显示出来   
   
  在跟踪项目设置中,如果不熟悉的话,一般用默认设置   
  筛选项目有几个可以注意一下:   
   
  1.DatabaseName   同于你要监测的数据库名(不过这个好像不起作用,我的电脑上设置无效)   
  2.DatabaseID       同于你要检测的数据库的dbid,可以用   select   db_id(N'你要监测的库名')得到dbid   
  3.ObjectName       同于你要监测的对象名,例如表名,视图名等   
  4.ObjectID           同于你要监测的对象的id,可以用   select   object_id(N'你要监测的对象名')得到id   
  5.Error                 同于错误,如果经常出现某个编号的错误,则针对此错误号   
  6.Seccess             同于0,失败,1,成功,如果是排错,就过滤掉成功的处理
*/

/*方法三:*/
--如果直接查询,可以参考我的这段代码:   
   
  if   exists   (select   *   from   dbo.sysobjects   where   id   =   object_id(N'[dbo].[p_search]')   and   OBJECTPROPERTY(id,   N'IsProcedure')   =   1)   
  drop   procedure   [dbo].[p_search]   
  GO   
   
  /*--搜索某个字符串在那个表的那个字段中   
   
  --邹建   2004.10(引用请保留此信息)--*/   
   
  /*--调用示例   
  use   pubs   
  exec   p_search   N'l'   
  --*/   
  create   proc   p_search   
  @str   Nvarchar(1000)   --要搜索的字符串   
  as   
  if   @str   is   null   return   
   
  declare   @s   Nvarchar(4000)   
  create   table   #t(表名   sysname,字段名   sysname)   
   
  declare   tb   cursor   local   for   
  select   s='if   exists(select   1   from   ['+replace(b.name,']',']]')+']   where   ['+a.name+']   like   N''%'+@str+'%'')   
  print   ''所在的表及字段:   ['+b.name+'].['+a.name+']'''   
  from   syscolumns   a   join   sysobjects   b   on   a.id=b.id   
  where   b.xtype='U'   and   a.status>=0   
  and   a.xtype   in(175,239,99,35,231,167)   
  open   tb   
  fetch   next   from   tb   into   @s   
  while   @@fetch_status=0   
  begin   
  exec(@s)   
  fetch   next   from   tb   into   @s   
  end   
  close   tb   
  deallocate   tb   
  go   

-----------------------------------------------------------------
-- 通过SQL语句来更改用户的密码
/*修改别人的,需要sysadmin  role    */
EXEC  sp_password  NULL,  'newpassword',  'User'
/*如果帐号为SA执行*/
EXEC  sp_password  NULL,  'newpassword',  sa  

-----------------------------------------------------------------
-- 通怎么判断出一个表的哪些字段不允许为空?
select  COLUMN_NAME  from  INFORMATION_SCHEMA.COLUMNS  where  IS_NULLABLE='NO'  and  TABLE_NAME='ua_account'  


-----------------------------------------------------------------
-- 如何在数据库里找到含有相同字段的表?
-- a. 查已知列名的情况
SELECT  b.name  as  TableName,a.name  as  columnname  
From  syscolumns    a  INNER  JOIN    sysobjects  b   
ON  a.id=b.id   
AND  b.type='U'   
AND  a.name='cacc_id'  --本例如:cacc_id列

-- b. 未知列名查所有在不同表出现过的列名
Select  o.name  As  tablename,s1.name  As  columnname  
From  syscolumns  s1,  sysobjects  o  
Where  s1.id  =  o.id  
   And  o.type  =  'U'  
   And  Exists  (  
       Select  1  From  syscolumns  s2   
       Where  s1.name  =  s2.name   
       And  s1.id  <>  s2.id  
       )
-----------------------------------------------------------------
-- 查询第xxx行数据
-- 假设id是主键:  
select  *  
from  (select  top  xxx  *  from  yourtable)  aa  
where  not  exists(select  1  from  (select  top  xxx-1  *  from  yourtable)  bb  where  aa.id=bb.id)
-- 如果使用游标也是可以的  
fetch  absolute  [number]  from  [cursor_name]  
-- 行数为绝对行数

-----------------------------------------------------------------
-- SQL Server日期计算
/*a. 一个月的第一天*/
SELECT  DATEADD(mm,  DATEDIFF(mm,0,getdate()),  0)  
/*b. 本周的星期一*/
SELECT  DATEADD(wk,  DATEDIFF(wk,0,getdate()),  0)
/*c. 一年的第一天*/
SELECT  DATEADD(yy,  DATEDIFF(yy,0,getdate()),  0)  
/*d. 季度的第一天*/
SELECT  DATEADD(qq,  DATEDIFF(qq,0,getdate()),  0)  
/*e. 上个月的最后一天 */
SELECT  dateadd(ms,-3,DATEADD(mm,  DATEDIFF(mm,0,getdate()),  0))  
/*f. 去年的最后一天*/
SELECT  dateadd(ms,-3,DATEADD(yy,  DATEDIFF(yy,0,getdate()),  0))
/*g. 本月的最后一天*/
SELECT  dateadd(ms,-3,DATEADD(mm,  DATEDIFF(m,0,getdate())+1,  0))  
/*h. 本月的第一个星期一*/
select  DATEADD(wk,  DATEDIFF(wk,0,                                                         
                               dateadd(dd,6-datepart(day,getdate()),getdate())        
                           ),  0)      
/*i. 本年的最后一天*/
SELECT  dateadd(ms,-3,DATEADD(yy,  DATEDIFF(yy,0,getdate())+1,  0))


1.显示本月第一天
SELECT DATEADD(mm,DATEDIFF(mm,0,getdate()),0)
select convert(datetime,convert(varchar(8),getdate(),120)+'01',120)

2.显示本月最后一天
select dateadd(day,-1,convert(datetime,convert(varchar(8),dateadd(month,1,getdate()),120)+'01',120))
SELECT dateadd(ms,-3,DATEADD(mm,DATEDIFF(m,0,getdate())+1,0))

3.上个月的最后一天
SELECT dateadd(ms,-3,DATEADD(mm,DATEDIFF(mm,0,getdate()),0))

4.本月的第一个星期一
select DATEADD(wk,DATEDIFF(wk,0, dateadd(dd,6-datepart(day,getdate()),getdate())),0)

5.本年的第一天
SELECT DATEADD(yy,DATEDIFF(yy,0,getdate()),0)

6.本年的最后一天
SELECT dateadd(ms,-3,DATEADD(yy,DATEDIFF(yy,0,getdate())+1,0))

7.去年的最后一天
SELECT dateadd(ms,-3,DATEADD(yy,DATEDIFF(yy,0,getdate()),0))

8.本季度的第一天
SELECT DATEADD(qq,DATEDIFF(qq,0,getdate()),0)  

9.本周的星期一
SELECT DATEADD(wk,DATEDIFF(wk,0,getdate()),0)

10.查询本月的记录
select * from tableName where DATEPART(mm, theDate) = DATEPART(mm, GETDATE()) and DATEPART(yy, theDate) = DATEPART(yy, GETDATE())

11.查询本周的记录
select * from tableName where DATEPART(wk, theDate) = DATEPART(wk, GETDATE()) and DATEPART(yy, theDate) = DATEPART(yy, GETDATE())

12.查询本季的记录
select * from tableName where DATEPART(qq, theDate) = DATEPART(qq, GETDATE()) and DATEPART(yy, theDate) = DATEPART(yy, GETDATE())
其中:GETDATE()是获得系统时间的函数。

13.获取当月总天数:
select DATEDIFF(dd,getdate(),DATEADD(mm, 1, getdate()))

select datediff(day,
dateadd(mm, datediff(mm,'',getdate()), ''),
dateadd(mm, datediff(mm,'',getdate()), '1900-02-01'))

14.获取当前为星期几
DATENAME(weekday, getdate())

-----------------------------------------------------------------
/*查询数据库的所有用户表*/
use ufdata_002_2008
select   name   from   sysobjects   where   type='U'
-----------------------------------------------------------------
--查看数据库中所有的触发器
use ufdata_002_2008
go
select * from sysobjects where xtype='TR'

-----------------------------------------------------------------
--查询特定数据库中某一不知归属表的触发器
/*查询某一个触发器TR_Ap_CloseBills所归属的表*/
use ufdata_002_2008

declare   @parent_obj_id   int   --定义父对象id变量

--先找出父对象(所在表)的id(在触发器不重复归属于多个表的情况下)
select @parent_obj_id=parent_obj
from sysobjects where name='TR_Ap_CloseBills'
and xtype='TR'  

print '所在父对象(表)的ID是:'+str(@parent_obj_id)

--接下来找出父对象(表)的名称
select name as 触发器所在表为
from sysobjects where   type='U' and id=@parent_obj_id

-----------------------------------------------------------------
--查看触发器内容
use ufdata_002_2008
go
exec sp_helptext 'TR_Ap_CloseBills'
-----------------------------------------------------------------
--用于查看触发器的属性(参数指定触发器所在的表)
use ufdata_002_2008
go
exec sp_helptrigger Ap_CloseBills
-----------------------------------------------------------------
--创建触发器
/*
(1)创建一个简单的触发器
触发器是一种特殊的存储过程,类似于事件函数,SQL Server? 允许为 INSERT、UPDATE、DELETE 创建触发器,即当在表中插入、更新、删除记录时,触发一个或一系列 T-SQL语句。
触发器可以在查询分析器里创建,也可以在表名上点右键->“所有任务”->“管理触发器”来创建,不过都是要写 T-SQL 语句的,只是在查询分析器里要先确定当前操作的数据库。
创建触发器用 CREATE TRIGGER
格式如下:
------------------------------
        CREATE TRIGGER 触发器名称
        ON 表名
        FOR INSERT、UPDATE 或 DELETE
        AS
                    T-SQL 语句
------------------------------
注意:触发器名称是不加引号的。

*/

--如下是联机丛书上的一个示例,当在 titles 表上更改记录时,发送邮件通知 MaryM。
CREATE TRIGGER reminder
ON titles
FOR INSERT, UPDATE, DELETE
AS
   EXEC master..xp_sendmail 'MaryM',
      'Don''t forget to print a report for the distributors.'
/*
(2)删除触发器
用查询分析器删除
在查询分析器中使用 drop trigger 触发器名称 来删除触发器。
也可以同时删除多个触发器:drop trigger 触发器名称,触发器名称...
注意:触发器名称是不加引号的。在删除触发器之前可以先看一下触发器是否存在:
格式如下:
------------------------------
if Exists(
        select name from sysobjects
        where name=触发器名称 and xtype='TR'
)
------------------------------
用企业管理器删除
在企业管理器中,在表上点右键->“所有任务”->“管理触发器”,选中所要删除的触发器,然后点击“删除”。
*/

/*
(3)重命名触发器
用查询分析器重命名
exec sp_rename 原名称, 新名称
sp_rename 是 SQL Server? 自带的一个存储过程,用于更改当前数据库中用户创建的对象的名称,如表名、列表、索引名等。
用企业管理器重命名
在表上点右键->“所有任务”->“管理触发器”,选中所要重命名的触发器,修改触发器语句中的触发器名称,点击“确定”。

*/
/*(4)更多功能
①INSTEAD OF 子句
执行触发器语句,但不执行触发触发器的 SQL 语句,比如试图删除一条记录时,将执行触发器指定的语句,此时不再执行 delete 语句。例:
------------------------------
create trigger f
on tbl
instead of delete
as
    insert into Logs...
------------------------------
②IF UPDATE(列名) 子句
检查是否更新了某一列,用于 insert 或 update,不能用于 delete。例:
------------------------------
create trigger f
on tbl
for update
as
    if update(status) or update(title)
        sql_statement --更新了 status 或 title 列
------------------------------
③inserted、deleted(两个虚拟表的使用)
这是两个虚拟表,inserted 保存的是 insert 或 update 之后所影响的记录形成的表,deleted 保存的是 delete 或 update 之前所影响的记录形成的表。例:
------------------------------
create trigger tbl_delete
on tbl
for delete
as
    declare @title varchar(200)
    select @title=title from deleted
    insert into Logs(logContent) values('删除了 title 为:' + title + '的记录')
------------------------------
说明:如果向 inserted 或 deleted 虚拟表中取字段类型为 text、image 的字段值时,所取得的值将会是 null。

*/
/*
(5)递归、嵌套触发器
递归分两种,间接递归和直接递归。我们举例解释如下,假如有表1、表2名称分别为 T1、T2,在 T1、T2 上分别有触发器 G1、G2。
?        间接递归:对 T1 操作从而触发 G1,G1 对 T2 操作从而触发 G2,G2 对 T1 操作从而再次触发 G1...
?        直接递归:对 T1 操作从而触发 G1,G1 对 T1 操作从而再次触发 G1...
------------------------------
嵌套触发器
类似于间接递归,间接递归必然要形成一个环,而嵌套触发器不一定要形成一个环,它可以 T1->T2->T3...这样一直触发下去,最多允许嵌套 32 层。
------------------------------
设置直接递归
默认情况下是禁止直接递归的,要设置为允许有两种方法:
?        T-SQL:exec sp_dboption 'dbName', 'recursive triggers', true
?        EM:数据库上点右键->属性->选项。
------------------------------
设置间接递归、嵌套
默认情况下是允许间接递归、嵌套的,要设置为禁止有两种方法:
?        T-SQL:exec sp_configure 'nested triggers', 0 --第二个参数为 1 则为允许
?        EM:注册上点右键->属性->服务器设置。

*/
回复 点赞 拍砖

使用道具 举报

 楼主| 发表于 2024-1-9 14:36:23 | 显示全部楼层
/*(6)触发器回滚
我们看到许多注册系统在注册后都不能更改用户名,但这多半是由应用程序决定的, 如果直接打开数据库表进行更改,同样可以更改其用户名,在触发器中利用回滚就可以巧妙地实现无法更改用户名。
语句如下:
------------------------------
use 数据库名
go
create trigger tr
on 表名
for update
as
    if update(userName)
        rollback tran
------------------------------
关键在最后两句,其解释为:如果更新了 userName 列,就回滚事务。
*/
/*(7)禁用、启用触发器*/
--禁用:
        alter table 表名 disable trigger 触发器名称
--启用:
        alter table 表名 enable trigger 触发器名称
/*如果有多个触发器,则各个触发器名称之间用英文逗号隔开。
如果把“触发器名称”换成“ALL”,则表示禁用或启用该表的全部触发器。
*/
-----------------------------------------------------------------
--SQL Server 数据库管理常用的SQL和T-SQL
--1. 查看数据库的版本   
  select @@version
--2. 查看数据库所在机器操作系统参数   
  exec master..xp_msver   
--3. 查看数据库启动的参数         
  sp_configure        
--4. 查看数据库启动时间         
  select convert(varchar(30),login_time,120) from master..sysprocesses where spid=1
  
  /*查看数据库服务器名和实例名 */
  print 'Server Name.........: ' + convert(varchar(30),@@SERVERNAME)         
  print 'Instance............: ' + convert(varchar(30),@@SERVICENAME)      
--5. 查看所有数据库名称及大小
  sp_helpdb
  /*查看某个特定数据库的名称及大小及存储位置*/
  exec sp_helpdb UFDATA_002_2008
  /*重命名数据库用的SQL */
  sp_renamedb 'old_dbname', 'new_dbname'  
--6. 查看所有数据库用户登录信息
  sp_helplogins
  
  /*查看所有数据库用户所属的角色信息   */
  sp_helpsrvrolemember  
  /*修复迁移服务器时孤立用户时,可以用的fix_orphan_user脚本或者LoneUser过程 */
  /*更改某个数据对象的用户属主 */
  sp_changeobjectowner [@objectname =] 'object', [@newowner =] 'owner'
  
  /*注意: 更改对象名的任一部分都可能破坏脚本和存储过程。  
  把一台服务器上的数据库用户登录信息备份出来可以用add_login_to_aserver脚本 */  
--7. 查看链接服务器      
  sp_helplinkedsrvlogin  
  /*查看远端数据库用户登录信息   */
  sp_helpremotelogin  
--8.查看某数据库下某个数据对象的大小
  sp_spaceused @objname  
  /*还可以用sp_toptables过程看最大的N(默认为50)个表 */
  /*查看某数据库下某个数据对象的索引信息 */
  sp_helpindex @objname
  /*还可以用SP_NChelpindex过程查看更详细的索引情况 */
  SP_NChelpindex @objname
  /*
  clustered索引是把记录按物理顺序排列的,索引占的空间比较少。
  对键值DML操作十分频繁的表我建议用非clustered索引和约束,fillfactor参数都用默认值。
  */
  /*查看某数据库下某个数据对象的的约束信息 */
  sp_helpconstraint @objname
--9.查看数据库里所有的存储过程和函数
  use @database_name
  sp_stored_procedures
  /*查看存储过程和函数的源代码 */
  sp_helptext '@procedure_name'
  /*查看包含某个字符串@str的数据对象名称 */
  select distinct object_name(id) from syscomments where text like '%@str%'
  /*
  创建加密的存储过程或函数在AS前面加WITH ENCRYPTION参数  
  解密加密过的存储过程和函数可以用sp_decrypt过程  */
--10.查看数据库里用户和进程的信息
  sp_who
  /*查看SQL Server数据库里的活动用户和进程的信息 */
  sp_who 'active'
  /*查看SQL Server数据库里的锁的情况 */
  sp_lock
  /*进程号1-50是SQL Server系统内部用的,进程号大于50的才是用户的连接进程.
  spid是进程编号,dbid是数据库编号,objid是数据对象编号
  */
  /*查看进程正在执行的SQL语句 */
  dbcc inputbuffer ()
--11.收缩数据库日志文件的方法

  /*收缩简单恢复模式数据库日志,收缩后@database_name_log的大小单位为M */
  backup log @database_name with no_log
  dbcc shrinkfile (@database_name_log, 5)
--12.分析SQL Server SQL 语句的方法:      
  set statistics time {on | off}
  set statistics io {on | off}
          /*图形方式显示查询执行计划     
          在查询分析器->查询->显示估计的评估计划(D)-Ctrl-L 或者点击工具栏里的图形
          文本方式显示查询执行计划
        */
  set showplan_all {on | off}
  set showplan_text { on | off }
  set statistics profile { on | off }
--13.出现不一致错误时,NT事件查看器里出3624号错误,修复数据库的方法  
  /*先注释掉应用程序里引用的出现不一致性错误的表,然后在备份或其它机器上先恢复然后做修复操作 */
  
  alter database [@error_database_name] set single_user
  
  /*修复出现不一致错误的表 */
  
  dbcc checktable('@error_table_name',repair_allow_data_loss)
  
  /*或者可惜选择修复出现不一致错误的小型数据库名 */
  
  dbcc checkdb('@error_database_name',repair_allow_data_loss)

  alter database [@error_database_name] set multi_user

  /*CHECKDB 有3个参数:

回复 点赞 拍砖

使用道具 举报

 楼主| 发表于 2024-1-9 14:38:37 | 显示全部楼层
? repair_allow_data_loss 包括对行和页进行分配和取消分配以改正分配错误、结构行或页的错误,
  以及删除已损坏的文本对象,这些修复可能会导致一些数据丢失。
  修复操作可以在用户事务下完成以允许用户回滚所做的更改。
  如果回滚修复,则数据库仍会含有错误,应该从备份进行恢复。
  如果由于所提供修复等级的缘故遗漏某个错误的修复,则将遗漏任何取决于该修复的修复。
  修复完成后,请备份数据库。

  ? repair_fast 进行小的、不耗时的修复操作,如修复非聚集索引中的附加键。
  这些修复可以很快完成,并且不会有丢失数据的危险。

  ? repair_rebuild 执行由 repair_fast 完成的所有修复,包括需要较长时间的修复(如重建索引)。
  执行这些修复时不会有丢失数据的危险。
*/


-----------------------------------------------------------------
--字符串截取实例

1.截取已知长度的函数


  A.截取从字符串左边开始N个字符

 

  Declare @S1 varchar(100)
  Select @S1='http://www.163.com'
  Select Left(@S1,4)
  ------------------------------------
  显示结果: http


 

  B.截取从字符串右边开始N个字符(例如取字符www.163.com)

 

  Declare @S1 varchar(100)
  Select @S1='http://www.163.com'
  Select right(@S1,11)  
  ------------------------------------
  显示结果: www.163.com


 

  C.截取字符串中任意位置及长度(例如取字符www)

 

  Declare @S1 varchar(100)
  Select @S1='http://www.163.com'
  Select SUBSTRING(@S1,8,3)  
  ------------------------------------
  显示结果: www



  以上例子皆是已知截取位置及长度,下面介绍未知位置的例子
2.截取未知位置的函数
A.截取指定字符串后的字符串(例如截取http://后面的字符串)
方法一:

 

  Declare @S1 varchar(100)
  Select @S1='http://www.163.com'  
  Select Substring(@S1,CHARINDEX('www',@S1)+1,Len(@S1))
  /*此处也可以这样写:Select Substring(@S1,CHARINDEX('//',@S1)+2,Len(@S1))*/

  ------------------------------------
  显示结果: www.163.com



  需要注意:CHARINDEX函数搜索字符串时,不区分大小写,因此CHARINDEX('www',@S1)也可以写成CHARINDEX('WWW',@S1)

 

  方法二与方法一类似)

 

  Declare @S1 varchar(100)
  Select @S1='http://www.163.com'  
  Select Substring(@S1,PATINDEX('%www%',@S1)+1,Len(@S1))
  --此处也可以这样写:Select Substring(@S1,PATINDEX('%//%',@S1)+2,Len(@S1))
  ------------------------------------
  显示结果: www.163.com  


 

   函数PATINDEX与CHARINDEX区别在于:前者可以参数一些参数,增加查询的功能

  方法三:

 

  Declare @S1 varchar(100)
  Select @S1='http://www.163.com'  
  Select REPLACE(@S1,'http://','')
  ------------------------------------
  显示结果: www.163.com


 

  利用字符替换函数REPLACE,将除需要显示字符串外的字符替换为空

  方法四:

 

  Declare @S1 varchar(100)
  Select @S1='http://www.163.com'  
  Select STUFF(@S1,CHARINDEX('http://',@S1),Len('http://'),'')
  ------------------------------------
  显示结果: www.163.com  



  函数STUFF与REPLACE区别在于:前者可以指定替换范围,而后者则是全部范围内替换

 

  B.截取指定字符后的字符串(例如截取C:\Windows\test.txt中文件名)
    与A不同的是,当搜索对象不是一个时,利用上面的方法只能搜索到第一个位置

  方法一:

 

  Declare @S1 varchar(100)
  Select @S1='C:\Windows\test.txt'
  select right(@S1,charindex('\',REVERSE(@S1))-1)
  -------------------------------------
  显示结果: text.txt
  说明:利用函数REVERSE获取需要截取的字符串长度

-----------------------------------------------------------------
按姓氏笔画排序:
Select * From TableName Order By CustomerName Collate Chinese_PRC_Stroke_ci_as
-----------------------------------------------------------------
数据库加密:
select encrypt('原始密码')
select pwdencrypt('原始密码')
select pwdcompare('原始密码','加密后密码') = 1--相同;否则不相同 encrypt('原始密码')
select pwdencrypt('原始密码')
select pwdcompare('原始密码','加密后密码') = 1--相同;否则不相同
-----------------------------------------------------------------
取回表中字段:
declare @list varchar(1000),@sql nvarchar(1000)
select @list=@list+','+b.name from sysobjects a,syscolumns b where a.id=b.id and a.name='表A'
set @sql='select '+right(@list,len(@list)-1)+' from 表A'
exec (@sql)
-----------------------------------------------------------------
查看硬盘分区:
EXEC master..xp_fixeddrives
-----------------------------------------------------------------
比较A,B表是否相等:
if (select checksum_agg(binary_checksum(*)) from A)
    =
   (select checksum_agg(binary_checksum(*)) from B)
print '相等'
else
print '不相等'
-----------------------------------------------------------------
杀掉所有的事件探察器进程:
DECLARE hcforeach CURSOR GLOBAL FOR SELECT 'kill '+RTRIM(spid) FROM master.dbo.sysprocesses
WHERE program_name IN('SQL profiler',N'SQL 事件探查器')
EXEC sp_msforeach_worker '?'
-----------------------------------------------------------------
记录搜索:

开头到N条记录
Select Top N * From 表
----------------------
N到M条记录(要有主索引ID)
Select Top M-N * From 表 Where ID in (Select Top M ID From 表) Order by ID  Desc
----------------------
N到结尾记录
Select Top N * From 表 Order by ID Desc
-----------------------------------------------------------------
修改数据库的名称:
sp_renamedb 'old_name', 'new_name'
-----------------------------------------------------------------
获取当前数据库中的所有用户表
select Name from sysobjects where xtype='u' and status>=0
-----------------------------------------------------------------
获取某一个表的所有字段
select name from syscolumns where id=object_id('表名')
-----------------------------------------------------------------
查看与某一个表相关的视图、存储过程、函数
select a.* from sysobjects a, syscomments b where a.id = b.id and b.text like '%表名%'
-----------------------------------------------------------------
查看当前数据库中所有存储过程
select name as 存储过程名称 from sysobjects where xtype='P'
-----------------------------------------------------------------
查询用户创建的所有数据库
select * from master..sysdatabases D where sid not in(select sid from master..syslogins where name='sa')
或者
select dbid, name AS DB_NAME from master..sysdatabases where sid <> 0x01
-----------------------------------------------------------------
查询某一个表的字段和数据类型
select column_name,data_type from information_schema.columns
where table_name = '表名'

[n].[标题]:
Select * From TableName Order By CustomerName

[n].[标题]:
Select * From TableName Order By CustomerName

-----------------------------------------------------------------
--建表时自动建立主键约束:
create table a(b char(4),c int,constraint 主键名 primary key(c))
  
--或者:
create table a(a char(4) cint primary key)
--或者:
create table a(a char(4) cint constraint 主键名 primary key)

---------------------
创建:
create table 表名
add constraint 约束名
unique 约束条件
---------------------
修改:
alter table 表名
add constraint 约束名
unique 约束条件
---------------------
删除:
alert table 表名
drop constraint 约束名
如不知道或忘记了约束可用sp_help 来查询

-----------------------------------------------------------------
--创建索引:
create index 索引名 on 表名(字段名)
-----------------------------------------------------------------
--为一个表添加外键:
alter table 表名 add constraint 外键名 foreign key(字段)references 表名(字段)
-----------------------------------------------------------------
--创建一个标识列
identity(seed,range) 创建一个标识列,与null,not null并列。seed表示种子,即初始值;range表示增长幅度。
-----------------------------------------------------------------
使用一个数据库之前要引用他:use 数据库名
-----------------------------------------------------------------
exists()判断子查询的结果是否存在,返回true or false  
-----------------------------------------------------------------
object_id('对象名') 返回该对象名对应的Id,该id存储在sysobjects表中。
-----------------------------------------------------------------  
局部临时表 #xxx ,只能被当前会话访问,在该会话结束后自动消失。
-----------------------------------------------------------------

全局临时表 ##xx , 可以供多个用户使用,在该会话结束后自动消失。
-----------------------------------------------------------------
为表 添加/修改/删除列 :alter table 表名 add 列名 type/alter column 列名 newtype/drop 列名  
-----------------------------------------------------------------
用系统过程 sp_reZGXX_XM 重新命名表和列: sp_reZGXX_XM 原表名,新表名 sp_reZGXX_XM "表名.原列名",新列名  
-----------------------------------------------------------------
如果想显示的在identity列中插入值,则需要先设置:set identity_insert 表名 on
    插入完毕后最好设置:set identity_insert 表名 off  
-----------------------------------------------------------------
truncate table 表名 删除表格的所有数据,速度很快。  
-----------------------------------------------------------------
统计函数中除了count(*) 之外,都忽略空值(null).  
-----------------------------------------------------------------
由于text和image类型数据很长,在查询之前可以通过设置全局变量textsize来指定返回数据的长度,set textsize 50
    如果想查阅全局变量textsize的值:select @@textsize  
-----------------------------------------------------------------
通过reaDtext 读取text的数据:
     declare @var varbinary(16)
     select @var=textptr(c) from test where a=10
     readtext test.c @var 4 3  
-----------------------------------------------------------------
利用writetext往text 或 image列中写入值:
    declare @var varbinary(16)
    select @var=textptr(c) from test where a=10
    writetext test.c @var 'zhongguo '
-----------------------------------------------------------------
like 也是唯一可以在text列上使用的操作符
-----------------------------------------------------------------
逻辑操作符优先级:NOT > AND > OR  
-----------------------------------------------------------------
在group by 一个记录集时,所有的null组成一组。
-----------------------------------------------------------------
带有group by 子句的 select中可以有where子句,但是where 子句必须放在group by 前面。
-----------------------------------------------------------------
如果group by 子句中用了all,即 group by all xxx ,则不符合检索条件的记录也显示,但不参与统计。  
-----------------------------------------------------------------
having 中,只能包含 group by子句中 指定的列,也可以包含统计函数。where中可指定任何列,但是不能用统计函数  
-----------------------------------------------------------------
having 子句从最终结果中将不满足该条件的分组去掉  
-----------------------------------------------------------------
不带group by子句时也可以使用having子句,并将整个查询结果作为一个组,但是,由于出现在选择列表中的列
    和出现在having子句中的列必须是group by 子句中的列,所以,当不带group by子句时,不能在having子句和
    选择列表中直接使用列名,只能使用统计函数。  
-----------------------------------------------------------------
当在group by子句后指定order by子句时,只能在order by子句中指定group by子句中的列或者统计函数
-----------------------------------------------------------------
在进行union运算时,自动删除结果中的重复行,如果使用all选项 ,则可以将所有行显示在结果中:union all  
-----------------------------------------------------------------
在union时,合并结果集中的列名有第一个查询给出,所以后面进行排旬时一定要注意order by 子句中的字段名  
-----------------------------------------------------------------
可以通过 select fieldslist into 新表名 from 表名,来创建一个新表,并将当前表中的数据全部插入到新
    表中,但是做这个操作之前需要保证数据库选项 select into/bulkcopy 设置为true。方法如下:
    use master /*设置命令必须在master数据库中进行*/
    sp_dboption 数据库a名,"select into/bulkcopy",true /*设置数据库选项*/
    use 数据库a名
    checkpoint /*使设置结果生效*/  
-----------------------------------------------------------------
如果要将统计结果或者计算结果插入到新表中,必须以标题的形式给出列名,如:
    select a,b=avg(c) into mm from nn group by a
-----------------------------------------------------------------
随即取出N条记录的方法:select top N * from 表名 order by newid()  
-----------------------------------------------------------------
创建唯一约束:create table a(b int not nul constraint 约束名 unique,c char(10) null)
    或者:create table a(b int,c char(10),constraint 约束名 unique(b))  
-----------------------------------------------------------------
为变量赋值方法:set @xxx=??? ,如果变量的值取自一个查询的话,需要用select, 如:select @xxx=??? from ??? where ????
    如果要返回一个记录集,但是不是从一个表格,而是全部是系统变量或自定义变量组成。则不必写from子句:select ??,??,??  
-----------------------------------------------------------------
创建一个返回一张表的函数:
    create function fn_Tree(@Id int)
    returns table @tb (id int ,fid int)
    as
    begin
    insert @tb select id,fid from tablename where fid=@id
    while exists (select 1 from tablename where fid in (select id from @tb) and id not in (select id from @tb) )
    insert @tb select id,fid from tablename where fid in (select id from @tb) and id not in (select id from @tb)
    return
    end

    表的字段为id,fid
    insert @tb select 语句,将查询结果插入到当前的表格(@tb)中

    调用:
    select * from dbo.fn_Tree(0)
    go
    select * from dbo.fn_Tree(1
    go  

-----------------------------------------------------------------
删除表

Drop table命令用于删除一个表格或者表中的所有行。其语法格式为:

drop table "tablename"

下面举个例子:

drop table employee;

为了删除整个表(包括所有的行),可以使用drop table命令后加上tablename。Drop table命令跟从表中删除所有记录是不一样的:

  删除表中的所有记录是留下表格(只是它是空的)以及约束信息;而drop table是删除表的所有信息,包括所有行、表格以及约束信息等等。
-----------------------------------------------------------------
升级问题解决方案
如果升级失败,请先打开升级日志:U8安装目录\Admin\下文件名为 "UFDATA_"+账套号+"_"+年度.txt,查看详细的错误信息;



如果升级提示错误为"错误信息:-2147217900"表示SQL Server 此时无法获取 LOCK 资源。请在活动用户数较少时重新运行您的语句,或者请求系统管理员检查 SQL Server 锁和内存配置。解决办法:

打开SQL Server查询分析器,在Master中运行以下语句:

sp_configure 'locks','2147483647'

reconfigure  with override

重启动Server。

在升级之前,建议先在查询分析器中执行 DBCC CHECKDB(年度库名称) 语句,检查年度库数据库是否有一致性错误,如果发现错误,请按照SQL Server的提示进行修复,修复后再进行升级。
-----------------------------------------------------------------
数据库置疑 及帐套年结情况分析:
年度数据库物理文件一般存放在下面命名规则的文件夹下
        X:\U8SOFT\Admin\服务器名\ZT帐套号\年度

年度数据库文件命名:

数据库名为:UFDATA_帐套号_年度
逻辑文件名                物理文件名
------------------------------------
Ufmodel                     UFDATA.MDF        ----------数据文件
Ufmodel_LOG                 UFDATA.LDF        ----------日志文件
附:
====================================
另外对于帐套而言,每个帐套还需要一下文件
数据库名为:UFMeta_帐套号
逻辑文件名                物理文件名
--------------------------------
UFMeta                     UFMeta.mdf        ----------数据文件
UFMeta_Log                UFMeta.ldf        ----------日志文件
直接拷贝覆盖与分离后附加是不一样的,不要直接拷贝覆盖(还会出现质疑)
另外,对于置疑和正常数据库不要在sql企业管理器中直接右键删除,否则数据库物理文件就没有了且无痕迹
use ufsystem
--查看帐套信息
select * from ua_account
--查看某帐套年度帐信息
select * from ua_account_sub where cacc_ID=010
--查看某帐套年结情况(bclosing为1表示已结)
--说明:如果是在其他机器上捉的年结直接拷贝过来的话,不会回写ua_account_sub表的bclosing字段,就需要手工加上
select cacc_id as 帐套,iyear as 年度,bclosing as 是否年结
from ua_account_sub where cacc_ID=010
--查看所有数据库(位置,大小,使用情况)
sp_helpdb
--查看指定数据库位置,大小,使用情况)
sp_helpdb 'ufdata_001_2010'
select * FROM UA_user
update UA_user set cPassword=null where cUser_Name='demo'
--查询用户创建的所有数据库
select * from master..sysdatabases D where sid not in(select sid from master..syslogins where name='sa')
--或者
select dbid, name AS DB_NAME from master..sysdatabases where sid <> 0x01

--查询所有数据库
select * from master..sysdatabases
--将数据库附加到服务器。
EXEC sp_attach_db @dbname = N'UFDATA_009_2008',
   @filename1 = N'D:\U8SOFT\ADMIN\SERVER1\ZT009\2008\UFMeta.mdf',
   @filename2 = N'D:\U8SOFT\ADMIN\SERVER1\ZT009\2008\UFMeta.ldf'
--将数据库从服务器分离。
EXEC sp_detach_db 'UFDATA_009_2008', 'true'

-----------------------------------------------------------------
回复 点赞 拍砖

使用道具 举报

发表于 2024-1-19 09:59:17 | 显示全部楼层
感谢分享!!
回复 点赞 拍砖

使用道具 举报

发表于 2024-1-21 21:09:43 | 显示全部楼层
借楼赚金币
回复 点赞 拍砖

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

QQ|站长微信|Archiver|手机版|小黑屋|用友之家 ( 蜀ICP备07505338号|51072502110008 )

GMT+8, 2024-4-28 16:46 , Processed in 0.045664 second(s), 7 queries , Gzip On, Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表