标签: scripting

在一个脚本中删除多个数据库

我想弄清楚如何在一个 sql 脚本中删除 PostgreSQL 上的多个数据库。我最好需要它在pgAdmin控制台中执行时和在psql命令行工具中使用时都能工作。当我做:

DROP DATABASE db1;
DROP DATABASE db2;
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

无法从函数或多命令字符串执行 DROP DATABASE

有没有办法解决这个问题?即,有没有办法单独运行每个命令(比如在 MSSQL 上使用“GO”语句时),或者其他一些明智的方法来轻松删除多个数据库?我在开发过程中需要此功能用于维护脚本。

postgresql pgadmin psql scripting

5
推荐指数
1
解决办法
2万
查看次数

Unix 数据库管理的 Perl 与 Ksh

我意识到这是一个更主观的问题,但我正在向社区寻求指导。

我们公司刚开始拥有 DBA。我们曾经在 IBM 的 iSeries 服务器上使用 DB2 for i,因此确实不需要 DBA(至少在操作上),因为操作系统几乎为我们管理一切。在过去的几年里,我们开始转向 AIX 上的 DB2 LUW。因此,对 DBA 的需求诞生了。我们三个人有兴趣将职业从开发人员转变为 DBA(我就是其中之一)。

因为我们在 AIX 上,所以我们默认使用 ksh 作为我们的数据库管理功能(创建、部署、操作等)的脚本语言。我发现 ksh 非常强大,但我需要执行的一些功能变得相当复杂。这方面的一个例子是我在 Unix 和 Linux StackExchange 上的问题

基于这个问题,以及阅读其他 DB2 管理员的博客,我看到一个普遍的建议,即 Perl 比 ksh 更适合管理脚本。

我意识到 Unix/Linux 论坛对这样的事情会有自己的想法,但我希望从数据库管理的角度来解决这个问题。

不管 DBMS,哪种脚本语言似乎更适合在 Unix/Linux 平台上进行管理?珀尔?克什?(或者其他的?)。作为 DBA,您在使用脚本语言的过程中遇到了哪些优点和缺点,为什么选择这种语言?

我不想要的是“我的语言比你的语言好!”的高度主观的火焰战争。像我以前在开发社区中看到的关于 Java 与 Ruby 等的东西。我正在寻找诚实的、尽可能客观的、关于最适合数据库管理员需求的信息。

scripting unix

5
推荐指数
2
解决办法
1375
查看次数

用于自动创建审计(历史)表和触发器的 MySQL 脚本?

对于监管和欺诈要求,我们需要记录对 DB 中大多数表的每次更改。我们在以前的项目中非常成功地做到这一点的方法是拥有每个表的副本,除了:

  1. 4 个附加列:DateChanged、UserId、Action(创建、更新、删除)和 IP
  2. Id pk 不再是唯一的。
  3. 删除了所有其他约束(FK、唯一索引等)。
  4. 审计表位于单独的审计模式中

在以前的工作中,Oracle DBA 编写了一个脚本来自动生成所有这些,它执行以下操作:

  1. 如果不存在,则创建一个名为审计的新架构
  2. 迭代正常模式中的每个表 t:
    1. 在审计模式中创建了一个具有相同表名的新表,但在它前面加上了 a_ 前缀,例如 a_t
    2. 添加与原始表相同的所有列,以及 4 个附加列(DateChanged、UserId、IP Address 和 Action)
    3. 生成触发器并将其添加到原始表(如果尚未存在)以:
    4. 如果更新,则将新行写入相应的 a_ 表,“更新”操作包含所有列中的预更新(旧)值(主表将具有新值)
    5. 如果删除,添加一行是主表行的副本,但操作 =“删除”。
    6. 如果插入,则将该行添加到审计模式

笔记:

  1. 所有表都有一个 ID PK。
  2. 出于性能考虑或因为不需要而需要排除一些表(例如,由触发器更新的余额表)

该系统的美妙之处在于您可以查询更改的内容和时间,或者谁对哪些内容进行了更改,并查看更改前后的记录。更改发生在 DB 行级别,而不是单个列级别。

有没有人在 MYSQL 5.6 中遇到过这样的事情?我们团队中没有 DBA 可以从头开始编写这样的东西,但我们知道足以修改类似的东西。

mysql audit scripting

5
推荐指数
1
解决办法
1万
查看次数

通过 T-SQL 在 SQL Server 中获取对象脚本?

我需要获取SQL Server 数据库中对象的创建脚本。我需要用于创建它的完全相同的脚本。就像当您使用 SSMS 更改已定义的视图时,脚本就在那里,就像您之前定义的那样。

我需要在 T-SQL 中执行此操作。SQL Server 在哪里存储与数据库对象相关的脚本?我在系统目录视图中找不到相关视图。

我试图找到的是这样的:

select creation_script -- I know this column doesn't exist
from sys.objects
where name = 'CustomersView'
Run Code Online (Sandbox Code Playgroud)

sql-server scripting

5
推荐指数
2
解决办法
1万
查看次数

从 MySQL 命令行获取列信息

