我想弄清楚如何在一个 sql 脚本中删除 PostgreSQL 上的多个数据库。我最好需要它在pgAdmin控制台中执行时和在psql命令行工具中使用时都能工作。当我做:
DROP DATABASE db1;
DROP DATABASE db2;
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
无法从函数或多命令字符串执行 DROP DATABASE
有没有办法解决这个问题?即,有没有办法单独运行每个命令(比如在 MSSQL 上使用“GO”语句时),或者其他一些明智的方法来轻松删除多个数据库?我在开发过程中需要此功能用于维护脚本。
我意识到这是一个更主观的问题,但我正在向社区寻求指导。
我们公司刚开始拥有 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 等的东西。我正在寻找诚实的、尽可能客观的、关于最适合数据库管理员需求的信息。
对于监管和欺诈要求,我们需要记录对 DB 中大多数表的每次更改。我们在以前的项目中非常成功地做到这一点的方法是拥有每个表的副本,除了:
在以前的工作中,Oracle DBA 编写了一个脚本来自动生成所有这些,它执行以下操作:
笔记:
该系统的美妙之处在于您可以查询更改的内容和时间,或者谁对哪些内容进行了更改,并查看更改前后的记录。更改发生在 DB 行级别,而不是单个列级别。
有没有人在 MYSQL 5.6 中遇到过这样的事情?我们团队中没有 DBA 可以从头开始编写这样的东西,但我们知道足以修改类似的东西。
我需要获取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) 我正在尝试使用 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)
一切正常。但我无法将其输出到变量。有什么建议?
在我的数据库中,我有一个名为 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) 我对 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)
谢谢。
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)
第二个陈述的目的是什么?
我正在将一个脚本放在一起,它为我提供了对数据库对象的权限。
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) 是否可以从 bash shell 命令行(例如,没有图形 GUI 和没有交互式客户端)对 oracle 数据库执行 sql 文件(包含多个 SQL 语句的文本文件)
类似于: sqlplus -f queries.sql ...
该命令应该执行querys.sql文件中的所有语句并以适当的退出代码退出(例如,如果所有查询都正确执行,则为0,否则为非零)
scripting ×10
sql-server ×5
command-line ×2
mysql ×2
permissions ×2
t-sql ×2
audit ×1
automation ×1
collation ×1
constraint ×1
foreign-key ×1
logins ×1
oracle ×1
pgadmin ×1
postgresql ×1
psql ×1
ssms ×1
unix ×1