Preheat the oven to 325°. Season the lamb with salt and pepper. In a large skillet, heat 1 tablespoon of the oil. Add the lamb and cook over moderately high heat until browned on all sides, about 8 minutes. Transfer the lamb to a plate and pour off the oil.
Add the remaining 1 tablespoon of oil to the skillet and add the onions, garlic and celery. Cook over moderate heat until browned, 12 minutes. Add the wine and port and boil until reduced to 1/3 cup, about 4 minutes. Transfer to a roasting pan and add the rosemary. Arrange the lamb shank and carrots in the pan, add 3/4 cup of water and cover with foil. Bake for 2 hours, turning the lamb and carrots once, until the lamb is very tender.