我正在尝试使用 bash 脚本从 MySQL 获取所有列。我希望它们存储在一个数组中。如果我这样写:

mysql -uroot -pPassword1 "select column_name 
    from information_schema.columns 
    where table_schema = 'dbName' 
    and table_name = 'tableName';"
Run Code Online (Sandbox Code Playgroud)

...我收到标识符名称太长的错误。如果我这样写:

mysql -uroot -pPassword1 <<- SMTH
    select column_name 
    from information_schema.columns 
    where table_schema = 'dbName' 
    and table_name = 'tableName';
SMTH
Run Code Online (Sandbox Code Playgroud)

一切正常。但我无法将其输出到变量。有什么建议?

mysql command-line scripting

5
推荐指数
1
解决办法
514
查看次数

显示表的所有权限的脚本

在我的数据库中,我有一个名为 spGen2_tblIE_SchedProcess_Update 的过程。

当我运行这个脚本时

select * from sys.objects
where name = 'spGen2_tblIE_SchedProcess_Update'
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

在同一个数据库中,我有一个名为 tblIE_Step 的表

当我运行以下脚本时

select * from sys.objects
where name = 'tblIE_Step'
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

然后我想查看对象的所有权限

当我检查我的存储过程时,我运行了这个脚本:

select 'Proc' = SCHEMA_NAME(p.schema_id)+'.'+p.name
    , 'Type' = per.state_desc, 'Permission' = per.permission_name
    , 'Login' = pri.name, 'Type' = pri.type_desc 
    , *
From sys.objects as p
left join sys.database_permissions as per on p.object_id = per.major_id
left join sys.database_principals as pri on per.grantee_principal_id = pri.principal_id
where p.object_id = 87671360
Run Code Online (Sandbox Code Playgroud)

我得到了权限:

在此处输入图片说明

但是当我为我的桌子运行相同的东西时,我什么也没得到:

select 'Proc' = SCHEMA_NAME(p.schema_id)+'.'+p.name …
Run Code Online (Sandbox Code Playgroud)

sql-server permissions scripting logins automation

5
推荐指数
2
解决办法
5万
查看次数

在 SQL Server 脚本中的 SELECT 末尾使用 X?

我对 T-SQL 比较陌生,在查看我的前辈脚本时,我发现了一条我无法解析的行。自己去查查是一件很困难的事情。希望指教。

这条线出现在 WHILE 循环内,但我认为这并不重要。我相信从功能上讲,这是从共享 ID 的几行中的一列中收集值,并将它们用逗号连接到 1 个字段中。但我不知道这叫什么,也不知道如何查找以供自己使用。

这个'x'最后在做什么?谁能给我指点这方面的信息?

(select @invtid = coalesce(@invtid + ',',' ')+rtrim(RoleID) 
FROM (
    Select distinct roleid 
    from UserAccounts 
    WHERE CustID = @custID
     )
 x)
Run Code Online (Sandbox Code Playgroud)

谢谢。

sql-server scripting t-sql

5
推荐指数
1
解决办法
3319
查看次数

SSMS 约束脚本:第二个alter table 语句的目的?

SSMS 脚本外键约束为两个语句:

ALTER TABLE {table}
WITH CHECK
ADD CONSTRAINT {constraintname} {constraint spec}
GO

ALTER TABLE {table}
CHECK CONSTRAINT {constraintname}
GO
Run Code Online (Sandbox Code Playgroud)

第二个陈述的目的是什么?

foreign-key sql-server constraint ssms scripting

5
推荐指数
1
解决办法
731
查看次数

在查询中使用 COLLATE 的规则是什么?

我正在将一个脚本放在一起,它为我提供了对数据库对象的权限。

SELECT  permission_order=710
       ,permission_type = 'Object Level Permissions'
       ,db = db_name(),
login_=null,
role_=dp.name collate Latin1_General_CI_AS,
Obj = sys.schemas.name + '.' + so.name collate Latin1_General_CI_AS,
Permission = permission_name collate Latin1_General_CI_AS,
[script]=
'IF OBJECT_ID ('  + '''' + '['+ sys.schemas.name + '].[' + so.name + ']'  + '''' + ') IS NOT NULL ' + CHAR(10) + state_desc + 
' ' + permission_name + ' on ['+ sys.schemas.name + '].[' + so.name + '] to [' + dp.name + ']' collate Latin1_General_CI_AS …
Run Code Online (Sandbox Code Playgroud)

sql-server collation permissions scripting t-sql

5
推荐指数
1
解决办法
2005
查看次数

如果可能,如何从 bash 脚本对 oracle 数据库执行 .sql 文件

是否可以从 bash shell 命令行(例如,没有图形 GUI 和没有交互式客户端)对 oracle 数据库执行 sql 文件(包含多个 SQL 语句的文本文件)

类似于: sqlplus -f queries.sql ...

该命令应该执行querys.sql文件中的所有语句并以适当的退出代码退出(例如,如果所有查询都正确执行,则为0,否则为非零)

oracle command-line scripting

4
推荐指数
1
解决办法
5671
查看次数