The following isql script obtains the required space by removing it from the end of the master database. In order, it - establishes how many logical pages the missing databases need
- subtracts that number from the pages that master occupies
- removes disk usage entries for parts of master above that limit
- restricts the highest logical chunk of master such that its total size leaves the required number of pages free.
You will need to provide the required space value, denoted as "@needed_mb". Note:
This sample script is provided to assist you with the disaster recovery task. It is not officially supported by Sybase. 1> declare @needed_mb int, @needed_pages int, @master_end int,
2> @pgspermb int
3> select @pgspermb = (1048576 / @@maxpagesize)
4> select @needed_mb = 12 -- replace '12' with required space value
5> select @needed_pages = @needed_mb * @pgspermb
6> select @master_end = sum(size) - @needed_pages
7> from master.dbo.sysusages
8> where dbid = 1
9> if (@master_end > (6 * @pgspermb))
10> begin
11> delete master.dbo.sysusages
12> where lstart > @master_end
13> update master.dbo.sysusages
14> set size = @master_end - lstart
15> where dbid = 1
16> and lstart = (select max(lstart) from master.dbo.sysusages
17> where dbid = 1)
18> end
19> else
20> begin
21> print "Can't take enough space from the master database!"
22> print "Need to find %1! pages", @needed_pages
23> print "That would leave master with %1! pages", @master_end
24> print "Cannot continue."
25> end
26> go Note:
If the procedure fails, your master device is not big enough to hold all the databases you are trying to create. Check the required MBs of space that you specified. If it is correct, it may be necessary to create a new master device using the instructions in Section 5, Recreating the Master Device. You now have enough space to recreate your required databases. Create them one at a time. For example: 1> create database model on default = 3
2> go Repeat for each database. Then shut down the server, and restart it in single-user mode using step 2 above. Step 4. Establish the Backup Server Name This step is necessary to ensure that Adaptive Server has access to its backup server for dumps and loads. Follow the instructions detailed in Section 6, Manually Setting the Backup Server Name. Step 5. Load the master Database Issue the following isql command: 1> load database master from "master_db_dump"
2> go Unlike during a normal database load, the server may need to perform a lot of extra work, because master contains information about the identity and location of your other databases; that information may have changed for this master device, and the server must check and update it as necessary. At the end of this step, the server contains correct disk usage information about the master device. This may differ from the information in sysusages in the dump, so the server will find and correct both the size and location information for the databases. Any entries for parts of databases that don't actually exist on master will be removed. During post-processing from the load, you may see one or more errors from the server. Read Section 1, Before You Begin, for more information about these errors. After checks and validations are complete, the server will shut down. You may now restart it normally. Step 6. Did you recreate any databases in step 3 above? If you recreated databases using the procedure in step 3 above, load those databases. You must restart the server without the -m flag in order to accomplish this.
Section 5. Recreating the Master DeviceUse these steps when the disk that used to contain your master device is not accessible, and you need to start over with a new device. This situation is somewhat similar to the scenario in Section 4 above in which the master device becomes so corrupt that you need to use the -f option, because you will need to know what databases used to be on your master device and how big they were so you can validate and recreate them as necessary. Step 1. Create your new master device When creating the new master device, make sure you use the same page size as your old master device and make the new device at least as large as the old one. The following example creates a device with a 2048-byte logical page size, and total size 100 Megabytes + 8 Kilobytes (the 8 KB is extra space for the configuration area.) % $SYBASE/bin/dataserver -d $SYBASE/d_master.dat -z 2k -b 51204 Use the -s option with this command to specify the server name. You can also specify the "-b" size in Kb, Mb, or Gb. In the above example you would use "-b 100.00782M". Without one of the K, M, or G modifiers, the default device size is expressed in server virtual pages, 2048 bytes each. At device creation, the server issues large numbers of "upgrade" messages tracking its progress; these messages help troubleshoot any problems. They are upgrade messages because the server creates a new installation by doing an "upgrade" of a device that it has just created. When finished, the server shuts down. You now have a master database containing minimal system information, including an sa login whose password is null, and minimally sized master, model, tempdb, and sybsystemdb databases. Step 2. Put the Server in Single-user Mode Shut down and restart the server with the -m flag, which places the server in single-user mode and sets up to load the master database: % $SYBASE/bin/dataserver -d $SYBASE/d_master.dat -m Step 3. Establish the Backup Server Name This step is necessary to ensure that Adaptive Server has access to its backup server for dumps and loads. The new master database contains a default Backup Server entry of SYB_BACKUP for srvnetname, which is probably wrong. Since the sp_addserver procedure is not available at this time, log in to the server as sa and update sysservers directly: 1> update master.dbo.sysservers
2> set srvnetname = "backup_server_name"
3> where srvname = "SYB_BACKUP"
4> go
(1 row affected) Step 4. Load the master Database Issue the following isql command: 1> load database master from "master_db_dump"
2> go The server inspects the master device and makes any corrections needed in the newly loaded sysdatabases and sysusages. These corrections affect only the master device, since that is the only device that changed -- the server assumes that all your other devices are undamaged and need not be inspected. After this step, it is possible that your new master device contains database entries for databases that also exist on other devices in your system. This may happen if you moved tempdb to a different device, or created sybsystemdb on a different device. The server recognizes and handles this situation: if it finds pre-existing entries for those databases on other devices, it presumes that the existing entries are correct and does not change them. During post-processing from the load, you may see one or more errors from the server. Please read Section 2, Before You Begin, for more information about these errors. After the checks and validations are complete the server shuts down. You may now restart it normally. Step 5. Check that the Databases on Master Device Are Correct When you created a new master device in step 1 above, the server created only its default set of databases, with minimal data. You will almost certainly need to load dumps of the databases (notably model) that used to be there. Are the databases on your new master device large enough to hold the dumps you will be loading into them? Are all the necessary databases present? Is there any obsolete data that you need to clean up? Log in as sa and inspect the databases on your system: 1> declare @pgspermb int
2> select @pgspermb = 1048576 / @@maxpagesize
3> select "db name"=db_name(dbid), dbid, "size"=sum(size) / @pgspermb
4> from master.dbo.sysusages
5> group by dbid
6> go This command shows you all the databases present on your system, and their total size. Note that the size column in the output is expressed in Megabytes. Does this list contain any entries where database name is null? These sysusages entries don't have any matching entries in sysdatabases; they are unnecessary and should be deleted. (You may be specially susceptible to this if you upgraded from pre-12.0 versions, and created sybsystemdb on the older version; sybsystemdb will have a different dbid than the default dbid.) To remove these entries, use a script like the following: 1> exec sp_configure "allow updates", 1
2> go
1> delete sysusages
2> where db_name(dbid) is null
3> go
1> exec sp_configure "allow updates", 0
2> go Are any databases missing? Create those databases. Are the databases large enough? If not, alter them to be at least large enough to hold the dumps. (It is okay if they are too large; the server simply clears the excess space.)
Section 6. Manually Setting the Backup Server NameThis procedure updates the sysservers table and is needed to ensure that Adaptive Server can access the correct backup server to carry out dumps and loads. Use it with the instructions for Sections 3 and 4. Execute the following isql commands in Adaptive Server: 1> use master
2> go
1> select srvname, srvnetname from sysservers
2> where srvname = "SYB_BACKUP"
3> go There are three possible outcomes to this query. Take the appropriate action below depending on the outcome:
Outcome | Action | ASE returns a single row and
srvnetname contains the correct
Backup Server name | No action is needed. | ASE returns a single row
but the srvnetname is not the
correct Backup Server name | Issue the following isql command: 1> update sysservers
2> set srvnetname = "backup_server_name"
3> where srvname = "SYB_BACKUP"
4> go where backup_server_name is the name of the Backup Server
as it appears in the interfaces file. | ASE returns 0 rows | Issue the following isql command: 1> sp_addserver SYB_BACKUP, null,
2> backup_server_name
3> go
|
|